diff options
Diffstat (limited to 'weed/s3api/s3api_object_handlers_put.go')
| -rw-r--r-- | weed/s3api/s3api_object_handlers_put.go | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/weed/s3api/s3api_object_handlers_put.go b/weed/s3api/s3api_object_handlers_put.go index 3d8a62b09..63972bcd6 100644 --- a/weed/s3api/s3api_object_handlers_put.go +++ b/weed/s3api/s3api_object_handlers_put.go @@ -190,6 +190,25 @@ func (s3a *S3ApiServer) PutObjectHandler(w http.ResponseWriter, r *http.Request) func (s3a *S3ApiServer) putToFiler(r *http.Request, uploadUrl string, dataReader io.Reader, destination string, bucket string) (etag string, code s3err.ErrorCode) { + // Handle SSE-C encryption if requested + customerKey, err := ParseSSECHeaders(r) + if err != nil { + glog.Errorf("SSE-C header validation failed: %v", err) + // Use shared error mapping helper + errCode := MapSSECErrorToS3Error(err) + return "", errCode + } + + // Apply SSE-C encryption if customer key is provided + if customerKey != nil { + encryptedReader, encErr := CreateSSECEncryptedReader(dataReader, customerKey) + if encErr != nil { + glog.Errorf("Failed to create SSE-C encrypted reader: %v", encErr) + return "", s3err.ErrInternalError + } + dataReader = encryptedReader + } + hash := md5.New() var body = io.TeeReader(dataReader, hash) |
