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.

v114.go 1.1KB

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