Skip to content

Commit 221c0af

Browse files
committed
Adding button to link accounts from user settings
1 parent 8720f87 commit 221c0af

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
@@ -344,10 +344,6 @@ func RegisterRoutes(m *web.Route) {
344344
}, openIDSignInEnabled)
345345
m.Get("/sign_up", auth.SignUp)
346346
m.Post("/sign_up", bindIgnErr(forms.RegisterForm{}), auth.SignUpPost)
347-
m.Group("/oauth2", func() {
348-
m.Get("/{provider}", auth.SignInOAuth)
349-
m.Get("/{provider}/callback", auth.SignInOAuthCallback)
350-
})
351347
m.Get("/link_account", linkAccountEnabled, auth.LinkAccount)
352348
m.Post("/link_account_signin", linkAccountEnabled, bindIgnErr(forms.SignInForm{}), auth.LinkAccountPostSignIn)
353349
m.Post("/link_account_signup", linkAccountEnabled, bindIgnErr(forms.RegisterForm{}), auth.LinkAccountPostRegister)
@@ -452,6 +448,10 @@ func RegisterRoutes(m *web.Route) {
452448
m.Get("/task/{task}", reqSignIn, user.TaskStatus)
453449
m.Get("/stopwatches", reqSignIn, user.GetStopwatches)
454450
m.Get("/search", ignExploreSignIn, user.Search)
451+
m.Group("/oauth2", func() {
452+
m.Get("/{provider}", auth.SignInOAuth)
453+
m.Get("/{provider}/callback", auth.SignInOAuthCallback)
454+
})
455455
})
456456
// ***** END: User *****
457457

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+
<div class="ui right">
4+
<div class="ui floating1 jump dropdown">
5+
<div class="ui blue tiny button">Link Account</div>
6+
<div class="menu">
7+
{{range $key := .OrderedOAuth2Names}}
8+
{{$provider := index $.OAuth2Providers $key}}
9+
<a class="item" href="{{AppSubUrl}}/user/oauth2/{{$key}}">
10+
<img
11+
alt="{{$provider.DisplayName}}{{if eq $provider.Name "openidConnect"}} ({{$key}}){{end}}"
12+
title="{{$provider.DisplayName}}{{if eq $provider.Name "openidConnect"}} ({{$key}}){{end}}"
13+
class="{{$provider.Name}} oauth-login-image"
14+
src="{{AppSubUrl}}{{$provider.Image}}"
15+
width="20" height="20">{{$provider.Name}}
16+
</a>
17+
{{end}}
18+
</div>
19+
</div>
20+
</div>
321
</h4>
422
<div class="ui attached segment">
523
<div class="ui key list">

0 commit comments

Comments
 (0)