mirror of
https://github.com/go-gitea/gitea
synced 2025-01-21 07:04:32 +00:00
Fix Account linking page (#33325)
Fix password form missing whilst linking account even with `ENABLE_PASSWORD_SIGNIN_FORM = true`. Remove redundant empty box in account linking sign up page when `LinkAccountMode` is true. --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
parent
b7614e2d2f
commit
1928918c35
@ -29,6 +29,7 @@ var tplLinkAccount templates.TplName = "user/auth/link_account"
|
|||||||
|
|
||||||
// LinkAccount shows the page where the user can decide to login or create a new account
|
// LinkAccount shows the page where the user can decide to login or create a new account
|
||||||
func LinkAccount(ctx *context.Context) {
|
func LinkAccount(ctx *context.Context) {
|
||||||
|
// FIXME: these common template variables should be prepared in one common function, but not just copy-paste again and again.
|
||||||
ctx.Data["DisablePassword"] = !setting.Service.RequireExternalRegistrationPassword || setting.Service.AllowOnlyExternalRegistration
|
ctx.Data["DisablePassword"] = !setting.Service.RequireExternalRegistrationPassword || setting.Service.AllowOnlyExternalRegistration
|
||||||
ctx.Data["Title"] = ctx.Tr("link_account")
|
ctx.Data["Title"] = ctx.Tr("link_account")
|
||||||
ctx.Data["LinkAccountMode"] = true
|
ctx.Data["LinkAccountMode"] = true
|
||||||
@ -43,6 +44,7 @@ func LinkAccount(ctx *context.Context) {
|
|||||||
ctx.Data["CfTurnstileSitekey"] = setting.Service.CfTurnstileSitekey
|
ctx.Data["CfTurnstileSitekey"] = setting.Service.CfTurnstileSitekey
|
||||||
ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration
|
ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration
|
||||||
ctx.Data["AllowOnlyInternalRegistration"] = setting.Service.AllowOnlyInternalRegistration
|
ctx.Data["AllowOnlyInternalRegistration"] = setting.Service.AllowOnlyInternalRegistration
|
||||||
|
ctx.Data["EnablePasswordSignInForm"] = setting.Service.EnablePasswordSignInForm
|
||||||
ctx.Data["ShowRegistrationButton"] = false
|
ctx.Data["ShowRegistrationButton"] = false
|
||||||
|
|
||||||
// use this to set the right link into the signIn and signUp templates in the link_account template
|
// use this to set the right link into the signIn and signUp templates in the link_account template
|
||||||
@ -50,6 +52,11 @@ func LinkAccount(ctx *context.Context) {
|
|||||||
ctx.Data["SignUpLink"] = setting.AppSubURL + "/user/link_account_signup"
|
ctx.Data["SignUpLink"] = setting.AppSubURL + "/user/link_account_signup"
|
||||||
|
|
||||||
gothUser, ok := ctx.Session.Get("linkAccountGothUser").(goth.User)
|
gothUser, ok := ctx.Session.Get("linkAccountGothUser").(goth.User)
|
||||||
|
|
||||||
|
// If you'd like to quickly debug the "link account" page layout, just uncomment the blow line
|
||||||
|
// Don't worry, when the below line exists, the lint won't pass: ineffectual assignment to gothUser (ineffassign)
|
||||||
|
// gothUser, ok = goth.User{Email: "invalid-email", Name: "."}, true // intentionally use invalid data to avoid pass the registration check
|
||||||
|
|
||||||
if !ok {
|
if !ok {
|
||||||
// no account in session, so just redirect to the login page, then the user could restart the process
|
// no account in session, so just redirect to the login page, then the user could restart the process
|
||||||
ctx.Redirect(setting.AppSubURL + "/user/login")
|
ctx.Redirect(setting.AppSubURL + "/user/login")
|
||||||
@ -135,6 +142,8 @@ func LinkAccountPostSignIn(ctx *context.Context) {
|
|||||||
ctx.Data["McaptchaURL"] = setting.Service.McaptchaURL
|
ctx.Data["McaptchaURL"] = setting.Service.McaptchaURL
|
||||||
ctx.Data["CfTurnstileSitekey"] = setting.Service.CfTurnstileSitekey
|
ctx.Data["CfTurnstileSitekey"] = setting.Service.CfTurnstileSitekey
|
||||||
ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration
|
ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration
|
||||||
|
ctx.Data["AllowOnlyInternalRegistration"] = setting.Service.AllowOnlyInternalRegistration
|
||||||
|
ctx.Data["EnablePasswordSignInForm"] = setting.Service.EnablePasswordSignInForm
|
||||||
ctx.Data["ShowRegistrationButton"] = false
|
ctx.Data["ShowRegistrationButton"] = false
|
||||||
|
|
||||||
// use this to set the right link into the signIn and signUp templates in the link_account template
|
// use this to set the right link into the signIn and signUp templates in the link_account template
|
||||||
@ -223,6 +232,8 @@ func LinkAccountPostRegister(ctx *context.Context) {
|
|||||||
ctx.Data["McaptchaURL"] = setting.Service.McaptchaURL
|
ctx.Data["McaptchaURL"] = setting.Service.McaptchaURL
|
||||||
ctx.Data["CfTurnstileSitekey"] = setting.Service.CfTurnstileSitekey
|
ctx.Data["CfTurnstileSitekey"] = setting.Service.CfTurnstileSitekey
|
||||||
ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration
|
ctx.Data["DisableRegistration"] = setting.Service.DisableRegistration
|
||||||
|
ctx.Data["AllowOnlyInternalRegistration"] = setting.Service.AllowOnlyInternalRegistration
|
||||||
|
ctx.Data["EnablePasswordSignInForm"] = setting.Service.EnablePasswordSignInForm
|
||||||
ctx.Data["ShowRegistrationButton"] = false
|
ctx.Data["ShowRegistrationButton"] = false
|
||||||
|
|
||||||
// use this to set the right link into the signIn and signUp templates in the link_account template
|
// use this to set the right link into the signIn and signUp templates in the link_account template
|
||||||
|
@ -16,13 +16,18 @@
|
|||||||
</div>
|
</div>
|
||||||
</overflow-menu>
|
</overflow-menu>
|
||||||
<div class="ui middle very relaxed page grid">
|
<div class="ui middle very relaxed page grid">
|
||||||
<div class="column">
|
<div class="column tw-my-5">
|
||||||
|
{{/* these styles are quite tricky but it needs to be the same as the signin page */}}
|
||||||
<div class="ui tab {{if not .user_exists}}active{{end}}" data-tab="auth-link-signup-tab">
|
<div class="ui tab {{if not .user_exists}}active{{end}}" data-tab="auth-link-signup-tab">
|
||||||
|
<div class="tw-flex tw-flex-col tw-gap-4 tw-max-w-2xl tw-m-auto">
|
||||||
{{if .AutoRegistrationFailedPrompt}}<div class="ui message">{{.AutoRegistrationFailedPrompt}}</div>{{end}}
|
{{if .AutoRegistrationFailedPrompt}}<div class="ui message">{{.AutoRegistrationFailedPrompt}}</div>{{end}}
|
||||||
{{template "user/auth/signup_inner" .}}
|
{{template "user/auth/signup_inner" .}}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="ui tab {{if .user_exists}}active{{end}}" data-tab="auth-link-signin-tab">
|
<div class="ui tab {{if .user_exists}}active{{end}}" data-tab="auth-link-signin-tab">
|
||||||
|
<div class="tw-flex tw-flex-col tw-gap-4 tw-max-w-2xl tw-m-auto">
|
||||||
{{template "user/auth/signin_inner" .}}
|
{{template "user/auth/signin_inner" .}}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
{{template "base/head" .}}
|
{{template "base/head" .}}
|
||||||
<div role="main" aria-label="{{.Title}}" class="page-content user signin{{if .LinkAccountMode}} icon{{end}}">
|
<div role="main" aria-label="{{.Title}}" class="page-content user signin{{if .LinkAccountMode}} icon{{end}}">
|
||||||
<div class="ui middle very relaxed page grid">
|
<div class="ui middle very relaxed page grid">
|
||||||
|
{{/* these styles are quite tricky and should also apply to the signup and link_account pages */}}
|
||||||
<div class="column tw-flex tw-flex-col tw-gap-4 tw-max-w-2xl tw-m-auto">
|
<div class="column tw-flex tw-flex-col tw-gap-4 tw-max-w-2xl tw-m-auto">
|
||||||
{{template "user/auth/signin_inner" .}}
|
{{template "user/auth/signin_inner" .}}
|
||||||
</div>
|
</div>
|
||||||
|
@ -59,12 +59,12 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ui container fluid">
|
<div class="ui container fluid">
|
||||||
|
{{if not .LinkAccountMode}}
|
||||||
<div class="ui attached segment header top tw-flex tw-flex-col tw-items-center">
|
<div class="ui attached segment header top tw-flex tw-flex-col tw-items-center">
|
||||||
{{if not .LinkAccountMode}}
|
|
||||||
<div class="field">
|
<div class="field">
|
||||||
<span>{{ctx.Locale.Tr "auth.already_have_account"}}</span>
|
<span>{{ctx.Locale.Tr "auth.already_have_account"}}</span>
|
||||||
<a href="{{AppSubUrl}}/user/login">{{ctx.Locale.Tr "auth.sign_in_now"}}</a>
|
<a href="{{AppSubUrl}}/user/login">{{ctx.Locale.Tr "auth.sign_in_now"}}</a>
|
||||||
</div>
|
</div>
|
||||||
{{end}}
|
|
||||||
</div>
|
</div>
|
||||||
|
{{end}}
|
||||||
</div>
|
</div>
|
||||||
|
@ -15,8 +15,11 @@ import (
|
|||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
"code.gitea.io/gitea/modules/test"
|
"code.gitea.io/gitea/modules/test"
|
||||||
"code.gitea.io/gitea/modules/translation"
|
"code.gitea.io/gitea/modules/translation"
|
||||||
|
"code.gitea.io/gitea/modules/web"
|
||||||
|
"code.gitea.io/gitea/services/context"
|
||||||
"code.gitea.io/gitea/tests"
|
"code.gitea.io/gitea/tests"
|
||||||
|
|
||||||
|
"github.com/markbates/goth"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
@ -98,6 +101,11 @@ func TestSigninWithRememberMe(t *testing.T) {
|
|||||||
func TestEnablePasswordSignInForm(t *testing.T) {
|
func TestEnablePasswordSignInForm(t *testing.T) {
|
||||||
defer tests.PrepareTestEnv(t)()
|
defer tests.PrepareTestEnv(t)()
|
||||||
|
|
||||||
|
mockLinkAccount := func(ctx *context.Context) {
|
||||||
|
gothUser := goth.User{Email: "invalid-email", Name: "."}
|
||||||
|
_ = ctx.Session.Set("linkAccountGothUser", gothUser)
|
||||||
|
}
|
||||||
|
|
||||||
t.Run("EnablePasswordSignInForm=false", func(t *testing.T) {
|
t.Run("EnablePasswordSignInForm=false", func(t *testing.T) {
|
||||||
defer tests.PrintCurrentTest(t)()
|
defer tests.PrintCurrentTest(t)()
|
||||||
defer test.MockVariableValue(&setting.Service.EnablePasswordSignInForm, false)()
|
defer test.MockVariableValue(&setting.Service.EnablePasswordSignInForm, false)()
|
||||||
@ -108,6 +116,12 @@ func TestEnablePasswordSignInForm(t *testing.T) {
|
|||||||
|
|
||||||
req = NewRequest(t, "POST", "/user/login")
|
req = NewRequest(t, "POST", "/user/login")
|
||||||
MakeRequest(t, req, http.StatusForbidden)
|
MakeRequest(t, req, http.StatusForbidden)
|
||||||
|
|
||||||
|
req = NewRequest(t, "GET", "/user/link_account")
|
||||||
|
defer web.RouteMockReset()
|
||||||
|
web.RouteMock(web.MockAfterMiddlewares, mockLinkAccount)
|
||||||
|
resp = MakeRequest(t, req, http.StatusOK)
|
||||||
|
NewHTMLParser(t, resp.Body).AssertElement(t, "form[action='/user/link_account_signin']", false)
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("EnablePasswordSignInForm=true", func(t *testing.T) {
|
t.Run("EnablePasswordSignInForm=true", func(t *testing.T) {
|
||||||
@ -120,5 +134,11 @@ func TestEnablePasswordSignInForm(t *testing.T) {
|
|||||||
|
|
||||||
req = NewRequest(t, "POST", "/user/login")
|
req = NewRequest(t, "POST", "/user/login")
|
||||||
MakeRequest(t, req, http.StatusOK)
|
MakeRequest(t, req, http.StatusOK)
|
||||||
|
|
||||||
|
req = NewRequest(t, "GET", "/user/link_account")
|
||||||
|
defer web.RouteMockReset()
|
||||||
|
web.RouteMock(web.MockAfterMiddlewares, mockLinkAccount)
|
||||||
|
resp = MakeRequest(t, req, http.StatusOK)
|
||||||
|
NewHTMLParser(t, resp.Body).AssertElement(t, "form[action='/user/link_account_signin']", true)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user