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
					
				|  | @ -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"> | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue