@@ -241,6 +241,23 @@ func (api *API) userOAuth2Github(rw http.ResponseWriter, r *http.Request) {
241
241
}
242
242
}
243
243
244
+ if link .UserID != uuid .Nil {
245
+ link , err = api .Database .UpdateUserLink (ctx , database.UpdateUserLinkParams {
246
+ UserID : user .ID ,
247
+ LoginType : database .LoginTypeGithub ,
248
+ OAuthAccessToken : state .Token .AccessToken ,
249
+ OAuthRefreshToken : state .Token .RefreshToken ,
250
+ OAuthExpiry : state .Token .Expiry ,
251
+ })
252
+ if err != nil {
253
+ httpapi .Write (rw , http .StatusInternalServerError , codersdk.Response {
254
+ Message : "A database error occurred." ,
255
+ Detail : fmt .Sprintf ("update user link: %s" , err .Error ()),
256
+ })
257
+ return
258
+ }
259
+ }
260
+
244
261
_ , created := api .createAPIKey (rw , r , createAPIKeyParams {
245
262
UserID : user .ID ,
246
263
LoginType : database .LoginTypeGithub ,
@@ -432,6 +449,23 @@ func (api *API) userOIDC(rw http.ResponseWriter, r *http.Request) {
432
449
}
433
450
}
434
451
452
+ if link .UserID != uuid .Nil {
453
+ link , err = api .Database .UpdateUserLink (ctx , database.UpdateUserLinkParams {
454
+ UserID : user .ID ,
455
+ LoginType : database .LoginTypeOIDC ,
456
+ OAuthAccessToken : state .Token .AccessToken ,
457
+ OAuthRefreshToken : state .Token .RefreshToken ,
458
+ OAuthExpiry : state .Token .Expiry ,
459
+ })
460
+ if err != nil {
461
+ httpapi .Write (rw , http .StatusInternalServerError , codersdk.Response {
462
+ Message : "A database error occurred." ,
463
+ Detail : fmt .Sprintf ("update user link: %s" , err .Error ()),
464
+ })
465
+ return
466
+ }
467
+ }
468
+
435
469
// If the upstream email or username has changed we should mirror
436
470
// that in Coder. Many enterprises use a user's email/username as
437
471
// security auditing fields so they need to stay synced.
0 commit comments