From 31a5d640ebe3422dddcdb96163afc083bd34c92b Mon Sep 17 00:00:00 2001 From: Chai-Shi Date: Thu, 23 Jan 2025 19:23:46 +0800 Subject: [PATCH] Support login request with leading or trailing whitespace from payload (#3496) * trim whitespaces for login request * simplify trimspace calls --- api/user_login.go | 4 ++++ integration/login_test.go | 30 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/api/user_login.go b/api/user_login.go index 9f6b3aae56..8ec646d1eb 100644 --- a/api/user_login.go +++ b/api/user_login.go @@ -129,6 +129,10 @@ func getLoginResponse(params authApi.LoginParams) (*models.LoginResponse, *Coded ctx, cancel := context.WithCancel(params.HTTPRequest.Context()) defer cancel() lr := params.Body + // trim any leading and trailing whitespace from the login request + lr.AccessKey = strings.TrimSpace(lr.AccessKey) + lr.SecretKey = strings.TrimSpace(lr.SecretKey) + lr.Sts = strings.TrimSpace(lr.Sts) clientIP := getClientIP(params.HTTPRequest) client := GetConsoleHTTPClient(clientIP) diff --git a/integration/login_test.go b/integration/login_test.go index b358b64247..0870d20312 100644 --- a/integration/login_test.go +++ b/integration/login_test.go @@ -131,6 +131,36 @@ func TestLogout(t *testing.T) { assert.Equal(response.StatusCode, 200) } +func TestLoginExtraSpaces(t *testing.T) { + assert := assert.New(t) + + client := &http.Client{ + Timeout: 2 * time.Second, + } + requestData := map[string]string{ + "accessKey": " minioadmin ", + "secretKey": "minioadmin", + } + + requestDataJSON, _ := json.Marshal(requestData) + + requestDataBody := bytes.NewReader(requestDataJSON) + + request, err := http.NewRequest("POST", "http://localhost:9090/api/v1/login", requestDataBody) + if err != nil { + log.Println(err) + return + } + + request.Header.Add("Content-Type", "application/json") + + response, err := client.Do(request) + + assert.Equal(204, response.StatusCode, "Login request should succeed") + assert.NotNil(response, "Login response is nil") + assert.Nil(err, "Login errored out") +} + func TestBadLogin(t *testing.T) { assert := assert.New(t)