44package auth
55
66import (
7+ "encoding/gob"
78 "errors"
89 "fmt"
910 "html"
@@ -171,7 +172,7 @@ func SignInOAuthCallback(ctx *context.Context) {
171172 gothUser .RawData = make (map [string ]any )
172173 }
173174 gothUser .RawData ["__giteaAutoRegMissingFields" ] = missingFields
174- showLinkingLogin (ctx , authSource , gothUser )
175+ showLinkingLogin (ctx , authSource . ID , gothUser )
175176 return
176177 }
177178 u = & user_model.User {
@@ -192,7 +193,7 @@ func SignInOAuthCallback(ctx *context.Context) {
192193 u .IsAdmin = isAdmin .ValueOrDefault (user_service.UpdateOptionField [bool ]{FieldValue : false }).FieldValue
193194 u .IsRestricted = isRestricted .ValueOrDefault (setting .Service .DefaultUserIsRestricted )
194195
195- linkAccountData := & LinkAccountData {* authSource , gothUser }
196+ linkAccountData := & LinkAccountData {authSource . ID , gothUser }
196197 if setting .OAuth2Client .AccountLinking == setting .OAuth2AccountLinkingDisabled {
197198 linkAccountData = nil
198199 }
@@ -207,7 +208,7 @@ func SignInOAuthCallback(ctx *context.Context) {
207208 }
208209 } else {
209210 // no existing user is found, request attach or new account
210- showLinkingLogin (ctx , authSource , gothUser )
211+ showLinkingLogin (ctx , authSource . ID , gothUser )
211212 return
212213 }
213214 }
@@ -272,23 +273,29 @@ func getUserAdminAndRestrictedFromGroupClaims(source *oauth2.Source, gothUser *g
272273}
273274
274275type LinkAccountData struct {
275- AuthSource auth. Source
276- GothUser goth.User
276+ AuthSourceID int64
277+ GothUser goth.User
277278}
278279
279280func oauth2GetLinkAccountData (ctx * context.Context ) * LinkAccountData {
281+ gob .Register (LinkAccountData {})
280282 v , ok := ctx .Session .Get ("linkAccountData" ).(LinkAccountData )
281283 if ! ok {
282284 return nil
283285 }
284286 return & v
285287}
286288
287- func showLinkingLogin (ctx * context.Context , authSource * auth.Source , gothUser goth.User ) {
288- if err := updateSession (ctx , nil , map [string ]any {
289- "linkAccountData" : LinkAccountData {* authSource , gothUser },
290- }); err != nil {
291- ctx .ServerError ("updateSession" , err )
289+ func Oauth2SetLinkAccountData (ctx * context.Context , linkAccountData LinkAccountData ) error {
290+ gob .Register (LinkAccountData {})
291+ return updateSession (ctx , nil , map [string ]any {
292+ "linkAccountData" : linkAccountData ,
293+ })
294+ }
295+
296+ func showLinkingLogin (ctx * context.Context , authSourceID int64 , gothUser goth.User ) {
297+ if err := Oauth2SetLinkAccountData (ctx , LinkAccountData {authSourceID , gothUser }); err != nil {
298+ ctx .ServerError ("Oauth2SetLinkAccountData" , err )
292299 return
293300 }
294301 ctx .Redirect (setting .AppSubURL + "/user/link_account" )
@@ -313,7 +320,7 @@ func oauth2UpdateAvatarIfNeed(ctx *context.Context, url string, u *user_model.Us
313320}
314321
315322func handleOAuth2SignIn (ctx * context.Context , authSource * auth.Source , u * user_model.User , gothUser goth.User ) {
316- oauth2SignInSync (ctx , authSource , u , gothUser )
323+ oauth2SignInSync (ctx , authSource . ID , u , gothUser )
317324 if ctx .Written () {
318325 return
319326 }
0 commit comments