diff --git a/pkg/storage/storage.go b/pkg/storage/storage.go index ea8301139..3978bd989 100644 --- a/pkg/storage/storage.go +++ b/pkg/storage/storage.go @@ -18,10 +18,13 @@ package storage import ( "bytes" + "fmt" "io" "log" "strings" "time" + + "crypto/sha256" ) type Storage struct { @@ -49,6 +52,7 @@ type ObjectMetadata struct { Key string SecCreated int64 Size int + ETag string } func isValidBucket(bucket string) bool { @@ -108,10 +112,13 @@ func (storage *Storage) StoreObject(bucket string, key string, data io.Reader) e var bytesBuffer bytes.Buffer newObject := storedObject{} if _, ok := io.Copy(&bytesBuffer, data); ok == nil { + size := bytesBuffer.Len() + etag := fmt.Sprintf("%x", sha256.Sum256(bytesBuffer.Bytes())) newObject.metadata = ObjectMetadata{ Key: key, SecCreated: time.Now().Unix(), - Size: len(bytesBuffer.Bytes()), + Size: size, + ETag: etag, } newObject.data = bytesBuffer.Bytes() } diff --git a/pkg/webapi/minioapi/minioapi.go b/pkg/webapi/minioapi/minioapi.go index 9555e952f..5089ed6db 100644 --- a/pkg/webapi/minioapi/minioapi.go +++ b/pkg/webapi/minioapi/minioapi.go @@ -43,6 +43,7 @@ func HttpHandler(storage *mstorage.Storage) http.Handler { } mux.HandleFunc("/", api.listBucketsHandler).Methods("GET") mux.HandleFunc("/{bucket}", api.putBucketHandler).Methods("PUT") + mux.HandleFunc("/{bucket}", api.listObjectsHandler).Methods("GET") mux.HandleFunc("/{bucket}/", api.listObjectsHandler).Methods("GET") mux.HandleFunc("/{bucket}/{object:.*}", api.getObjectHandler).Methods("GET") mux.HandleFunc("/{bucket}/{object:.*}", api.putObjectHandler).Methods("PUT") @@ -200,7 +201,7 @@ func generateObjectsListResult(bucket string, objects []mstorage.ObjectMetadata) content := Content{ Key: object.Key, LastModified: formatDate(object.SecCreated), - ETag: object.Key, + ETag: object.ETag, Size: object.Size, StorageClass: "STANDARD", Owner: owner, diff --git a/pkg/webapi/minioapi/minioapi_test.go b/pkg/webapi/minioapi/minioapi_test.go index 7a632d69b..96cdb512b 100644 --- a/pkg/webapi/minioapi/minioapi_test.go +++ b/pkg/webapi/minioapi/minioapi_test.go @@ -47,7 +47,7 @@ func TestMinioApi(t *testing.T) { Owner: owner, }, } - data := &ListResponse{ + data := &ObjectListResponse{ Name: "name", Contents: contents, }