aboutsummaryrefslogtreecommitdiff
path: root/weed/server/filer_server_handlers_write_autochunk.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/server/filer_server_handlers_write_autochunk.go')
-rw-r--r--weed/server/filer_server_handlers_write_autochunk.go54
1 files changed, 3 insertions, 51 deletions
diff --git a/weed/server/filer_server_handlers_write_autochunk.go b/weed/server/filer_server_handlers_write_autochunk.go
index fba693f43..4a200cf43 100644
--- a/weed/server/filer_server_handlers_write_autochunk.go
+++ b/weed/server/filer_server_handlers_write_autochunk.go
@@ -3,7 +3,6 @@ package weed_server
import (
"bytes"
"context"
- "encoding/base64"
"errors"
"fmt"
"io"
@@ -174,10 +173,6 @@ func skipCheckParentDirEntry(r *http.Request) bool {
return r.URL.Query().Get("skipCheckParentDir") == "true"
}
-func isS3Request(r *http.Request) bool {
- return r.Header.Get(s3_constants.AmzAuthType) != "" || r.Header.Get("X-Amz-Date") != ""
-}
-
func (fs *FilerServer) checkPermissions(ctx context.Context, r *http.Request, fileName string) error {
fullPath := fs.fixFilePath(ctx, r, fileName)
enforced, err := fs.wormEnforcedForEntry(ctx, fullPath)
@@ -357,52 +352,7 @@ func (fs *FilerServer) saveMetaData(ctx context.Context, r *http.Request, fileNa
}
}
- // Process SSE metadata headers sent by S3 API and store in entry extended metadata
- if sseIVHeader := r.Header.Get(s3_constants.SeaweedFSSSEIVHeader); sseIVHeader != "" {
- // Decode base64-encoded IV and store in metadata
- if ivData, err := base64.StdEncoding.DecodeString(sseIVHeader); err == nil {
- entry.Extended[s3_constants.SeaweedFSSSEIV] = ivData
- glog.V(4).Infof("Stored SSE-C IV metadata for %s", entry.FullPath)
- } else {
- glog.Errorf("Failed to decode SSE-C IV header for %s: %v", entry.FullPath, err)
- }
- }
-
- // Store SSE-C algorithm and key MD5 for proper S3 API response headers
- if sseAlgorithm := r.Header.Get(s3_constants.AmzServerSideEncryptionCustomerAlgorithm); sseAlgorithm != "" {
- entry.Extended[s3_constants.AmzServerSideEncryptionCustomerAlgorithm] = []byte(sseAlgorithm)
- glog.V(4).Infof("Stored SSE-C algorithm metadata for %s", entry.FullPath)
- }
- if sseKeyMD5 := r.Header.Get(s3_constants.AmzServerSideEncryptionCustomerKeyMD5); sseKeyMD5 != "" {
- entry.Extended[s3_constants.AmzServerSideEncryptionCustomerKeyMD5] = []byte(sseKeyMD5)
- glog.V(4).Infof("Stored SSE-C key MD5 metadata for %s", entry.FullPath)
- }
-
- if sseKMSHeader := r.Header.Get(s3_constants.SeaweedFSSSEKMSKeyHeader); sseKMSHeader != "" {
- // Decode base64-encoded KMS metadata and store
- if kmsData, err := base64.StdEncoding.DecodeString(sseKMSHeader); err == nil {
- entry.Extended[s3_constants.SeaweedFSSSEKMSKey] = kmsData
- glog.V(4).Infof("Stored SSE-KMS metadata for %s", entry.FullPath)
- } else {
- glog.Errorf("Failed to decode SSE-KMS metadata header for %s: %v", entry.FullPath, err)
- }
- }
-
- if sseS3Header := r.Header.Get(s3_constants.SeaweedFSSSES3Key); sseS3Header != "" {
- // Decode base64-encoded S3 metadata and store
- if s3Data, err := base64.StdEncoding.DecodeString(sseS3Header); err == nil {
- entry.Extended[s3_constants.SeaweedFSSSES3Key] = s3Data
- glog.V(4).Infof("Stored SSE-S3 metadata for %s", entry.FullPath)
- } else {
- glog.Errorf("Failed to decode SSE-S3 metadata header for %s: %v", entry.FullPath, err)
- }
- }
-
dbErr := fs.filer.CreateEntry(ctx, entry, false, false, nil, skipCheckParentDirEntry(r), so.MaxFileNameLength)
- // In test_bucket_listv2_delimiter_basic, the valid object key is the parent folder
- if dbErr != nil && strings.HasSuffix(dbErr.Error(), " is a file") && isS3Request(r) {
- dbErr = fs.filer.CreateEntry(ctx, entry, false, false, nil, true, so.MaxFileNameLength)
- }
if dbErr != nil {
replyerr = dbErr
filerResult.Error = dbErr.Error()
@@ -544,6 +494,8 @@ func SaveAmzMetaData(r *http.Request, existing map[string][]byte, isReplace bool
for header, values := range r.Header {
if strings.HasPrefix(header, s3_constants.AmzUserMetaPrefix) {
+ // Go's HTTP server canonicalizes headers (e.g., x-amz-meta-foo → X-Amz-Meta-Foo)
+ // We store them as they come in (after canonicalization) to preserve the user's intent
for _, value := range values {
metadata[header] = []byte(value)
}
@@ -567,7 +519,7 @@ func SaveAmzMetaData(r *http.Request, existing map[string][]byte, isReplace bool
//acp-grants
acpGrants := r.Header.Get(s3_constants.ExtAmzAclKey)
- if len(acpOwner) > 0 {
+ if len(acpGrants) > 0 {
metadata[s3_constants.ExtAmzAclKey] = []byte(acpGrants)
}