Changed Share Object logic to use Access Keys (#2827)

Signed-off-by: Benjamin Perez <benjamin@bexsoft.net>
This commit is contained in:
Alex
2023-05-24 11:52:40 -06:00
committed by GitHub
parent 17e791afb9
commit 7a9b775b09
16 changed files with 661 additions and 296 deletions

View File

@@ -461,12 +461,24 @@ func ListObjects(bucketName, prefix, withVersions string) (*http.Response, error
return response, err
}
func SharesAnObjectOnAUrl(bucketName, prefix, versionID, expires string) (*http.Response, error) {
// Helper function to share an object on a url
func SharesAnObjectOnAUrl(bucketName, prefix, versionID, expires, accessKey, secretKey string) (*http.Response, error) {
// Helper function to share an object on an url
requestDataAdd := map[string]interface{}{
"prefix": prefix,
"version_id": versionID,
"expires": expires,
"access_key": accessKey,
"secret_key": secretKey,
}
requestDataJSON, _ := json.Marshal(requestDataAdd)
requestDataBody := bytes.NewReader(requestDataJSON)
request, err := http.NewRequest(
"GET",
"http://localhost:9090/api/v1/buckets/"+bucketName+"/objects/share?prefix="+prefix+"&version_id="+versionID+"&expires="+expires,
nil,
"POST",
"http://localhost:9090/api/v1/buckets/"+bucketName+"/objects/share",
requestDataBody,
)
if err != nil {
log.Println(err)
@@ -743,6 +755,39 @@ func PutObjectsLegalholdStatus(bucketName, prefix, status, versionID string) (*h
return response, err
}
func PostServiceAccountCredentials(accessKey, secretKey, policy string) (*http.Response, error) {
/*
Helper function to create a service account
POST: {{baseUrl}}/service-account-credentials
{
"accessKey":"testsa",
"secretKey":"secretsa",
"policy":""
}
*/
requestDataAdd := map[string]interface{}{
"accessKey": accessKey,
"secretKey": secretKey,
"policy": policy,
}
requestDataJSON, _ := json.Marshal(requestDataAdd)
requestDataBody := bytes.NewReader(requestDataJSON)
request, err := http.NewRequest("POST",
"http://localhost:9090/api/v1/service-account-credentials",
requestDataBody)
if err != nil {
log.Println(err)
}
request.Header.Add("Cookie", fmt.Sprintf("token=%s", token))
request.Header.Add("Content-Type", "application/json")
client := &http.Client{
Timeout: 2 * time.Second,
}
response, err := client.Do(request)
return response, err
}
func TestPutObjectsLegalholdStatus(t *testing.T) {
// Variables
assert := assert.New(t)
@@ -1514,6 +1559,8 @@ func TestShareObjectOnURL(t *testing.T) {
tags := make(map[string]string)
tags["tag"] = "testputobjecttagbucketonetagone"
versionID := "null"
accessKey := "testaccesskey"
secretKey := "secretAccessKey"
// 1. Create the bucket
if !setupBucket(bucketName, false, false, nil, nil, assert, 200) {
@@ -1534,6 +1581,21 @@ func TestShareObjectOnURL(t *testing.T) {
inspectHTTPResponse(uploadResponse),
)
}
// 2. Create Access Key
accKeyRsp, createError := PostServiceAccountCredentials(accessKey, secretKey, "")
if createError != nil {
log.Println(createError)
return
}
if accKeyRsp != nil {
assert.Equal(
201,
accKeyRsp.StatusCode,
inspectHTTPResponse(accKeyRsp),
)
}
type args struct {
prefix string
@@ -1561,7 +1623,7 @@ func TestShareObjectOnURL(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
// 3. Share the object on a URL
shareResponse, shareError := SharesAnObjectOnAUrl(bucketName, tt.args.prefix, versionID, "604800s")
shareResponse, shareError := SharesAnObjectOnAUrl(bucketName, tt.args.prefix, versionID, "604800s", accessKey, secretKey)
assert.Nil(shareError)
if shareError != nil {
log.Println(shareError)