diff options
author | zeripath <art27@cantab.net> | 2021-09-17 12:43:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-17 12:43:47 +0100 |
commit | 27b351aba564804f65e5574919a88d6194c75256 (patch) | |
tree | fa4857e05e344693e629aa14b05b7f8ffba42cfc /routers | |
parent | f96d0d3d5b2acb3545c3a2ced7972879a9750c9d (diff) | |
download | gitea-27b351aba564804f65e5574919a88d6194c75256.tar.gz gitea-27b351aba564804f65e5574919a88d6194c75256.zip |
Make LDAP be able to skip local 2FA (#16954)
This PR extends #16594 to allow LDAP to be able to be set to skip local 2FA too. The technique used here would be extensible to PAM and SMTP sources.
Signed-off-by: Andrew Thornton <art27@cantab.net>
Diffstat (limited to 'routers')
-rw-r--r-- | routers/web/admin/auths.go | 1 | ||||
-rw-r--r-- | routers/web/user/auth.go | 14 | ||||
-rw-r--r-- | routers/web/user/auth_openid.go | 2 | ||||
-rw-r--r-- | routers/web/user/setting/account.go | 2 |
4 files changed, 15 insertions, 4 deletions
diff --git a/routers/web/admin/auths.go b/routers/web/admin/auths.go index b2879d7c4f..2937190a1f 100644 --- a/routers/web/admin/auths.go +++ b/routers/web/admin/auths.go @@ -145,6 +145,7 @@ func parseLDAPConfig(form forms.AuthenticationForm) *ldap.Source { RestrictedFilter: form.RestrictedFilter, AllowDeactivateAll: form.AllowDeactivateAll, Enabled: true, + SkipLocalTwoFA: form.SkipLocalTwoFA, } } diff --git a/routers/web/user/auth.go b/routers/web/user/auth.go index 38e0d989b8..a5c0a14d17 100644 --- a/routers/web/user/auth.go +++ b/routers/web/user/auth.go @@ -175,7 +175,7 @@ func SignInPost(ctx *context.Context) { } form := web.GetForm(ctx).(*forms.SignInForm) - u, err := auth.UserSignIn(form.UserName, form.Password) + u, source, err := auth.UserSignIn(form.UserName, form.Password) if err != nil { if models.IsErrUserNotExist(err) { ctx.RenderWithErr(ctx.Tr("form.username_password_incorrect"), tplSignIn, &form) @@ -201,6 +201,15 @@ func SignInPost(ctx *context.Context) { } return } + + // Now handle 2FA: + + // First of all if the source can skip local two fa we're done + if skipper, ok := source.Cfg.(auth.LocalTwoFASkipper); ok && skipper.IsSkipLocalTwoFA() { + handleSignIn(ctx, u, form.Remember) + return + } + // If this user is enrolled in 2FA, we can't sign the user in just yet. // Instead, redirect them to the 2FA authentication page. _, err = models.GetTwoFactorByUID(u.ID) @@ -905,7 +914,7 @@ func LinkAccountPostSignIn(ctx *context.Context) { return } - u, err := auth.UserSignIn(signInForm.UserName, signInForm.Password) + u, _, err := auth.UserSignIn(signInForm.UserName, signInForm.Password) if err != nil { if models.IsErrUserNotExist(err) { ctx.Data["user_exists"] = true @@ -924,6 +933,7 @@ func linkAccount(ctx *context.Context, u *models.User, gothUser goth.User, remem // If this user is enrolled in 2FA, we can't sign the user in just yet. // Instead, redirect them to the 2FA authentication page. + // We deliberately ignore the skip local 2fa setting here because we are linking to a previous user here _, err := models.GetTwoFactorByUID(u.ID) if err != nil { if !models.IsErrTwoFactorNotEnrolled(err) { diff --git a/routers/web/user/auth_openid.go b/routers/web/user/auth_openid.go index fc419a7f6e..e6ad6fef4c 100644 --- a/routers/web/user/auth_openid.go +++ b/routers/web/user/auth_openid.go @@ -291,7 +291,7 @@ func ConnectOpenIDPost(ctx *context.Context) { ctx.Data["EnableOpenIDSignUp"] = setting.Service.EnableOpenIDSignUp ctx.Data["OpenID"] = oid - u, err := auth.UserSignIn(form.UserName, form.Password) + u, _, err := auth.UserSignIn(form.UserName, form.Password) if err != nil { if models.IsErrUserNotExist(err) { ctx.RenderWithErr(ctx.Tr("form.username_password_incorrect"), tplConnectOID, &form) diff --git a/routers/web/user/setting/account.go b/routers/web/user/setting/account.go index 6201078954..249793578a 100644 --- a/routers/web/user/setting/account.go +++ b/routers/web/user/setting/account.go @@ -229,7 +229,7 @@ func DeleteAccount(ctx *context.Context) { ctx.Data["Title"] = ctx.Tr("settings") ctx.Data["PageIsSettingsAccount"] = true - if _, err := auth.UserSignIn(ctx.User.Name, ctx.FormString("password")); err != nil { + if _, _, err := auth.UserSignIn(ctx.User.Name, ctx.FormString("password")); err != nil { if models.IsErrUserNotExist(err) { loadAccountData(ctx) |