mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2025-07-13 04:39:11 +00:00
fix(sec): add tests for OAuth2 signup (#7755)
Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/7755 Reviewed-by: Gusted <gusted@noreply.codeberg.org>
This commit is contained in:
commit
beb985062d
1 changed files with 66 additions and 0 deletions
|
@ -1456,3 +1456,69 @@ func TestSignUpViaOAuthDefaultRestricted(t *testing.T) {
|
|||
|
||||
unittest.AssertExistsIf(t, true, &user_model.User{Name: "gitlab-user"}, "is_restricted = true")
|
||||
}
|
||||
|
||||
func TestSignUpViaOAuthLinking2FA(t *testing.T) {
|
||||
defer tests.PrepareTestEnv(t)()
|
||||
defer test.MockVariableValue(&setting.OAuth2Client.EnableAutoRegistration, true)()
|
||||
defer test.MockVariableValue(&setting.OAuth2Client.AccountLinking, setting.OAuth2AccountLinkingAuto)()
|
||||
|
||||
// Fake that user 2 is enrolled into WebAuthn.
|
||||
t.Cleanup(func() {
|
||||
unittest.AssertSuccessfulDelete(t, &auth_model.WebAuthnCredential{UserID: 2})
|
||||
})
|
||||
unittest.AssertSuccessfulInsert(t, &auth_model.WebAuthnCredential{UserID: 2})
|
||||
|
||||
gitlabName := "gitlab"
|
||||
addAuthSource(t, authSourcePayloadGitLabCustom(gitlabName))
|
||||
userGitLabUserID := "BB(4)=107"
|
||||
|
||||
defer mockCompleteUserAuth(func(res http.ResponseWriter, req *http.Request) (goth.User, error) {
|
||||
return goth.User{
|
||||
Provider: gitlabName,
|
||||
UserID: userGitLabUserID,
|
||||
NickName: "user2",
|
||||
Email: "user2@example.com",
|
||||
}, nil
|
||||
})()
|
||||
req := NewRequest(t, "GET", fmt.Sprintf("/user/oauth2/%s/callback?code=XYZ&state=XYZ", gitlabName))
|
||||
resp := MakeRequest(t, req, http.StatusSeeOther)
|
||||
|
||||
// Make sure the user has to go through 2FA after linking.
|
||||
assert.Equal(t, "/user/webauthn", test.RedirectURL(resp))
|
||||
}
|
||||
|
||||
func TestSignUpViaOAuth2FA(t *testing.T) {
|
||||
defer tests.PrepareTestEnv(t)()
|
||||
defer test.MockVariableValue(&setting.OAuth2Client.EnableAutoRegistration, true)()
|
||||
defer test.MockVariableValue(&setting.OAuth2Client.AccountLinking, setting.OAuth2AccountLinkingAuto)()
|
||||
|
||||
gitlabName := "gitlab"
|
||||
addAuthSource(t, authSourcePayloadGitLabCustom(gitlabName))
|
||||
userGitLabUserID := "BB(3)=21"
|
||||
|
||||
defer mockCompleteUserAuth(func(res http.ResponseWriter, req *http.Request) (goth.User, error) {
|
||||
return goth.User{
|
||||
Provider: gitlabName,
|
||||
UserID: userGitLabUserID,
|
||||
NickName: "user2",
|
||||
Email: "user2@example.com",
|
||||
}, nil
|
||||
})()
|
||||
req := NewRequest(t, "GET", fmt.Sprintf("/user/oauth2/%s/callback?code=XYZ&state=XYZ", gitlabName))
|
||||
resp := MakeRequest(t, req, http.StatusSeeOther)
|
||||
|
||||
// Make sure the user can login normally and is linked.
|
||||
assert.Equal(t, "/", test.RedirectURL(resp))
|
||||
|
||||
// Fake that user 2 is enrolled into WebAuthn.
|
||||
t.Cleanup(func() {
|
||||
unittest.AssertSuccessfulDelete(t, &auth_model.WebAuthnCredential{UserID: 2})
|
||||
})
|
||||
unittest.AssertSuccessfulInsert(t, &auth_model.WebAuthnCredential{UserID: 2})
|
||||
|
||||
req = NewRequest(t, "GET", fmt.Sprintf("/user/oauth2/%s/callback?code=XYZ&state=XYZ", gitlabName))
|
||||
resp = MakeRequest(t, req, http.StatusSeeOther)
|
||||
|
||||
// Make sure user has to go through 2FA.
|
||||
assert.Equal(t, "/user/webauthn", test.RedirectURL(resp))
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue