Skip to content

Commit 83a34ae

Browse files
committed
allow the either username or email is empty which returns from oauth 2.0 provider, but require both to be present when automatically registering a new user
1 parent 43a6d1b commit 83a34ae

File tree

20 files changed

+119
-5
lines changed

20 files changed

+119
-5
lines changed

pkg/api/oauth2_authentications.go

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -208,9 +208,20 @@ func (a *OAuth2AuthenticationApi) CallbackHandler(c *core.WebContext) (string, *
208208
return a.redirectToFailedCallbackPage(c, errs.ErrCannotRetrieveUserInfo)
209209
}
210210

211-
if oauth2UserInfo.UserName == "" || oauth2UserInfo.Email == "" {
212-
log.Errorf(c, "[oauth2_authentications.CallbackHandler] invalid oauth 2.0 user info, userName: %s, email: %s", oauth2UserInfo.UserName, oauth2UserInfo.Email)
213-
return a.redirectToFailedCallbackPage(c, errs.ErrCannotRetrieveUserInfo)
211+
log.Infof(c, "[oauth2_authentications.CallbackHandler] oauth 2.0 user info, userName: %s, email: %s", oauth2UserInfo.UserName, oauth2UserInfo.Email)
212+
213+
if oauth2UserInfo.UserName == "" && oauth2UserInfo.Email == "" {
214+
return a.redirectToFailedCallbackPage(c, errs.ErrOAuth2UserNameAndEmailEmpty)
215+
}
216+
217+
if a.CurrentConfig().OAuth2UserIdentifier == settings.OAuth2UserIdentifierEmail && oauth2UserInfo.Email == "" {
218+
log.Errorf(c, "[oauth2_authentications.CallbackHandler] invalid oauth 2.0 user info, email is empty")
219+
return a.redirectToFailedCallbackPage(c, errs.ErrOAuth2EmailEmpty)
220+
}
221+
222+
if a.CurrentConfig().OAuth2UserIdentifier == settings.OAuth2UserIdentifierUsername && oauth2UserInfo.UserName == "" {
223+
log.Errorf(c, "[oauth2_authentications.CallbackHandler] invalid oauth 2.0 user info, userName is empty")
224+
return a.redirectToFailedCallbackPage(c, errs.ErrOAuth2UserNameEmpty)
214225
}
215226

216227
userExternalAuthType := oauth2.GetExternalUserAuthType()
@@ -221,7 +232,7 @@ func (a *OAuth2AuthenticationApi) CallbackHandler(c *core.WebContext) (string, *
221232
} else if a.CurrentConfig().OAuth2UserIdentifier == settings.OAuth2UserIdentifierUsername {
222233
userExternalAuth, err = a.userExternalAuths.GetUserExternalAuthByExternalUserName(c, oauth2UserInfo.UserName, userExternalAuthType)
223234
} else {
224-
userExternalAuth, err = a.userExternalAuths.GetUserExternalAuthByExternalEmail(c, oauth2UserInfo.Email, userExternalAuthType)
235+
return a.redirectToFailedCallbackPage(c, errs.ErrNotSupported)
225236
}
226237

227238
if err != nil && !errors.Is(err, errs.ErrUserExternalAuthNotFound) {
@@ -257,7 +268,7 @@ func (a *OAuth2AuthenticationApi) CallbackHandler(c *core.WebContext) (string, *
257268
} else if a.CurrentConfig().OAuth2UserIdentifier == settings.OAuth2UserIdentifierUsername {
258269
user, err = a.users.GetUserByUsername(c, oauth2UserInfo.UserName)
259270
} else {
260-
user, err = a.users.GetUserByEmail(c, oauth2UserInfo.Email)
271+
err = errs.ErrNotSupported
261272
}
262273

263274
if err != nil && !errors.Is(err, errs.ErrUserNotFound) {
@@ -267,6 +278,14 @@ func (a *OAuth2AuthenticationApi) CallbackHandler(c *core.WebContext) (string, *
267278
}
268279

269280
if user == nil && a.CurrentConfig().EnableUserRegister && a.CurrentConfig().OAuth2AutoRegister {
281+
if oauth2UserInfo.UserName == "" {
282+
return a.redirectToFailedCallbackPage(c, errs.ErrOAuth2UserNameEmptyCannotRegister)
283+
}
284+
285+
if oauth2UserInfo.Email == "" {
286+
return a.redirectToFailedCallbackPage(c, errs.ErrOAuth2EmailEmptyCannotRegister)
287+
}
288+
270289
userName := strings.TrimSpace(oauth2UserInfo.UserName)
271290
email := strings.TrimSpace(oauth2UserInfo.Email)
272291
nickName := strings.TrimSpace(oauth2UserInfo.NickName)

pkg/errs/oauth2.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,9 @@ var (
1717
ErrInvalidOAuth2Token = NewNormalError(NormalSubcategoryOAuth2, 8, http.StatusBadRequest, "invalid oauth2 token")
1818
ErrCannotRetrieveUserInfo = NewNormalError(NormalSubcategoryOAuth2, 9, http.StatusBadRequest, "cannot retrieve user info from oauth2 provider")
1919
ErrOAuth2UserAlreadyBoundToAnotherUser = NewNormalError(NormalSubcategoryOAuth2, 10, http.StatusBadRequest, "oauth2 user already bound to another user")
20+
ErrOAuth2UserNameAndEmailEmpty = NewNormalError(NormalSubcategoryOAuth2, 11, http.StatusBadRequest, "user name and email from oauth2 provider are both empty")
21+
ErrOAuth2UserNameEmpty = NewNormalError(NormalSubcategoryOAuth2, 12, http.StatusBadRequest, "user name from oauth2 provider is empty")
22+
ErrOAuth2EmailEmpty = NewNormalError(NormalSubcategoryOAuth2, 13, http.StatusBadRequest, "email from oauth2 provider is empty")
23+
ErrOAuth2UserNameEmptyCannotRegister = NewNormalError(NormalSubcategoryOAuth2, 14, http.StatusBadRequest, "user name from oauth2 provider is empty, cannot register new user")
24+
ErrOAuth2EmailEmptyCannotRegister = NewNormalError(NormalSubcategoryOAuth2, 15, http.StatusBadRequest, "email from oauth2 provider is empty, cannot register new user")
2025
)

src/locales/de.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,6 +1270,11 @@
12701270
"invalid oauth2 token": "Invalid OAuth 2.0 token",
12711271
"cannot retrieve user info from oauth2 provider": "Cannot retrieve user info from OAuth 2.0 provider",
12721272
"oauth2 user already bound to another user": "OAuth 2.0 user is already bound to another user",
1273+
"user name and email from oauth2 provider are both empty": "User name and email from OAuth 2.0 provider are both empty",
1274+
"user name from oauth2 provider is empty": "User name from OAuth 2.0 provider is empty",
1275+
"email from oauth2 provider is empty": "Email from OAuth 2.0 provider is empty",
1276+
"user name from oauth2 provider is empty, cannot register new user": "User name from OAuth 2.0 provider is empty, cannot register new user",
1277+
"email from oauth2 provider is empty, cannot register new user": "Email from OAuth 2.0 provider is empty, cannot register new user",
12731278
"explorer id is invalid": "Explorer ID is invalid",
12741279
"explorer not found": "Explorer is not found",
12751280
"explorer data is invalid": "Explorer data is invalid",

src/locales/en.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,6 +1270,11 @@
12701270
"invalid oauth2 token": "Invalid OAuth 2.0 token",
12711271
"cannot retrieve user info from oauth2 provider": "Cannot retrieve user info from OAuth 2.0 provider",
12721272
"oauth2 user already bound to another user": "OAuth 2.0 user is already bound to another user",
1273+
"user name and email from oauth2 provider are both empty": "User name and email from OAuth 2.0 provider are both empty",
1274+
"user name from oauth2 provider is empty": "User name from OAuth 2.0 provider is empty",
1275+
"email from oauth2 provider is empty": "Email from OAuth 2.0 provider is empty",
1276+
"user name from oauth2 provider is empty, cannot register new user": "User name from OAuth 2.0 provider is empty, cannot register new user",
1277+
"email from oauth2 provider is empty, cannot register new user": "Email from OAuth 2.0 provider is empty, cannot register new user",
12731278
"explorer id is invalid": "Explorer ID is invalid",
12741279
"explorer not found": "Explorer is not found",
12751280
"explorer data is invalid": "Explorer data is invalid",

src/locales/es.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,6 +1270,11 @@
12701270
"invalid oauth2 token": "Invalid OAuth 2.0 token",
12711271
"cannot retrieve user info from oauth2 provider": "Cannot retrieve user info from OAuth 2.0 provider",
12721272
"oauth2 user already bound to another user": "OAuth 2.0 user is already bound to another user",
1273+
"user name and email from oauth2 provider are both empty": "User name and email from OAuth 2.0 provider are both empty",
1274+
"user name from oauth2 provider is empty": "User name from OAuth 2.0 provider is empty",
1275+
"email from oauth2 provider is empty": "Email from OAuth 2.0 provider is empty",
1276+
"user name from oauth2 provider is empty, cannot register new user": "User name from OAuth 2.0 provider is empty, cannot register new user",
1277+
"email from oauth2 provider is empty, cannot register new user": "Email from OAuth 2.0 provider is empty, cannot register new user",
12731278
"explorer id is invalid": "Explorer ID is invalid",
12741279
"explorer not found": "Explorer is not found",
12751280
"explorer data is invalid": "Explorer data is invalid",

src/locales/fr.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,6 +1270,11 @@
12701270
"invalid oauth2 token": "Invalid OAuth 2.0 token",
12711271
"cannot retrieve user info from oauth2 provider": "Cannot retrieve user info from OAuth 2.0 provider",
12721272
"oauth2 user already bound to another user": "OAuth 2.0 user is already bound to another user",
1273+
"user name and email from oauth2 provider are both empty": "User name and email from OAuth 2.0 provider are both empty",
1274+
"user name from oauth2 provider is empty": "User name from OAuth 2.0 provider is empty",
1275+
"email from oauth2 provider is empty": "Email from OAuth 2.0 provider is empty",
1276+
"user name from oauth2 provider is empty, cannot register new user": "User name from OAuth 2.0 provider is empty, cannot register new user",
1277+
"email from oauth2 provider is empty, cannot register new user": "Email from OAuth 2.0 provider is empty, cannot register new user",
12731278
"explorer id is invalid": "Explorer ID is invalid",
12741279
"explorer not found": "Explorer is not found",
12751280
"explorer data is invalid": "Explorer data is invalid",

src/locales/it.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,6 +1270,11 @@
12701270
"invalid oauth2 token": "Invalid OAuth 2.0 token",
12711271
"cannot retrieve user info from oauth2 provider": "Cannot retrieve user info from OAuth 2.0 provider",
12721272
"oauth2 user already bound to another user": "OAuth 2.0 user is already bound to another user",
1273+
"user name and email from oauth2 provider are both empty": "User name and email from OAuth 2.0 provider are both empty",
1274+
"user name from oauth2 provider is empty": "User name from OAuth 2.0 provider is empty",
1275+
"email from oauth2 provider is empty": "Email from OAuth 2.0 provider is empty",
1276+
"user name from oauth2 provider is empty, cannot register new user": "User name from OAuth 2.0 provider is empty, cannot register new user",
1277+
"email from oauth2 provider is empty, cannot register new user": "Email from OAuth 2.0 provider is empty, cannot register new user",
12731278
"explorer id is invalid": "Explorer ID is invalid",
12741279
"explorer not found": "Explorer is not found",
12751280
"explorer data is invalid": "Explorer data is invalid",

src/locales/ja.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,6 +1270,11 @@
12701270
"invalid oauth2 token": "Invalid OAuth 2.0 token",
12711271
"cannot retrieve user info from oauth2 provider": "Cannot retrieve user info from OAuth 2.0 provider",
12721272
"oauth2 user already bound to another user": "OAuth 2.0 user is already bound to another user",
1273+
"user name and email from oauth2 provider are both empty": "User name and email from OAuth 2.0 provider are both empty",
1274+
"user name from oauth2 provider is empty": "User name from OAuth 2.0 provider is empty",
1275+
"email from oauth2 provider is empty": "Email from OAuth 2.0 provider is empty",
1276+
"user name from oauth2 provider is empty, cannot register new user": "User name from OAuth 2.0 provider is empty, cannot register new user",
1277+
"email from oauth2 provider is empty, cannot register new user": "Email from OAuth 2.0 provider is empty, cannot register new user",
12731278
"explorer id is invalid": "Explorer ID is invalid",
12741279
"explorer not found": "Explorer is not found",
12751280
"explorer data is invalid": "Explorer data is invalid",

src/locales/kn.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,6 +1270,11 @@
12701270
"invalid oauth2 token": "OAuth 2.0 ಟೋಕನ್ ಅಮಾನ್ಯವಾಗಿದೆ",
12711271
"cannot retrieve user info from oauth2 provider": "OAuth 2.0 ಪೂರೈಕೆದಾರರಿಂದ ಬಳಕೆದಾರ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಲು ಸಾಧ್ಯವಿಲ್ಲ",
12721272
"oauth2 user already bound to another user": "OAuth 2.0 ಬಳಕೆದಾರ ಈಗಾಗಲೇ ಇನ್ನೊಬ್ಬ ಬಳಕೆದಾರನಿಗೆ ಬೌಂಡ್ ಆಗಿದ್ದಾನೆ",
1273+
"user name and email from oauth2 provider are both empty": "User name and email from OAuth 2.0 provider are both empty",
1274+
"user name from oauth2 provider is empty": "User name from OAuth 2.0 provider is empty",
1275+
"email from oauth2 provider is empty": "Email from OAuth 2.0 provider is empty",
1276+
"user name from oauth2 provider is empty, cannot register new user": "User name from OAuth 2.0 provider is empty, cannot register new user",
1277+
"email from oauth2 provider is empty, cannot register new user": "Email from OAuth 2.0 provider is empty, cannot register new user",
12731278
"explorer id is invalid": "Explorer ID is invalid",
12741279
"explorer not found": "Explorer is not found",
12751280
"explorer data is invalid": "Explorer data is invalid",

src/locales/ko.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1270,6 +1270,11 @@
12701270
"invalid oauth2 token": "Invalid OAuth 2.0 token",
12711271
"cannot retrieve user info from oauth2 provider": "Cannot retrieve user info from OAuth 2.0 provider",
12721272
"oauth2 user already bound to another user": "OAuth 2.0 user is already bound to another user",
1273+
"user name and email from oauth2 provider are both empty": "User name and email from OAuth 2.0 provider are both empty",
1274+
"user name from oauth2 provider is empty": "User name from OAuth 2.0 provider is empty",
1275+
"email from oauth2 provider is empty": "Email from OAuth 2.0 provider is empty",
1276+
"user name from oauth2 provider is empty, cannot register new user": "User name from OAuth 2.0 provider is empty, cannot register new user",
1277+
"email from oauth2 provider is empty, cannot register new user": "Email from OAuth 2.0 provider is empty, cannot register new user",
12731278
"explorer id is invalid": "Explorer ID is invalid",
12741279
"explorer not found": "Explorer is not found",
12751280
"explorer data is invalid": "Explorer data is invalid",

0 commit comments

Comments
 (0)