Skip to content

Commit 5783962

Browse files
Mai-LapystAbdulrhmnGhanem
authored andcommitted
Adding button to link accounts from user settings (go-gitea#19792)
* Adding button to link accounts from user settings * Only display button to link user accounts when at least one OAuth2 provider is active
1 parent 9485a9d commit 5783962

File tree

4 files changed

+42
-5
lines changed

4 files changed

+42
-5
lines changed

routers/web/auth/oauth.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -847,7 +847,17 @@ func SignInOAuthCallback(ctx *context.Context) {
847847
}
848848

849849
if u == nil {
850-
if !setting.Service.AllowOnlyInternalRegistration && setting.OAuth2Client.EnableAutoRegistration {
850+
if ctx.Doer != nil {
851+
// attach user to already logged in user
852+
err = externalaccount.LinkAccountToUser(ctx.Doer, gothUser)
853+
if err != nil {
854+
ctx.ServerError("UserLinkAccount", err)
855+
return
856+
}
857+
858+
ctx.Redirect(setting.AppSubURL + "/user/settings/security")
859+
return
860+
} else if !setting.Service.AllowOnlyInternalRegistration && setting.OAuth2Client.EnableAutoRegistration {
851861
// create new user with details from oauth2 provider
852862
var missingFields []string
853863
if gothUser.UserID == "" {

routers/web/user/setting/security/security.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"code.gitea.io/gitea/modules/base"
1515
"code.gitea.io/gitea/modules/context"
1616
"code.gitea.io/gitea/modules/setting"
17+
"code.gitea.io/gitea/services/auth/source/oauth2"
1718
)
1819

1920
const (
@@ -109,6 +110,14 @@ func loadSecurityData(ctx *context.Context) {
109110
}
110111
ctx.Data["AccountLinks"] = sources
111112

113+
orderedOAuth2Names, oauth2Providers, err := oauth2.GetActiveOAuth2Providers()
114+
if err != nil {
115+
ctx.ServerError("GetActiveOAuth2Providers", err)
116+
return
117+
}
118+
ctx.Data["OrderedOAuth2Names"] = orderedOAuth2Names
119+
ctx.Data["OAuth2Providers"] = oauth2Providers
120+
112121
openid, err := user_model.GetUserOpenIDs(ctx.Doer.ID)
113122
if err != nil {
114123
ctx.ServerError("GetUserOpenIDs", err)

routers/web/web.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -350,10 +350,6 @@ func RegisterRoutes(m *web.Route) {
350350
}, openIDSignInEnabled)
351351
m.Get("/sign_up", auth.SignUp)
352352
m.Post("/sign_up", bindIgnErr(forms.RegisterForm{}), auth.SignUpPost)
353-
m.Group("/oauth2", func() {
354-
m.Get("/{provider}", auth.SignInOAuth)
355-
m.Get("/{provider}/callback", auth.SignInOAuthCallback)
356-
})
357353
m.Get("/link_account", linkAccountEnabled, auth.LinkAccount)
358354
m.Post("/link_account_signin", linkAccountEnabled, bindIgnErr(forms.SignInForm{}), auth.LinkAccountPostSignIn)
359355
m.Post("/link_account_signup", linkAccountEnabled, bindIgnErr(forms.RegisterForm{}), auth.LinkAccountPostRegister)
@@ -458,6 +454,10 @@ func RegisterRoutes(m *web.Route) {
458454
m.Get("/task/{task}", reqSignIn, user.TaskStatus)
459455
m.Get("/stopwatches", reqSignIn, user.GetStopwatches)
460456
m.Get("/search", ignExploreSignIn, user.Search)
457+
m.Group("/oauth2", func() {
458+
m.Get("/{provider}", auth.SignInOAuth)
459+
m.Get("/{provider}/callback", auth.SignInOAuthCallback)
460+
})
461461
})
462462
// ***** END: User *****
463463

templates/user/settings/security/accountlinks.tmpl

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
<h4 class="ui top attached header">
22
{{.i18n.Tr "settings.manage_account_links"}}
3+
{{if .OrderedOAuth2Names}}
4+
<div class="ui right">
5+
<div class="ui dropdown">
6+
<div class="ui primary tiny button">Link Account</div>
7+
<div class="menu">
8+
{{range $key := .OrderedOAuth2Names}}
9+
{{$provider := index $.OAuth2Providers $key}}
10+
<a class="item" href="{{AppSubUrl}}/user/oauth2/{{$key}}">
11+
<img
12+
alt="{{$provider.DisplayName}}"
13+
src="{{AppSubUrl}}{{$provider.Image}}"
14+
width="20" height="20">{{$provider.DisplayName}}
15+
</a>
16+
{{end}}
17+
</div>
18+
</div>
19+
</div>
20+
{{end}}
321
</h4>
422
<div class="ui attached segment">
523
<div class="ui key list">

0 commit comments

Comments
 (0)