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