Skip to content

Commit 0ba1e76

Browse files
authored
centralize errors on a single error function (#266)
prepareError receives an array of errors and return *model.Error object with a message and error code, we can extend this function to add more error types/code
1 parent 94096ee commit 0ba1e76

24 files changed

+397
-444
lines changed

models/error.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

restapi/admin_arns.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,9 @@ package restapi
1818

1919
import (
2020
"context"
21-
"log"
2221
"time"
2322

2423
"github.com/go-openapi/runtime/middleware"
25-
"github.com/go-openapi/swag"
2624
"github.com/minio/console/models"
2725
"github.com/minio/console/restapi/operations"
2826
"github.com/minio/console/restapi/operations/admin_api"
@@ -33,7 +31,7 @@ func registerAdminArnsHandlers(api *operations.ConsoleAPI) {
3331
api.AdminAPIArnListHandler = admin_api.ArnListHandlerFunc(func(params admin_api.ArnListParams, session *models.Principal) middleware.Responder {
3432
arnsResp, err := getArnsResponse(session)
3533
if err != nil {
36-
return admin_api.NewArnListDefault(500).WithPayload(&models.Error{Code: 500, Message: swag.String(err.Error())})
34+
return admin_api.NewArnListDefault(int(err.Code)).WithPayload(err)
3735
}
3836
return admin_api.NewArnListOK().WithPayload(arnsResp)
3937
})
@@ -53,11 +51,10 @@ func getArns(ctx context.Context, client MinioAdmin) (*models.ArnsResponse, erro
5351
}
5452

5553
// getArnsResponse returns a list of active arns in the instance
56-
func getArnsResponse(session *models.Principal) (*models.ArnsResponse, error) {
54+
func getArnsResponse(session *models.Principal) (*models.ArnsResponse, *models.Error) {
5755
mAdmin, err := newMAdminClient(session)
5856
if err != nil {
59-
log.Println("error creating Madmin Client:", err)
60-
return nil, err
57+
return nil, prepareError(err)
6158
}
6259
// create a minioClient interface implementation
6360
// defining the client to be used
@@ -68,8 +65,7 @@ func getArnsResponse(session *models.Principal) (*models.ArnsResponse, error) {
6865
// serialize output
6966
arnsList, err := getArns(ctx, adminClient)
7067
if err != nil {
71-
log.Println("error getting arn list:", err)
72-
return nil, err
68+
return nil, prepareError(err)
7369
}
7470
return arnsList, nil
7571
}

restapi/admin_config.go

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ package restapi
1919
import (
2020
"context"
2121
"fmt"
22-
"log"
2322
"strings"
2423

2524
"github.com/go-openapi/runtime/middleware"
@@ -36,22 +35,22 @@ func registerConfigHandlers(api *operations.ConsoleAPI) {
3635
api.AdminAPIListConfigHandler = admin_api.ListConfigHandlerFunc(func(params admin_api.ListConfigParams, session *models.Principal) middleware.Responder {
3736
configListResp, err := getListConfigResponse(session)
3837
if err != nil {
39-
return admin_api.NewListConfigDefault(500).WithPayload(&models.Error{Code: 500, Message: swag.String(err.Error())})
38+
return admin_api.NewListConfigDefault(int(err.Code)).WithPayload(err)
4039
}
4140
return admin_api.NewListConfigOK().WithPayload(configListResp)
4241
})
4342
// Configuration Info
4443
api.AdminAPIConfigInfoHandler = admin_api.ConfigInfoHandlerFunc(func(params admin_api.ConfigInfoParams, session *models.Principal) middleware.Responder {
4544
config, err := getConfigResponse(session, params)
4645
if err != nil {
47-
return admin_api.NewConfigInfoDefault(500).WithPayload(&models.Error{Code: 500, Message: swag.String(err.Error())})
46+
return admin_api.NewConfigInfoDefault(int(err.Code)).WithPayload(err)
4847
}
4948
return admin_api.NewConfigInfoOK().WithPayload(config)
5049
})
5150
// Set Configuration
5251
api.AdminAPISetConfigHandler = admin_api.SetConfigHandlerFunc(func(params admin_api.SetConfigParams, session *models.Principal) middleware.Responder {
5352
if err := setConfigResponse(session, params.Name, params.Body); err != nil {
54-
return admin_api.NewSetConfigDefault(500).WithPayload(&models.Error{Code: 500, Message: swag.String(err.Error())})
53+
return admin_api.NewSetConfigDefault(int(err.Code)).WithPayload(err)
5554
}
5655
return admin_api.NewSetConfigNoContent()
5756
})
@@ -76,20 +75,18 @@ func listConfig(client MinioAdmin) ([]*models.ConfigDescription, error) {
7675
}
7776

7877
// getListConfigResponse performs listConfig() and serializes it to the handler's output
79-
func getListConfigResponse(session *models.Principal) (*models.ListConfigResponse, error) {
78+
func getListConfigResponse(session *models.Principal) (*models.ListConfigResponse, *models.Error) {
8079
mAdmin, err := newMAdminClient(session)
8180
if err != nil {
82-
log.Println("error creating Madmin Client:", err)
83-
return nil, err
81+
return nil, prepareError(err)
8482
}
8583
// create a MinIO Admin Client interface implementation
8684
// defining the client to be used
8785
adminClient := adminClient{client: mAdmin}
8886

8987
configDescs, err := listConfig(adminClient)
9088
if err != nil {
91-
log.Println("error listing configurations:", err)
92-
return nil, err
89+
return nil, prepareError(err)
9390
}
9491
listGroupsResponse := &models.ListConfigResponse{
9592
Configurations: configDescs,
@@ -127,20 +124,18 @@ func getConfig(client MinioAdmin, name string) ([]*models.ConfigurationKV, error
127124
}
128125

129126
// getConfigResponse performs getConfig() and serializes it to the handler's output
130-
func getConfigResponse(session *models.Principal, params admin_api.ConfigInfoParams) (*models.Configuration, error) {
127+
func getConfigResponse(session *models.Principal, params admin_api.ConfigInfoParams) (*models.Configuration, *models.Error) {
131128
mAdmin, err := newMAdminClient(session)
132129
if err != nil {
133-
log.Println("error creating Madmin Client:", err)
134-
return nil, err
130+
return nil, prepareError(err)
135131
}
136132
// create a MinIO Admin Client interface implementation
137133
// defining the client to be used
138134
adminClient := adminClient{client: mAdmin}
139135

140136
configkv, err := getConfig(adminClient, params.Name)
141137
if err != nil {
142-
log.Println("error getting configuration:", err)
143-
return nil, err
138+
return nil, prepareError(err)
144139
}
145140
configurationObj := &models.Configuration{
146141
Name: params.Name,
@@ -180,11 +175,10 @@ func buildConfig(configName *string, kvs []*models.ConfigurationKV) *string {
180175
}
181176

182177
// setConfigResponse implements setConfig() to be used by handler
183-
func setConfigResponse(session *models.Principal, name string, configRequest *models.SetConfigRequest) error {
178+
func setConfigResponse(session *models.Principal, name string, configRequest *models.SetConfigRequest) *models.Error {
184179
mAdmin, err := newMAdminClient(session)
185180
if err != nil {
186-
log.Println("error creating Madmin Client:", err)
187-
return err
181+
return prepareError(err)
188182
}
189183
// create a MinIO Admin Client interface implementation
190184
// defining the client to be used
@@ -194,8 +188,7 @@ func setConfigResponse(session *models.Principal, name string, configRequest *mo
194188
ctx := context.Background()
195189

196190
if err := setConfigWithARNAccountID(ctx, adminClient, &configName, configRequest.KeyValues, configRequest.ArnResourceID); err != nil {
197-
log.Println("error listing configurations:", err)
198-
return err
191+
return prepareError(err)
199192
}
200193
return nil
201194
}

restapi/admin_groups.go

Lines changed: 25 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222

2323
"github.com/go-openapi/errors"
2424
"github.com/go-openapi/runtime/middleware"
25-
"github.com/go-openapi/swag"
2625
"github.com/minio/console/restapi/operations"
2726
"github.com/minio/minio/pkg/madmin"
2827

@@ -36,37 +35,37 @@ func registerGroupsHandlers(api *operations.ConsoleAPI) {
3635
api.AdminAPIListGroupsHandler = admin_api.ListGroupsHandlerFunc(func(params admin_api.ListGroupsParams, session *models.Principal) middleware.Responder {
3736
listGroupsResponse, err := getListGroupsResponse(session)
3837
if err != nil {
39-
return admin_api.NewListGroupsDefault(500).WithPayload(&models.Error{Code: 500, Message: swag.String(err.Error())})
38+
return admin_api.NewListGroupsDefault(int(err.Code)).WithPayload(err)
4039
}
4140
return admin_api.NewListGroupsOK().WithPayload(listGroupsResponse)
4241
})
4342
// Group Info
4443
api.AdminAPIGroupInfoHandler = admin_api.GroupInfoHandlerFunc(func(params admin_api.GroupInfoParams, session *models.Principal) middleware.Responder {
4544
groupInfo, err := getGroupInfoResponse(session, params)
4645
if err != nil {
47-
return admin_api.NewGroupInfoDefault(500).WithPayload(&models.Error{Code: 500, Message: swag.String(err.Error())})
46+
return admin_api.NewGroupInfoDefault(int(err.Code)).WithPayload(err)
4847
}
4948
return admin_api.NewGroupInfoOK().WithPayload(groupInfo)
5049
})
5150
// Add Group
5251
api.AdminAPIAddGroupHandler = admin_api.AddGroupHandlerFunc(func(params admin_api.AddGroupParams, session *models.Principal) middleware.Responder {
5352
if err := getAddGroupResponse(session, params.Body); err != nil {
54-
return admin_api.NewAddGroupDefault(500).WithPayload(&models.Error{Code: 500, Message: swag.String(err.Error())})
53+
return admin_api.NewAddGroupDefault(int(err.Code)).WithPayload(err)
5554
}
5655
return admin_api.NewAddGroupCreated()
5756
})
5857
// Remove Group
5958
api.AdminAPIRemoveGroupHandler = admin_api.RemoveGroupHandlerFunc(func(params admin_api.RemoveGroupParams, session *models.Principal) middleware.Responder {
6059
if err := getRemoveGroupResponse(session, params); err != nil {
61-
return admin_api.NewRemoveGroupDefault(500).WithPayload(&models.Error{Code: 500, Message: swag.String(err.Error())})
60+
return admin_api.NewRemoveGroupDefault(int(err.Code)).WithPayload(err)
6261
}
6362
return admin_api.NewRemoveGroupNoContent()
6463
})
6564
// Update Group
6665
api.AdminAPIUpdateGroupHandler = admin_api.UpdateGroupHandlerFunc(func(params admin_api.UpdateGroupParams, session *models.Principal) middleware.Responder {
6766
groupUpdateResp, err := getUpdateGroupResponse(session, params)
6867
if err != nil {
69-
return admin_api.NewUpdateGroupDefault(500).WithPayload(&models.Error{Code: 500, Message: swag.String(err.Error())})
68+
return admin_api.NewUpdateGroupDefault(int(err.Code)).WithPayload(err)
7069
}
7170
return admin_api.NewUpdateGroupOK().WithPayload(groupUpdateResp)
7271
})
@@ -82,21 +81,19 @@ func listGroups(ctx context.Context, client MinioAdmin) (*[]string, error) {
8281
}
8382

8483
// getListGroupsResponse performs listGroups() and serializes it to the handler's output
85-
func getListGroupsResponse(session *models.Principal) (*models.ListGroupsResponse, error) {
84+
func getListGroupsResponse(session *models.Principal) (*models.ListGroupsResponse, *models.Error) {
8685
ctx := context.Background()
8786
mAdmin, err := newMAdminClient(session)
8887
if err != nil {
89-
log.Println("error creating Madmin Client:", err)
90-
return nil, err
88+
return nil, prepareError(err)
9189
}
9290
// create a MinIO Admin Client interface implementation
9391
// defining the client to be used
9492
adminClient := adminClient{client: mAdmin}
9593

9694
groups, err := listGroups(ctx, adminClient)
9795
if err != nil {
98-
log.Println("error listing groups:", err)
99-
return nil, err
96+
return nil, prepareError(err)
10097
}
10198
// serialize output
10299
listGroupsResponse := &models.ListGroupsResponse{
@@ -116,21 +113,19 @@ func groupInfo(ctx context.Context, client MinioAdmin, group string) (*madmin.Gr
116113
}
117114

118115
// getGroupInfoResponse performs groupInfo() and serializes it to the handler's output
119-
func getGroupInfoResponse(session *models.Principal, params admin_api.GroupInfoParams) (*models.Group, error) {
116+
func getGroupInfoResponse(session *models.Principal, params admin_api.GroupInfoParams) (*models.Group, *models.Error) {
120117
ctx := context.Background()
121118
mAdmin, err := newMAdminClient(session)
122119
if err != nil {
123-
log.Println("error creating Madmin Client:", err)
124-
return nil, err
120+
return nil, prepareError(err)
125121
}
126122
// create a MinIO Admin Client interface implementation
127123
// defining the client to be used
128124
adminClient := adminClient{client: mAdmin}
129125

130126
groupDesc, err := groupInfo(ctx, adminClient, params.Name)
131127
if err != nil {
132-
log.Println("error getting group info:", err)
133-
return nil, err
128+
return nil, prepareError(err)
134129
}
135130

136131
groupResponse := &models.Group{
@@ -157,26 +152,23 @@ func addGroup(ctx context.Context, client MinioAdmin, group string, members []st
157152
}
158153

159154
// getAddGroupResponse performs addGroup() and serializes it to the handler's output
160-
func getAddGroupResponse(session *models.Principal, params *models.AddGroupRequest) error {
155+
func getAddGroupResponse(session *models.Principal, params *models.AddGroupRequest) *models.Error {
161156
ctx := context.Background()
162157
// AddGroup request needed to proceed
163158
if params == nil {
164-
log.Println("error AddGroup body not in request")
165-
return errors.New(500, "error AddGroup body not in request")
159+
return prepareError(errGroupBodyNotInRequest)
166160
}
167161

168162
mAdmin, err := newMAdminClient(session)
169163
if err != nil {
170-
log.Println("error creating Madmin Client:", err)
171-
return err
164+
return prepareError(err)
172165
}
173166
// create a MinIO Admin Client interface implementation
174167
// defining the client to be used
175168
adminClient := adminClient{client: mAdmin}
176169

177170
if err := addGroup(ctx, adminClient, *params.Group, params.Members); err != nil {
178-
log.Println("error adding group:", err)
179-
return err
171+
return prepareError(err)
180172
}
181173
return nil
182174
}
@@ -196,25 +188,22 @@ func removeGroup(ctx context.Context, client MinioAdmin, group string) error {
196188
}
197189

198190
// getRemoveGroupResponse performs removeGroup() and serializes it to the handler's output
199-
func getRemoveGroupResponse(session *models.Principal, params admin_api.RemoveGroupParams) error {
191+
func getRemoveGroupResponse(session *models.Principal, params admin_api.RemoveGroupParams) *models.Error {
200192
ctx := context.Background()
201193

202194
if params.Name == "" {
203-
log.Println("error group name not in request")
204-
return errors.New(500, "error group name not in request")
195+
return prepareError(errGroupNameNotInRequest)
205196
}
206197
mAdmin, err := newMAdminClient(session)
207198
if err != nil {
208-
log.Println("error creating Madmin Client:", err)
209-
return err
199+
return prepareError(err)
210200
}
211201
// create a MinIO Admin Client interface implementation
212202
// defining the client to be used
213203
adminClient := adminClient{client: mAdmin}
214204

215205
if err := removeGroup(ctx, adminClient, params.Name); err != nil {
216-
log.Println("error removing group:", err)
217-
return err
206+
return prepareError(err)
218207
}
219208
return nil
220209
}
@@ -276,32 +265,29 @@ func setGroupStatus(ctx context.Context, client MinioAdmin, group, status string
276265
// getUpdateGroupResponse updates a group by adding or removing it's members depending on the request,
277266
// also sets the group's status if status in the request is different than the current one.
278267
// Then serializes the output to be used by the handler.
279-
func getUpdateGroupResponse(session *models.Principal, params admin_api.UpdateGroupParams) (*models.Group, error) {
268+
func getUpdateGroupResponse(session *models.Principal, params admin_api.UpdateGroupParams) (*models.Group, *models.Error) {
280269
ctx := context.Background()
281270
if params.Name == "" {
282-
log.Println("error group name not in request")
283-
return nil, errors.New(500, "error group name not in request")
271+
return nil, prepareError(errGroupNameNotInRequest)
284272
}
285273
if params.Body == nil {
286-
log.Println("error body not in request")
287-
return nil, errors.New(500, "error body not in request")
274+
return nil, prepareError(errGroupBodyNotInRequest)
275+
288276
}
289277
expectedGroupUpdate := params.Body
290278
groupName := params.Name
291279

292280
mAdmin, err := newMAdminClient(session)
293281
if err != nil {
294-
log.Println("error creating Madmin Client:", err)
295-
return nil, err
282+
return nil, prepareError(err)
296283
}
297284
// create a MinIO Admin Client interface implementation
298285
// defining the client to be used
299286
adminClient := adminClient{client: mAdmin}
300287

301288
groupUpdated, err := groupUpdate(ctx, adminClient, groupName, expectedGroupUpdate)
302289
if err != nil {
303-
log.Println("error updating group:", err)
304-
return nil, err
290+
return nil, prepareError(err)
305291
}
306292
groupResponse := &models.Group{
307293
Name: groupUpdated.Name,

0 commit comments

Comments
 (0)