forked from gitea/gitea
		
	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 !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 | ||||
| 			var missingFields []string | ||||
| 			if gothUser.UserID == "" { | ||||
|  | ||||
| @ -14,6 +14,7 @@ import ( | ||||
| 	"code.gitea.io/gitea/modules/base" | ||||
| 	"code.gitea.io/gitea/modules/context" | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
| 	"code.gitea.io/gitea/services/auth/source/oauth2" | ||||
| ) | ||||
| 
 | ||||
| const ( | ||||
| @ -109,6 +110,14 @@ func loadSecurityData(ctx *context.Context) { | ||||
| 	} | ||||
| 	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) | ||||
| 	if err != nil { | ||||
| 		ctx.ServerError("GetUserOpenIDs", err) | ||||
|  | ||||
| @ -344,10 +344,6 @@ func RegisterRoutes(m *web.Route) { | ||||
| 		}, openIDSignInEnabled) | ||||
| 		m.Get("/sign_up", auth.SignUp) | ||||
| 		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.Post("/link_account_signin", linkAccountEnabled, bindIgnErr(forms.SignInForm{}), auth.LinkAccountPostSignIn) | ||||
| 		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("/stopwatches", reqSignIn, user.GetStopwatches) | ||||
| 		m.Get("/search", ignExploreSignIn, user.Search) | ||||
| 		m.Group("/oauth2", func() { | ||||
| 			m.Get("/{provider}", auth.SignInOAuth) | ||||
| 			m.Get("/{provider}/callback", auth.SignInOAuthCallback) | ||||
| 		}) | ||||
| 	}) | ||||
| 	// ***** END: User ***** | ||||
| 
 | ||||
|  | ||||
| @ -1,5 +1,23 @@ | ||||
| <h4 class="ui top attached header"> | ||||
| 	{{.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> | ||||
| <div class="ui attached segment"> | ||||
| 	<div class="ui key list"> | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Mai-Lapyst
						Mai-Lapyst