Skip to content

Commit 5280ca6

Browse files
author
Benjamin Perez
committed
Changed Share Object logic to use Access Keys
Signed-off-by: Benjamin Perez <[email protected]>
1 parent 17e791a commit 5280ca6

File tree

16 files changed

+656
-291
lines changed

16 files changed

+656
-291
lines changed

integration/user_api_bucket_test.go

Lines changed: 68 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -461,12 +461,24 @@ func ListObjects(bucketName, prefix, withVersions string) (*http.Response, error
461461
return response, err
462462
}
463463

464-
func SharesAnObjectOnAUrl(bucketName, prefix, versionID, expires string) (*http.Response, error) {
465-
// Helper function to share an object on a url
464+
func SharesAnObjectOnAUrl(bucketName, prefix, versionID, expires, accessKey, secretKey string) (*http.Response, error) {
465+
// Helper function to share an object on an url
466+
467+
requestDataAdd := map[string]interface{}{
468+
"prefix": prefix,
469+
"version_id": versionID,
470+
"expires": expires,
471+
"access_key": accessKey,
472+
"secret_key": secretKey,
473+
}
474+
475+
requestDataJSON, _ := json.Marshal(requestDataAdd)
476+
requestDataBody := bytes.NewReader(requestDataJSON)
477+
466478
request, err := http.NewRequest(
467-
"GET",
468-
"http://localhost:9090/api/v1/buckets/"+bucketName+"/objects/share?prefix="+prefix+"&version_id="+versionID+"&expires="+expires,
469-
nil,
479+
"POST",
480+
"http://localhost:9090/api/v1/buckets/"+bucketName+"/objects/share",
481+
requestDataBody,
470482
)
471483
if err != nil {
472484
log.Println(err)
@@ -743,6 +755,39 @@ func PutObjectsLegalholdStatus(bucketName, prefix, status, versionID string) (*h
743755
return response, err
744756
}
745757

758+
func PostServiceAccountCredentials(accessKey, secretKey, policy string) (*http.Response, error) {
759+
/*
760+
Helper function to create a service account
761+
POST: {{baseUrl}}/service-account-credentials
762+
{
763+
"accessKey":"testsa",
764+
"secretKey":"secretsa",
765+
"policy":""
766+
}
767+
*/
768+
requestDataAdd := map[string]interface{}{
769+
"accessKey": accessKey,
770+
"secretKey": secretKey,
771+
"policy": policy,
772+
}
773+
requestDataJSON, _ := json.Marshal(requestDataAdd)
774+
requestDataBody := bytes.NewReader(requestDataJSON)
775+
776+
request, err := http.NewRequest("POST",
777+
"http://localhost:9090/api/v1/service-account-credentials",
778+
requestDataBody)
779+
if err != nil {
780+
log.Println(err)
781+
}
782+
request.Header.Add("Cookie", fmt.Sprintf("token=%s", token))
783+
request.Header.Add("Content-Type", "application/json")
784+
client := &http.Client{
785+
Timeout: 2 * time.Second,
786+
}
787+
response, err := client.Do(request)
788+
return response, err
789+
}
790+
746791
func TestPutObjectsLegalholdStatus(t *testing.T) {
747792
// Variables
748793
assert := assert.New(t)
@@ -1514,6 +1559,8 @@ func TestShareObjectOnURL(t *testing.T) {
15141559
tags := make(map[string]string)
15151560
tags["tag"] = "testputobjecttagbucketonetagone"
15161561
versionID := "null"
1562+
accessKey := "testaccesskey"
1563+
secretKey := "secretAccessKey"
15171564

15181565
// 1. Create the bucket
15191566
if !setupBucket(bucketName, false, false, nil, nil, assert, 200) {
@@ -1534,6 +1581,21 @@ func TestShareObjectOnURL(t *testing.T) {
15341581
inspectHTTPResponse(uploadResponse),
15351582
)
15361583
}
1584+
// 2. Create Access Key
1585+
accKeyRsp, createError := PostServiceAccountCredentials(accessKey, secretKey, "")
1586+
1587+
if createError != nil {
1588+
log.Println(createError)
1589+
return
1590+
}
1591+
1592+
if accKeyRsp != nil {
1593+
assert.Equal(
1594+
201,
1595+
accKeyRsp.StatusCode,
1596+
inspectHTTPResponse(accKeyRsp),
1597+
)
1598+
}
15371599

15381600
type args struct {
15391601
prefix string
@@ -1561,7 +1623,7 @@ func TestShareObjectOnURL(t *testing.T) {
15611623
for _, tt := range tests {
15621624
t.Run(tt.name, func(t *testing.T) {
15631625
// 3. Share the object on a URL
1564-
shareResponse, shareError := SharesAnObjectOnAUrl(bucketName, tt.args.prefix, versionID, "604800s")
1626+
shareResponse, shareError := SharesAnObjectOnAUrl(bucketName, tt.args.prefix, versionID, "604800s", accessKey, secretKey)
15651627
assert.Nil(shareError)
15661628
if shareError != nil {
15671629
log.Println(shareError)

models/share_request.go

Lines changed: 142 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

portal-ui/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
},
6767
"proxy": "http://localhost:9090/",
6868
"devDependencies": {
69-
"@playwright/test": "^1.32.3",
69+
"@playwright/test": "^1.34.0",
7070
"@types/lodash": "^4.14.194",
7171
"@types/luxon": "^3.3.0",
7272
"@types/minio": "^7.0.18",
@@ -85,15 +85,15 @@
8585
"@types/websocket": "^1.0.0",
8686
"babel-plugin-istanbul": "^6.1.1",
8787
"customize-cra": "^1.0.0",
88+
"minio": "^7.0.33",
8889
"nyc": "^15.1.0",
8990
"playwright": "^1.31.3",
9091
"prettier": "2.8.8",
9192
"react-app-rewire-hot-loader": "^2.0.1",
9293
"react-app-rewired": "^2.2.1",
9394
"react-scripts": "5.0.1",
9495
"testcafe": "^2.5.0",
95-
"typescript": "^4.4.3",
96-
"minio": "^7.0.33"
96+
"typescript": "^4.4.3"
9797
},
9898
"resolutions": {
9999
"nth-check": "^2.0.1",

portal-ui/src/api/consoleApi.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1494,6 +1494,14 @@ export interface LdapPolicyEntity {
14941494
groups?: string[];
14951495
}
14961496

1497+
export interface ShareRequest {
1498+
prefix: string;
1499+
version_id: string;
1500+
expires?: string;
1501+
access_key: string;
1502+
secret_key: string;
1503+
}
1504+
14971505
export type QueryParamsType = Record<string | number, any>;
14981506
export type ResponseFormat = keyof Omit<Body, "body" | "bodyUsed">;
14991507

@@ -2171,23 +2179,20 @@ export class Api<
21712179
* @tags Object
21722180
* @name ShareObject
21732181
* @summary Shares an Object on a url
2174-
* @request GET:/buckets/{bucket_name}/objects/share
2182+
* @request POST:/buckets/{bucket_name}/objects/share
21752183
* @secure
21762184
*/
21772185
shareObject: (
21782186
bucketName: string,
2179-
query: {
2180-
prefix: string;
2181-
version_id: string;
2182-
expires?: string;
2183-
},
2187+
body: ShareRequest,
21842188
params: RequestParams = {}
21852189
) =>
21862190
this.request<IamEntity, Error>({
21872191
path: `/buckets/${bucketName}/objects/share`,
2188-
method: "GET",
2189-
query: query,
2192+
method: "POST",
2193+
body: body,
21902194
secure: true,
2195+
type: ContentType.Json,
21912196
format: "json",
21922197
...params,
21932198
}),

0 commit comments

Comments
 (0)