gitea源码

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package v1_10
  4. import (
  5. "net/url"
  6. "strings"
  7. "time"
  8. "xorm.io/xorm"
  9. )
  10. func UpdateMigrationServiceTypes(x *xorm.Engine) error {
  11. type Repository struct {
  12. ID int64
  13. OriginalServiceType int `xorm:"index default(0)"`
  14. OriginalURL string `xorm:"VARCHAR(2048)"`
  15. }
  16. if err := x.Sync(new(Repository)); err != nil {
  17. return err
  18. }
  19. var last int
  20. const batchSize = 50
  21. for {
  22. results := make([]Repository, 0, batchSize)
  23. err := x.Where("original_url <> '' AND original_url IS NOT NULL").
  24. And("original_service_type = 0 OR original_service_type IS NULL").
  25. OrderBy("id").
  26. Limit(batchSize, last).
  27. Find(&results)
  28. if err != nil {
  29. return err
  30. }
  31. if len(results) == 0 {
  32. break
  33. }
  34. last += len(results)
  35. const PlainGitService = 1 // 1 plain git service
  36. const GithubService = 2 // 2 github.com
  37. for _, res := range results {
  38. u, err := url.Parse(res.OriginalURL)
  39. if err != nil {
  40. return err
  41. }
  42. serviceType := PlainGitService
  43. if strings.EqualFold(u.Host, "github.com") {
  44. serviceType = GithubService
  45. }
  46. _, err = x.Exec("UPDATE repository SET original_service_type = ? WHERE id = ?", serviceType, res.ID)
  47. if err != nil {
  48. return err
  49. }
  50. }
  51. }
  52. type ExternalLoginUser struct {
  53. ExternalID string `xorm:"pk NOT NULL"`
  54. UserID int64 `xorm:"INDEX NOT NULL"`
  55. LoginSourceID int64 `xorm:"pk NOT NULL"`
  56. RawData map[string]any `xorm:"TEXT JSON"`
  57. Provider string `xorm:"index VARCHAR(25)"`
  58. Email string
  59. Name string
  60. FirstName string
  61. LastName string
  62. NickName string
  63. Description string
  64. AvatarURL string
  65. Location string
  66. AccessToken string
  67. AccessTokenSecret string
  68. RefreshToken string
  69. ExpiresAt time.Time
  70. }
  71. return x.Sync(new(ExternalLoginUser))
  72. }