Adding button to link accounts from user settings (#19792)
* Adding button to link accounts from user settings * Only display button to link user accounts when at least one OAuth2 provider is active
This commit is contained in:
parent
f2439b7e4c
commit
4698a1ec47
4 changed files with 42 additions and 5 deletions
|
@ -847,7 +847,17 @@ func SignInOAuthCallback(ctx *context.Context) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if u == nil {
|
if u == nil {
|
||||||
if !setting.Service.AllowOnlyInternalRegistration && setting.OAuth2Client.EnableAutoRegistration {
|
if ctx.Doer != nil {
|
||||||
|
// attach user to already logged in user
|
||||||
|
err = externalaccount.LinkAccountToUser(ctx.Doer, gothUser)
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("UserLinkAccount", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.Redirect(setting.AppSubURL + "/user/settings/security")
|
||||||
|
return
|
||||||
|
} else if !setting.Service.AllowOnlyInternalRegistration && setting.OAuth2Client.EnableAutoRegistration {
|
||||||
// create new user with details from oauth2 provider
|
// create new user with details from oauth2 provider
|
||||||
var missingFields []string
|
var missingFields []string
|
||||||
if gothUser.UserID == "" {
|
if gothUser.UserID == "" {
|
||||||
|
|
|
@ -14,6 +14,7 @@ import (
|
||||||
"code.gitea.io/gitea/modules/base"
|
"code.gitea.io/gitea/modules/base"
|
||||||
"code.gitea.io/gitea/modules/context"
|
"code.gitea.io/gitea/modules/context"
|
||||||
"code.gitea.io/gitea/modules/setting"
|
"code.gitea.io/gitea/modules/setting"
|
||||||
|
"code.gitea.io/gitea/services/auth/source/oauth2"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -109,6 +110,14 @@ func loadSecurityData(ctx *context.Context) {
|
||||||
}
|
}
|
||||||
ctx.Data["AccountLinks"] = sources
|
ctx.Data["AccountLinks"] = sources
|
||||||
|
|
||||||
|
orderedOAuth2Names, oauth2Providers, err := oauth2.GetActiveOAuth2Providers()
|
||||||
|
if err != nil {
|
||||||
|
ctx.ServerError("GetActiveOAuth2Providers", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ctx.Data["OrderedOAuth2Names"] = orderedOAuth2Names
|
||||||
|
ctx.Data["OAuth2Providers"] = oauth2Providers
|
||||||
|
|
||||||
openid, err := user_model.GetUserOpenIDs(ctx.Doer.ID)
|
openid, err := user_model.GetUserOpenIDs(ctx.Doer.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ctx.ServerError("GetUserOpenIDs", err)
|
ctx.ServerError("GetUserOpenIDs", err)
|
||||||
|
|
|
@ -344,10 +344,6 @@ func RegisterRoutes(m *web.Route) {
|
||||||
}, openIDSignInEnabled)
|
}, openIDSignInEnabled)
|
||||||
m.Get("/sign_up", auth.SignUp)
|
m.Get("/sign_up", auth.SignUp)
|
||||||
m.Post("/sign_up", bindIgnErr(forms.RegisterForm{}), auth.SignUpPost)
|
m.Post("/sign_up", bindIgnErr(forms.RegisterForm{}), auth.SignUpPost)
|
||||||
m.Group("/oauth2", func() {
|
|
||||||
m.Get("/{provider}", auth.SignInOAuth)
|
|
||||||
m.Get("/{provider}/callback", auth.SignInOAuthCallback)
|
|
||||||
})
|
|
||||||
m.Get("/link_account", linkAccountEnabled, auth.LinkAccount)
|
m.Get("/link_account", linkAccountEnabled, auth.LinkAccount)
|
||||||
m.Post("/link_account_signin", linkAccountEnabled, bindIgnErr(forms.SignInForm{}), auth.LinkAccountPostSignIn)
|
m.Post("/link_account_signin", linkAccountEnabled, bindIgnErr(forms.SignInForm{}), auth.LinkAccountPostSignIn)
|
||||||
m.Post("/link_account_signup", linkAccountEnabled, bindIgnErr(forms.RegisterForm{}), auth.LinkAccountPostRegister)
|
m.Post("/link_account_signup", linkAccountEnabled, bindIgnErr(forms.RegisterForm{}), auth.LinkAccountPostRegister)
|
||||||
|
@ -452,6 +448,10 @@ func RegisterRoutes(m *web.Route) {
|
||||||
m.Get("/task/{task}", reqSignIn, user.TaskStatus)
|
m.Get("/task/{task}", reqSignIn, user.TaskStatus)
|
||||||
m.Get("/stopwatches", reqSignIn, user.GetStopwatches)
|
m.Get("/stopwatches", reqSignIn, user.GetStopwatches)
|
||||||
m.Get("/search", ignExploreSignIn, user.Search)
|
m.Get("/search", ignExploreSignIn, user.Search)
|
||||||
|
m.Group("/oauth2", func() {
|
||||||
|
m.Get("/{provider}", auth.SignInOAuth)
|
||||||
|
m.Get("/{provider}/callback", auth.SignInOAuthCallback)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
// ***** END: User *****
|
// ***** END: User *****
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,23 @@
|
||||||
<h4 class="ui top attached header">
|
<h4 class="ui top attached header">
|
||||||
{{.i18n.Tr "settings.manage_account_links"}}
|
{{.i18n.Tr "settings.manage_account_links"}}
|
||||||
|
{{if .OrderedOAuth2Names}}
|
||||||
|
<div class="ui right">
|
||||||
|
<div class="ui dropdown">
|
||||||
|
<div class="ui primary tiny button">Link Account</div>
|
||||||
|
<div class="menu">
|
||||||
|
{{range $key := .OrderedOAuth2Names}}
|
||||||
|
{{$provider := index $.OAuth2Providers $key}}
|
||||||
|
<a class="item" href="{{AppSubUrl}}/user/oauth2/{{$key}}">
|
||||||
|
<img
|
||||||
|
alt="{{$provider.DisplayName}}"
|
||||||
|
src="{{AppSubUrl}}{{$provider.Image}}"
|
||||||
|
width="20" height="20">{{$provider.DisplayName}}
|
||||||
|
</a>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{end}}
|
||||||
</h4>
|
</h4>
|
||||||
<div class="ui attached segment">
|
<div class="ui attached segment">
|
||||||
<div class="ui key list">
|
<div class="ui key list">
|
||||||
|
|
Reference in a new issue