code.gitea.io/gitea@v1.21.7/models/migrations/v1_11/v114.go (about)

     1  // Copyright 2019 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package v1_11 //nolint
     5  
     6  import (
     7  	"net/url"
     8  
     9  	"xorm.io/xorm"
    10  )
    11  
    12  func SanitizeOriginalURL(x *xorm.Engine) error {
    13  	type Repository struct {
    14  		ID          int64
    15  		OriginalURL string `xorm:"VARCHAR(2048)"`
    16  	}
    17  
    18  	var last int
    19  	const batchSize = 50
    20  	for {
    21  		results := make([]Repository, 0, batchSize)
    22  		err := x.Where("original_url <> '' AND original_url IS NOT NULL").
    23  			And("original_service_type = 0 OR original_service_type IS NULL").
    24  			OrderBy("id").
    25  			Limit(batchSize, last).
    26  			Find(&results)
    27  		if err != nil {
    28  			return err
    29  		}
    30  		if len(results) == 0 {
    31  			break
    32  		}
    33  		last += len(results)
    34  
    35  		for _, res := range results {
    36  			u, err := url.Parse(res.OriginalURL)
    37  			if err != nil {
    38  				// it is ok to continue here, we only care about fixing URLs that we can read
    39  				continue
    40  			}
    41  			u.User = nil
    42  			originalURL := u.String()
    43  			_, err = x.Exec("UPDATE repository SET original_url = ? WHERE id = ?", originalURL, res.ID)
    44  			if err != nil {
    45  				return err
    46  			}
    47  		}
    48  	}
    49  	return nil
    50  }