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.

packages.go 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package setting
  4. import (
  5. "fmt"
  6. "math"
  7. "net/url"
  8. "os"
  9. "path/filepath"
  10. "github.com/dustin/go-humanize"
  11. )
  12. // Package registry settings
  13. var (
  14. Packages = struct {
  15. Storage *Storage
  16. Enabled bool
  17. ChunkedUploadPath string
  18. RegistryHost string
  19. LimitTotalOwnerCount int64
  20. LimitTotalOwnerSize int64
  21. LimitSizeAlpine int64
  22. LimitSizeCargo int64
  23. LimitSizeChef int64
  24. LimitSizeComposer int64
  25. LimitSizeConan int64
  26. LimitSizeConda int64
  27. LimitSizeContainer int64
  28. LimitSizeCran int64
  29. LimitSizeDebian int64
  30. LimitSizeGeneric int64
  31. LimitSizeGo int64
  32. LimitSizeHelm int64
  33. LimitSizeMaven int64
  34. LimitSizeNpm int64
  35. LimitSizeNuGet int64
  36. LimitSizePub int64
  37. LimitSizePyPI int64
  38. LimitSizeRpm int64
  39. LimitSizeRubyGems int64
  40. LimitSizeSwift int64
  41. LimitSizeVagrant int64
  42. }{
  43. Enabled: true,
  44. LimitTotalOwnerCount: -1,
  45. }
  46. )
  47. func loadPackagesFrom(rootCfg ConfigProvider) (err error) {
  48. sec, _ := rootCfg.GetSection("packages")
  49. if sec == nil {
  50. Packages.Storage, err = getStorage(rootCfg, "packages", "", nil)
  51. return err
  52. }
  53. if err = sec.MapTo(&Packages); err != nil {
  54. return fmt.Errorf("failed to map Packages settings: %v", err)
  55. }
  56. Packages.Storage, err = getStorage(rootCfg, "packages", "", sec)
  57. if err != nil {
  58. return err
  59. }
  60. appURL, _ := url.Parse(AppURL)
  61. Packages.RegistryHost = appURL.Host
  62. Packages.ChunkedUploadPath = filepath.ToSlash(sec.Key("CHUNKED_UPLOAD_PATH").MustString("tmp/package-upload"))
  63. if !filepath.IsAbs(Packages.ChunkedUploadPath) {
  64. Packages.ChunkedUploadPath = filepath.ToSlash(filepath.Join(AppDataPath, Packages.ChunkedUploadPath))
  65. }
  66. if HasInstallLock(rootCfg) {
  67. if err := os.MkdirAll(Packages.ChunkedUploadPath, os.ModePerm); err != nil {
  68. return fmt.Errorf("unable to create chunked upload directory: %s (%v)", Packages.ChunkedUploadPath, err)
  69. }
  70. }
  71. Packages.LimitTotalOwnerSize = mustBytes(sec, "LIMIT_TOTAL_OWNER_SIZE")
  72. Packages.LimitSizeAlpine = mustBytes(sec, "LIMIT_SIZE_ALPINE")
  73. Packages.LimitSizeCargo = mustBytes(sec, "LIMIT_SIZE_CARGO")
  74. Packages.LimitSizeChef = mustBytes(sec, "LIMIT_SIZE_CHEF")
  75. Packages.LimitSizeComposer = mustBytes(sec, "LIMIT_SIZE_COMPOSER")
  76. Packages.LimitSizeConan = mustBytes(sec, "LIMIT_SIZE_CONAN")
  77. Packages.LimitSizeConda = mustBytes(sec, "LIMIT_SIZE_CONDA")
  78. Packages.LimitSizeContainer = mustBytes(sec, "LIMIT_SIZE_CONTAINER")
  79. Packages.LimitSizeCran = mustBytes(sec, "LIMIT_SIZE_CRAN")
  80. Packages.LimitSizeDebian = mustBytes(sec, "LIMIT_SIZE_DEBIAN")
  81. Packages.LimitSizeGeneric = mustBytes(sec, "LIMIT_SIZE_GENERIC")
  82. Packages.LimitSizeGo = mustBytes(sec, "LIMIT_SIZE_GO")
  83. Packages.LimitSizeHelm = mustBytes(sec, "LIMIT_SIZE_HELM")
  84. Packages.LimitSizeMaven = mustBytes(sec, "LIMIT_SIZE_MAVEN")
  85. Packages.LimitSizeNpm = mustBytes(sec, "LIMIT_SIZE_NPM")
  86. Packages.LimitSizeNuGet = mustBytes(sec, "LIMIT_SIZE_NUGET")
  87. Packages.LimitSizePub = mustBytes(sec, "LIMIT_SIZE_PUB")
  88. Packages.LimitSizePyPI = mustBytes(sec, "LIMIT_SIZE_PYPI")
  89. Packages.LimitSizeRpm = mustBytes(sec, "LIMIT_SIZE_RPM")
  90. Packages.LimitSizeRubyGems = mustBytes(sec, "LIMIT_SIZE_RUBYGEMS")
  91. Packages.LimitSizeSwift = mustBytes(sec, "LIMIT_SIZE_SWIFT")
  92. Packages.LimitSizeVagrant = mustBytes(sec, "LIMIT_SIZE_VAGRANT")
  93. return nil
  94. }
  95. func mustBytes(section ConfigSection, key string) int64 {
  96. const noLimit = "-1"
  97. value := section.Key(key).MustString(noLimit)
  98. if value == noLimit {
  99. return -1
  100. }
  101. bytes, err := humanize.ParseBytes(value)
  102. if err != nil || bytes > math.MaxInt64 {
  103. return -1
  104. }
  105. return int64(bytes)
  106. }