Skip to content

Commit 49c5f5a

Browse files
authored
Use automatic URI encoding (#3352)
1 parent 72939e0 commit 49c5f5a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+398
-875
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ swagger-console:
5858
@echo "Generating swagger server code from yaml"
5959
@swagger generate server -A console --main-package=management --server-package=api --exclude-main -P models.Principal -f ./swagger.yml -r NOTICE
6060
@echo "Generating typescript api"
61-
@npx swagger-typescript-api -p ./swagger.yml -o ./web-app/src/api -n consoleApi.ts
61+
@npx swagger-typescript-api -p ./swagger.yml -o ./web-app/src/api -n consoleApi.ts --custom-config generator.config.js
6262
@git restore api/server.go
6363

6464

api/admin_groups.go

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
"github.com/go-openapi/errors"
2323
"github.com/go-openapi/runtime/middleware"
2424
"github.com/minio/console/api/operations"
25-
"github.com/minio/console/pkg/utils"
2625
"github.com/minio/madmin-go/v3"
2726

2827
groupApi "github.com/minio/console/api/operations/group"
@@ -118,12 +117,7 @@ func getGroupInfoResponse(session *models.Principal, params groupApi.GroupInfoPa
118117
// defining the client to be used
119118
adminClient := AdminClient{Client: mAdmin}
120119

121-
groupName, err := utils.DecodeBase64(params.Name)
122-
if err != nil {
123-
return nil, ErrorWithContext(ctx, err)
124-
}
125-
126-
groupDesc, err := groupInfo(ctx, adminClient, groupName)
120+
groupDesc, err := groupInfo(ctx, adminClient, params.Name)
127121
if err != nil {
128122
return nil, ErrorWithContext(ctx, err)
129123
}
@@ -212,12 +206,7 @@ func getRemoveGroupResponse(session *models.Principal, params groupApi.RemoveGro
212206
// defining the client to be used
213207
adminClient := AdminClient{Client: mAdmin}
214208

215-
groupName, err := utils.DecodeBase64(params.Name)
216-
if err != nil {
217-
return ErrorWithContext(ctx, err)
218-
}
219-
220-
if err := removeGroup(ctx, adminClient, groupName); err != nil {
209+
if err := removeGroup(ctx, adminClient, params.Name); err != nil {
221210
minioError := madmin.ToErrorResponse(err)
222211
err2 := ErrorWithContext(ctx, err)
223212
if minioError.Code == "XMinioAdminNoSuchGroup" {
@@ -293,11 +282,6 @@ func getUpdateGroupResponse(session *models.Principal, params groupApi.UpdateGro
293282
}
294283
expectedGroupUpdate := params.Body
295284

296-
groupName, err := utils.DecodeBase64(params.Name)
297-
if err != nil {
298-
return nil, ErrorWithContext(ctx, err)
299-
}
300-
301285
mAdmin, err := NewMinioAdminClient(params.HTTPRequest.Context(), session)
302286
if err != nil {
303287
return nil, ErrorWithContext(ctx, err)
@@ -306,7 +290,7 @@ func getUpdateGroupResponse(session *models.Principal, params groupApi.UpdateGro
306290
// defining the client to be used
307291
adminClient := AdminClient{Client: mAdmin}
308292

309-
groupUpdated, err := groupUpdate(ctx, adminClient, groupName, expectedGroupUpdate)
293+
groupUpdated, err := groupUpdate(ctx, adminClient, params.Name, expectedGroupUpdate)
310294
if err != nil {
311295
return nil, ErrorWithContext(ctx, err)
312296
}

api/admin_inspect.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
"io"
2323
"net/http"
2424
"strings"
25-
"unicode/utf8"
2625

2726
"github.com/go-openapi/runtime"
2827
"github.com/go-openapi/runtime/middleware"
@@ -35,14 +34,6 @@ import (
3534

3635
func registerInspectHandler(api *operations.ConsoleAPI) {
3736
api.InspectInspectHandler = inspectApi.InspectHandlerFunc(func(params inspectApi.InspectParams, principal *models.Principal) middleware.Responder {
38-
if v, err := base64.URLEncoding.DecodeString(params.File); err == nil && utf8.Valid(v) {
39-
params.File = string(v)
40-
}
41-
42-
if v, err := base64.URLEncoding.DecodeString(params.Volume); err == nil && utf8.Valid(v) {
43-
params.Volume = string(v)
44-
}
45-
4637
k, r, err := getInspectResult(principal, &params)
4738
if err != nil {
4839
return inspectApi.NewInspectDefault(err.Code).WithPayload(err.APIError)

api/admin_objects.go

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package api
1818

1919
import (
2020
"context"
21-
"encoding/base64"
2221
"time"
2322

2423
"github.com/minio/mc/cmd"
@@ -60,20 +59,7 @@ type ObjectResponse struct {
6059
func getObjectsOptionsFromReq(request ObjectsRequest) (*objectsListOpts, error) {
6160
pOptions := objectsListOpts{
6261
BucketName: request.BucketName,
63-
Prefix: "",
64-
}
65-
66-
prefix := request.Prefix
67-
68-
if prefix != "" {
69-
encodedPrefix := SanitizeEncodedPrefix(prefix)
70-
decodedPrefix, err := base64.StdEncoding.DecodeString(encodedPrefix)
71-
if err != nil {
72-
LogError("error decoding prefix: %v", err)
73-
return nil, err
74-
}
75-
76-
pOptions.Prefix = string(decodedPrefix)
62+
Prefix: request.Prefix,
7763
}
7864

7965
if request.Mode == "rewind" {

api/admin_policies.go

Lines changed: 9 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626

2727
bucketApi "github.com/minio/console/api/operations/bucket"
2828
policyApi "github.com/minio/console/api/operations/policy"
29-
"github.com/minio/console/pkg/utils"
3029
s3 "github.com/minio/minio-go/v7"
3130

3231
"github.com/go-openapi/runtime/middleware"
@@ -308,10 +307,6 @@ func getListPoliciesResponse(session *models.Principal, params policyApi.ListPol
308307
func getListUsersForPolicyResponse(session *models.Principal, params policyApi.ListUsersForPolicyParams) ([]string, *CodedAPIError) {
309308
ctx, cancel := context.WithCancel(params.HTTPRequest.Context())
310309
defer cancel()
311-
policy, err := utils.DecodeBase64(params.Policy)
312-
if err != nil {
313-
return nil, ErrorWithContext(ctx, err)
314-
}
315310
mAdmin, err := NewMinioAdminClient(params.HTTPRequest.Context(), session)
316311
if err != nil {
317312
return nil, ErrorWithContext(ctx, err)
@@ -325,12 +320,12 @@ func getListUsersForPolicyResponse(session *models.Principal, params policyApi.L
325320
}
326321
found := false
327322
for i := range policies {
328-
if policies[i].Name == policy {
323+
if policies[i].Name == params.Policy {
329324
found = true
330325
}
331326
}
332327
if !found {
333-
return nil, ErrorWithContext(ctx, ErrPolicyNotFound, fmt.Errorf("the policy %s does not exist", policy))
328+
return nil, ErrorWithContext(ctx, ErrPolicyNotFound, fmt.Errorf("the policy %s does not exist", params.Policy))
334329
}
335330
users, err := listUsers(ctx, adminClient)
336331
if err != nil {
@@ -340,7 +335,7 @@ func getListUsersForPolicyResponse(session *models.Principal, params policyApi.L
340335
var filteredUsers []string
341336
for _, user := range users {
342337
for _, upolicy := range user.Policy {
343-
if upolicy == policy {
338+
if upolicy == params.Policy {
344339
filteredUsers = append(filteredUsers, user.AccessKey)
345340
break
346341
}
@@ -397,12 +392,7 @@ func getSAUserPolicyResponse(session *models.Principal, params policyApi.GetSAUs
397392
}
398393
userAdminClient := AdminClient{Client: mAdminClient}
399394

400-
userName, err := utils.DecodeBase64(params.Name)
401-
if err != nil {
402-
return nil, ErrorWithContext(ctx, err)
403-
}
404-
405-
user, err := getUserInfo(ctx, userAdminClient, userName)
395+
user, err := getUserInfo(ctx, userAdminClient, params.Name)
406396
if err != nil {
407397
return nil, ErrorWithContext(ctx, err)
408398
}
@@ -467,23 +457,19 @@ func getListGroupsForPolicyResponse(session *models.Principal, params policyApi.
467457
}
468458
// create a minioClient interface implementation
469459
// defining the client to be used
470-
policy, err := utils.DecodeBase64(params.Policy)
471-
if err != nil {
472-
return nil, ErrorWithContext(ctx, err)
473-
}
474460
adminClient := AdminClient{Client: mAdmin}
475461
policies, err := listPolicies(ctx, adminClient)
476462
if err != nil {
477463
return nil, ErrorWithContext(ctx, err)
478464
}
479465
found := false
480466
for i := range policies {
481-
if policies[i].Name == policy {
467+
if policies[i].Name == params.Policy {
482468
found = true
483469
}
484470
}
485471
if !found {
486-
return nil, ErrorWithContext(ctx, ErrPolicyNotFound, fmt.Errorf("the policy %s does not exist", policy))
472+
return nil, ErrorWithContext(ctx, ErrPolicyNotFound, fmt.Errorf("the policy %s does not exist", params.Policy))
487473
}
488474

489475
groups, err := adminClient.listGroups(ctx)
@@ -499,7 +485,7 @@ func getListGroupsForPolicyResponse(session *models.Principal, params policyApi.
499485
}
500486
groupPolicies := strings.Split(info.Policy, ",")
501487
for _, groupPolicy := range groupPolicies {
502-
if groupPolicy == policy {
488+
if groupPolicy == params.Policy {
503489
filteredGroups = append(filteredGroups, group)
504490
}
505491
}
@@ -524,10 +510,6 @@ func getRemovePolicyResponse(session *models.Principal, params policyApi.RemoveP
524510
if params.Name == "" {
525511
return ErrorWithContext(ctx, ErrPolicyNameNotInRequest)
526512
}
527-
policyName, err := utils.DecodeBase64(params.Name)
528-
if err != nil {
529-
return ErrorWithContext(ctx, err)
530-
}
531513
mAdmin, err := NewMinioAdminClient(params.HTTPRequest.Context(), session)
532514
if err != nil {
533515
return ErrorWithContext(ctx, err)
@@ -536,7 +518,7 @@ func getRemovePolicyResponse(session *models.Principal, params policyApi.RemoveP
536518
// defining the client to be used
537519
adminClient := AdminClient{Client: mAdmin}
538520

539-
if err := removePolicy(ctx, adminClient, policyName); err != nil {
521+
if err := removePolicy(ctx, adminClient, params.Name); err != nil {
540522
return ErrorWithContext(ctx, err)
541523
}
542524
return nil
@@ -623,11 +605,7 @@ func getPolicyInfoResponse(session *models.Principal, params policyApi.PolicyInf
623605
// create a MinIO Admin Client interface implementation
624606
// defining the client to be used
625607
adminClient := AdminClient{Client: mAdmin}
626-
policyName, err := utils.DecodeBase64(params.Name)
627-
if err != nil {
628-
return nil, ErrorWithContext(ctx, err)
629-
}
630-
policy, err := policyInfo(ctx, adminClient, policyName)
608+
policy, err := policyInfo(ctx, adminClient, params.Name)
631609
if err != nil {
632610
return nil, ErrorWithContext(ctx, err)
633611
}

api/admin_users.go

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ import (
2222
"sort"
2323
"strings"
2424

25-
"github.com/minio/console/pkg/utils"
26-
2725
"github.com/go-openapi/errors"
2826
"github.com/go-openapi/runtime/middleware"
2927
"github.com/minio/console/api/operations"
@@ -257,17 +255,13 @@ func getRemoveUserResponse(session *models.Principal, params userApi.RemoveUserP
257255
if err != nil {
258256
return ErrorWithContext(ctx, err)
259257
}
260-
userName, err := utils.DecodeBase64(params.Name)
261-
if err != nil {
262-
return ErrorWithContext(ctx, err)
263-
}
264-
if session.AccountAccessKey == userName {
258+
if session.AccountAccessKey == params.Name {
265259
return ErrorWithContext(ctx, ErrAvoidSelfAccountDelete)
266260
}
267261
// create a minioClient interface implementation
268262
// defining the client to be used
269263
adminClient := AdminClient{Client: mAdmin}
270-
if err := removeUser(ctx, adminClient, userName); err != nil {
264+
if err := removeUser(ctx, adminClient, params.Name); err != nil {
271265
return ErrorWithContext(ctx, err)
272266
}
273267
return nil
@@ -295,12 +289,7 @@ func getUserInfoResponse(session *models.Principal, params userApi.GetUserInfoPa
295289
// defining the client to be used
296290
adminClient := AdminClient{Client: mAdmin}
297291

298-
userName, err := utils.DecodeBase64(params.Name)
299-
if err != nil {
300-
return nil, ErrorWithContext(ctx, err)
301-
}
302-
303-
user, err := getUserInfo(ctx, adminClient, userName)
292+
user, err := getUserInfo(ctx, adminClient, params.Name)
304293
if err != nil {
305294
// User doesn't exist, return 404
306295
if madmin.ToErrorResponse(err).Code == "XMinioAdminNoSuchUser" {
@@ -335,7 +324,7 @@ func getUserInfoResponse(session *models.Principal, params userApi.GetUserInfoPa
335324
}
336325

337326
userInformation := &models.User{
338-
AccessKey: userName,
327+
AccessKey: params.Name,
339328
MemberOf: user.MemberOf,
340329
Policy: policies,
341330
Status: string(user.Status),
@@ -446,12 +435,7 @@ func getUpdateUserGroupsResponse(session *models.Principal, params userApi.Updat
446435
// defining the client to be used
447436
adminClient := AdminClient{Client: mAdmin}
448437

449-
userName, err := utils.DecodeBase64(params.Name)
450-
if err != nil {
451-
return nil, ErrorWithContext(ctx, err)
452-
}
453-
454-
user, err := updateUserGroups(ctx, adminClient, userName, params.Body.Groups)
438+
user, err := updateUserGroups(ctx, adminClient, params.Name, params.Body.Groups)
455439
if err != nil {
456440
return nil, ErrorWithContext(ctx, err)
457441
}
@@ -486,18 +470,14 @@ func getUpdateUserResponse(session *models.Principal, params userApi.UpdateUserI
486470
// create a minioClient interface implementation
487471
// defining the client to be used
488472
adminClient := AdminClient{Client: mAdmin}
489-
userName, err := utils.DecodeBase64(params.Name)
490-
if err != nil {
491-
return nil, ErrorWithContext(ctx, err)
492-
}
493473
status := *params.Body.Status
494474
groups := params.Body.Groups
495475

496-
if err := setUserStatus(ctx, adminClient, userName, status); err != nil {
476+
if err := setUserStatus(ctx, adminClient, params.Name, status); err != nil {
497477
return nil, ErrorWithContext(ctx, err)
498478
}
499479

500-
userElem, errUG := updateUserGroups(ctx, adminClient, userName, groups)
480+
userElem, errUG := updateUserGroups(ctx, adminClient, params.Name, groups)
501481

502482
if errUG != nil {
503483
return nil, ErrorWithContext(ctx, errUG)

api/public_objects.go

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package api
1818

1919
import (
20-
b64 "encoding/base64"
2120
"fmt"
2221
"io"
2322
"net/http"
@@ -45,7 +44,7 @@ func registerPublicObjectsHandlers(api *operations.ConsoleAPI) {
4544
func getDownloadPublicObjectResponse(params public.DownloadSharedObjectParams) (middleware.Responder, *CodedAPIError) {
4645
ctx := params.HTTPRequest.Context()
4746

48-
inputURLDecoded, err := b64toMinIOStringURL(params.URL)
47+
inputURLDecoded, err := checkMinIOStringURL(params.URL)
4948
if err != nil {
5049
return nil, ErrorWithContext(ctx, err)
5150
}
@@ -91,23 +90,19 @@ func getDownloadPublicObjectResponse(params public.DownloadSharedObjectParams) (
9190
}), nil
9291
}
9392

94-
// b64toMinIOStringURL decodes url and validates is a MinIO url endpoint
95-
func b64toMinIOStringURL(inputEncodedURL string) (*string, error) {
96-
inputURLDecoded, err := b64.URLEncoding.DecodeString(inputEncodedURL)
97-
if err != nil {
98-
return nil, err
99-
}
93+
// checkMinIOStringURL decodes url and validates is a MinIO url endpoint
94+
func checkMinIOStringURL(inputURL string) (*string, error) {
10095
// Validate input URL
101-
inputURL, err := xnet.ParseHTTPURL(string(inputURLDecoded))
96+
parsedURL, err := xnet.ParseHTTPURL(inputURL)
10297
if err != nil {
10398
return nil, err
10499
}
105100
// Ensure incoming url points to MinIO Server
106101
minIOHost := getMinIOEndpoint()
107-
if inputURL.Host != minIOHost {
102+
if parsedURL.Host != minIOHost {
108103
return nil, ErrForbidden
109104
}
110-
return swag.String(string(inputURLDecoded)), nil
105+
return swag.String(inputURL), nil
111106
}
112107

113108
func url2BucketAndObject(u *url.URL) (bucketName, objectName string) {

0 commit comments

Comments
 (0)