2019-10-14 09:10:42 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2019-10-14 09:10:42 +03:00
2022-11-02 11:54:36 +03:00
package v1_10 //nolint
2019-10-14 09:10:42 +03:00
import (
"net/url"
"strings"
"time"
2019-10-17 12:26:49 +03:00
"xorm.io/xorm"
2019-10-14 09:10:42 +03:00
)
2022-11-02 11:54:36 +03:00
func UpdateMigrationServiceTypes ( x * xorm . Engine ) error {
2019-10-14 09:10:42 +03:00
type Repository struct {
ID int64
OriginalServiceType int ` xorm:"index default(0)" `
OriginalURL string ` xorm:"VARCHAR(2048)" `
}
2023-08-13 22:17:21 +03:00
if err := x . Sync ( new ( Repository ) ) ; err != nil {
2019-10-14 09:10:42 +03:00
return err
}
var last int
const batchSize = 50
for {
2021-03-14 21:52:12 +03:00
results := make ( [ ] Repository , 0 , batchSize )
2019-10-14 09:10:42 +03:00
err := x . Where ( "original_url <> '' AND original_url IS NOT NULL" ) .
And ( "original_service_type = 0 OR original_service_type IS NULL" ) .
OrderBy ( "id" ) .
Limit ( batchSize , last ) .
Find ( & results )
if err != nil {
return err
}
if len ( results ) == 0 {
break
}
last += len ( results )
const PlainGitService = 1 // 1 plain git service
const GithubService = 2 // 2 github.com
for _ , res := range results {
u , err := url . Parse ( res . OriginalURL )
if err != nil {
return err
}
2021-03-14 21:52:12 +03:00
serviceType := PlainGitService
2019-10-14 09:10:42 +03:00
if strings . EqualFold ( u . Host , "github.com" ) {
serviceType = GithubService
}
_ , err = x . Exec ( "UPDATE repository SET original_service_type = ? WHERE id = ?" , serviceType , res . ID )
if err != nil {
return err
}
}
}
type ExternalLoginUser struct {
2023-07-04 21:36:08 +03:00
ExternalID string ` xorm:"pk NOT NULL" `
UserID int64 ` xorm:"INDEX NOT NULL" `
LoginSourceID int64 ` xorm:"pk NOT NULL" `
RawData map [ string ] any ` xorm:"TEXT JSON" `
Provider string ` xorm:"index VARCHAR(25)" `
2019-10-14 09:10:42 +03:00
Email string
Name string
FirstName string
LastName string
NickName string
Description string
AvatarURL string
Location string
AccessToken string
AccessTokenSecret string
RefreshToken string
ExpiresAt time . Time
}
2023-08-13 22:17:21 +03:00
return x . Sync ( new ( ExternalLoginUser ) )
2019-10-14 09:10:42 +03:00
}