@@ -31,6 +31,10 @@ import (
31
31
"github.com/minio/mcs/restapi/operations/user_api"
32
32
)
33
33
34
+ var (
35
+ errorGeneric = errors .New ("an error occurred, please try again" )
36
+ )
37
+
34
38
func registerLoginHandlers (api * operations.McsAPI ) {
35
39
// get login strategy
36
40
api .UserAPILoginDetailHandler = user_api .LoginDetailHandlerFunc (func (params user_api.LoginDetailParams ) middleware.Responder {
@@ -74,9 +78,32 @@ func login(credentials MCSCredentials) (*string, error) {
74
78
return & jwt , nil
75
79
}
76
80
81
+ func getConfiguredRegion (client MinioAdmin ) string {
82
+ location := ""
83
+ configuration , err := getConfig (client , "region" )
84
+ if err != nil {
85
+ log .Println ("error obtaining MinIO region:" , err )
86
+ return location
87
+ }
88
+ // region is an array of 1 element
89
+ if len (configuration ) > 0 {
90
+ location = configuration [0 ].Value
91
+ }
92
+ return location
93
+ }
94
+
77
95
// getLoginResponse performs login() and serializes it to the handler's output
78
96
func getLoginResponse (lr * models.LoginRequest ) (* models.LoginResponse , error ) {
79
- creds , err := newMcsCredentials (* lr .AccessKey , * lr .SecretKey , "" )
97
+ mAdmin , err := newSuperMAdminClient ()
98
+ if err != nil {
99
+ log .Println ("error creating Madmin Client:" , err )
100
+ return nil , errorGeneric
101
+ }
102
+ adminClient := adminClient {client : mAdmin }
103
+ // obtain the configured MinIO region
104
+ // need it for user authentication
105
+ location := getConfiguredRegion (adminClient )
106
+ creds , err := newMcsCredentials (* lr .AccessKey , * lr .SecretKey , location )
80
107
if err != nil {
81
108
log .Println ("error login:" , err )
82
109
return nil , err
@@ -131,27 +158,32 @@ func getLoginOauth2AuthResponse(lr *models.LoginOauth2AuthRequest) (*models.Logi
131
158
// initialize new oauth2 client
132
159
oauth2Client , err := oauth2 .NewOauth2ProviderClient (ctx , nil )
133
160
if err != nil {
134
- return nil , err
161
+ log .Println ("error getting new oauth2 client:" , err )
162
+ return nil , errorGeneric
135
163
}
136
164
// initialize new identity provider
137
165
identityProvider := & auth.IdentityProvider {Client : oauth2Client }
138
166
// Validate user against IDP
139
167
identity , err := loginOauth2Auth (ctx , identityProvider , * lr .Code , * lr .State )
140
168
if err != nil {
141
- return nil , err
169
+ log .Println ("error validating user identity against idp:" , err )
170
+ return nil , errorGeneric
142
171
}
143
172
mAdmin , err := newSuperMAdminClient ()
144
173
if err != nil {
145
174
log .Println ("error creating Madmin Client:" , err )
146
- return nil , err
175
+ return nil , errorGeneric
147
176
}
148
177
adminClient := adminClient {client : mAdmin }
149
178
accessKey := identity .Email
150
179
secretKey := utils .RandomCharString (32 )
151
- // Create user in MinIO
180
+ // obtain the configured MinIO region
181
+ // need it for user authentication
182
+ location := getConfiguredRegion (adminClient )
183
+ // create user in MinIO
152
184
if _ , err := addUser (ctx , adminClient , & accessKey , & secretKey , []string {}); err != nil {
153
185
log .Println ("error adding user:" , err )
154
- return nil , err
186
+ return nil , errorGeneric
155
187
}
156
188
// rollback user if there's an error after this point
157
189
defer func () {
@@ -164,25 +196,25 @@ func getLoginOauth2AuthResponse(lr *models.LoginOauth2AuthRequest) (*models.Logi
164
196
// assign the "mcsAdmin" policy to this user
165
197
if err := setPolicy (ctx , adminClient , oauth2 .GetIDPPolicyForUser (), accessKey , models .PolicyEntityUser ); err != nil {
166
198
log .Println ("error setting policy:" , err )
167
- return nil , err
199
+ return nil , errorGeneric
168
200
}
169
201
// User was created correctly, create a new session/JWT
170
- creds , err := newMcsCredentials (accessKey , secretKey , "" )
202
+ creds , err := newMcsCredentials (accessKey , secretKey , location )
171
203
if err != nil {
172
204
log .Println ("error login:" , err )
173
- return nil , err
205
+ return nil , errorGeneric
174
206
}
175
207
credentials := mcsCredentials {minioCredentials : creds }
176
208
jwt , err := login (credentials )
177
209
if err != nil {
178
210
log .Println ("error login:" , err )
179
- return nil , err
211
+ return nil , errorGeneric
180
212
}
181
213
// serialize output
182
214
loginResponse := & models.LoginResponse {
183
215
SessionID : * jwt ,
184
216
}
185
217
return loginResponse , nil
186
218
}
187
- return nil , errors . New ( "an error occurred, please try again" )
219
+ return nil , errorGeneric
188
220
}
0 commit comments