You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

user.go 1.7KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package externalaccount
  5. import (
  6. "strings"
  7. "code.gitea.io/gitea/models"
  8. "code.gitea.io/gitea/models/login"
  9. user_model "code.gitea.io/gitea/models/user"
  10. "code.gitea.io/gitea/modules/structs"
  11. "github.com/markbates/goth"
  12. )
  13. // LinkAccountToUser link the gothUser to the user
  14. func LinkAccountToUser(user *user_model.User, gothUser goth.User) error {
  15. loginSource, err := login.GetActiveOAuth2LoginSourceByName(gothUser.Provider)
  16. if err != nil {
  17. return err
  18. }
  19. externalLoginUser := &user_model.ExternalLoginUser{
  20. ExternalID: gothUser.UserID,
  21. UserID: user.ID,
  22. LoginSourceID: loginSource.ID,
  23. RawData: gothUser.RawData,
  24. Provider: gothUser.Provider,
  25. Email: gothUser.Email,
  26. Name: gothUser.Name,
  27. FirstName: gothUser.FirstName,
  28. LastName: gothUser.LastName,
  29. NickName: gothUser.NickName,
  30. Description: gothUser.Description,
  31. AvatarURL: gothUser.AvatarURL,
  32. Location: gothUser.Location,
  33. AccessToken: gothUser.AccessToken,
  34. AccessTokenSecret: gothUser.AccessTokenSecret,
  35. RefreshToken: gothUser.RefreshToken,
  36. ExpiresAt: gothUser.ExpiresAt,
  37. }
  38. if err := user_model.LinkExternalToUser(user, externalLoginUser); err != nil {
  39. return err
  40. }
  41. externalID := externalLoginUser.ExternalID
  42. var tp structs.GitServiceType
  43. for _, s := range structs.SupportedFullGitService {
  44. if strings.EqualFold(s.Name(), gothUser.Provider) {
  45. tp = s
  46. break
  47. }
  48. }
  49. if tp.Name() != "" {
  50. return models.UpdateMigrationsByType(tp, externalID, user.ID)
  51. }
  52. return nil
  53. }