From a9400c5d9b9db2b83013407097987d0a9efbc93f Mon Sep 17 00:00:00 2001 From: cesnietor Date: Fri, 3 May 2024 13:32:59 -0700 Subject: [PATCH] Fix URL safe string decoding for DownloadPublicObject API --- api/public_objects.go | 2 +- api/public_objects_test.go | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/api/public_objects.go b/api/public_objects.go index e251ee47b3..e714aa8c6c 100644 --- a/api/public_objects.go +++ b/api/public_objects.go @@ -93,7 +93,7 @@ func getDownloadPublicObjectResponse(params public.DownloadSharedObjectParams) ( // b64toMinIOStringURL decodes url and validates is a MinIO url endpoint func b64toMinIOStringURL(inputEncodedURL string) (*string, error) { - inputURLDecoded, err := b64.StdEncoding.DecodeString(inputEncodedURL) + inputURLDecoded, err := b64.URLEncoding.DecodeString(inputEncodedURL) if err != nil { return nil, err } diff --git a/api/public_objects_test.go b/api/public_objects_test.go index 8ec1a23572..af0537b01e 100644 --- a/api/public_objects_test.go +++ b/api/public_objects_test.go @@ -76,6 +76,14 @@ func Test_b64toMinIOStringURL(t *testing.T) { wantError: swag.String("unexpected scheme found "), expected: nil, }, + { + test: "encoded url is url safe decoded", + args: args{ + encodedURL: "aHR0cHM6Ly9sb2NhbGhvc3Q6OTAwMC9jZXN0ZXN0L0F1ZGlvJTIwaWNvbi5zdmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTY=", + }, + wantError: nil, + expected: swag.String("https://localhost:9000/cestest/Audio%20icon.svg?X-Amz-Algorithm=AWS4-HMAC-SHA256"), + }, } for _, tt := range tests { @@ -84,16 +92,16 @@ func Test_b64toMinIOStringURL(t *testing.T) { if tt.wantError != nil { if err != nil { if err.Error() != *tt.wantError { - t.Errorf("b64toMinIOStringURL() error: `%v`, wantErr: `%s`", err, *tt.wantError) + t.Errorf("b64toMinIOStringURL() error: `%v`, wantErr: `%s`, input: `%s`", err, *tt.wantError, tt.args.encodedURL) return } } else { - t.Errorf("b64toMinIOStringURL() error: `%v`, wantErr: `%s`", err, *tt.wantError) + t.Errorf("b64toMinIOStringURL() error: `%v`, wantErr: `%s`, input: `%s`", err, *tt.wantError, tt.args.encodedURL) return } } else { if err != nil { - t.Errorf("b64toMinIOStringURL() error: `%s`, wantErr: `%v`", err, tt.wantError) + t.Errorf("b64toMinIOStringURL() error: `%s`, wantErr: `%v`, input: `%s`", err, tt.wantError, tt.args.encodedURL) return } tAssert.Equal(*tt.expected, *url)