diff options
| author | Chris Lu <chrislusf@users.noreply.github.com> | 2022-04-19 21:42:21 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-04-19 21:42:21 -0700 |
| commit | bc96e73b8dfbc25f285d17ac4438c85dfd958be3 (patch) | |
| tree | 4d7560ef5cda86868ede745e1376074fcc836b05 | |
| parent | 88a669dd193ce03fd4a511487e1a0fdaab118890 (diff) | |
| parent | a23629b2fe9112cfa9676206292f5a7de4c3a33a (diff) | |
| download | seaweedfs-bc96e73b8dfbc25f285d17ac4438c85dfd958be3.tar.xz seaweedfs-bc96e73b8dfbc25f285d17ac4438c85dfd958be3.zip | |
Merge pull request #2944 from guo-sj/handle_implicit_username
handle implicit username
| -rw-r--r-- | weed/iamapi/iamapi_management_handlers.go | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/weed/iamapi/iamapi_management_handlers.go b/weed/iamapi/iamapi_management_handlers.go index 94003c46e..5fea49f5c 100644 --- a/weed/iamapi/iamapi_management_handlers.go +++ b/weed/iamapi/iamapi_management_handlers.go @@ -377,6 +377,18 @@ func (iama *IamApiServer) DeleteAccessKey(s3cfg *iam_pb.S3ApiConfiguration, valu return resp } +// handleImplicitUsername adds username who signs the request to values if 'username' is not specified +// According to https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iam/create-access-key.html/ +// "If you do not specify a user name, IAM determines the user name implicitly based on the Amazon Web +// Services access key ID signing the request." +func handleImplicitUsername(r *http.Request, values url.Values) { + if values.Get("UserName") == "" { + // get username who signs the request + userName := strings.Split(r.Header["Authorization"][0], "/")[2] + values.Set("UserName", userName) + } +} + func (iama *IamApiServer) DoActions(w http.ResponseWriter, r *http.Request) { if err := r.ParseForm(); err != nil { s3err.WriteErrorResponse(w, r, s3err.ErrInvalidRequest) @@ -401,6 +413,7 @@ func (iama *IamApiServer) DoActions(w http.ResponseWriter, r *http.Request) { response = iama.ListUsers(s3cfg, values) changed = false case "ListAccessKeys": + handleImplicitUsername(r, values) response = iama.ListAccessKeys(s3cfg, values) changed = false case "CreateUser": @@ -428,8 +441,10 @@ func (iama *IamApiServer) DoActions(w http.ResponseWriter, r *http.Request) { return } case "CreateAccessKey": + handleImplicitUsername(r, values) response = iama.CreateAccessKey(s3cfg, values) case "DeleteAccessKey": + handleImplicitUsername(r, values) response = iama.DeleteAccessKey(s3cfg, values) case "CreatePolicy": response, err = iama.CreatePolicy(s3cfg, values) |
