Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package setting
  4. import (
  5. "math"
  6. "net/url"
  7. "os"
  8. "path/filepath"
  9. "code.gitea.io/gitea/modules/log"
  10. "github.com/dustin/go-humanize"
  11. ini "gopkg.in/ini.v1"
  12. )
  13. // Package registry settings
  14. var (
  15. Packages = struct {
  16. Storage
  17. Enabled bool
  18. ChunkedUploadPath string
  19. RegistryHost string
  20. LimitTotalOwnerCount int64
  21. LimitTotalOwnerSize int64
  22. LimitSizeComposer int64
  23. LimitSizeConan int64
  24. LimitSizeConda int64
  25. LimitSizeContainer int64
  26. LimitSizeGeneric int64
  27. LimitSizeHelm int64
  28. LimitSizeMaven int64
  29. LimitSizeNpm int64
  30. LimitSizeNuGet int64
  31. LimitSizePub int64
  32. LimitSizePyPI int64
  33. LimitSizeRubyGems int64
  34. LimitSizeVagrant int64
  35. }{
  36. Enabled: true,
  37. LimitTotalOwnerCount: -1,
  38. }
  39. )
  40. func newPackages() {
  41. sec := Cfg.Section("packages")
  42. if err := sec.MapTo(&Packages); err != nil {
  43. log.Fatal("Failed to map Packages settings: %v", err)
  44. }
  45. Packages.Storage = getStorage("packages", "", nil)
  46. appURL, _ := url.Parse(AppURL)
  47. Packages.RegistryHost = appURL.Host
  48. Packages.ChunkedUploadPath = filepath.ToSlash(sec.Key("CHUNKED_UPLOAD_PATH").MustString("tmp/package-upload"))
  49. if !filepath.IsAbs(Packages.ChunkedUploadPath) {
  50. Packages.ChunkedUploadPath = filepath.ToSlash(filepath.Join(AppDataPath, Packages.ChunkedUploadPath))
  51. }
  52. if err := os.MkdirAll(Packages.ChunkedUploadPath, os.ModePerm); err != nil {
  53. log.Error("Unable to create chunked upload directory: %s (%v)", Packages.ChunkedUploadPath, err)
  54. }
  55. Packages.LimitTotalOwnerSize = mustBytes(sec, "LIMIT_TOTAL_OWNER_SIZE")
  56. Packages.LimitSizeComposer = mustBytes(sec, "LIMIT_SIZE_COMPOSER")
  57. Packages.LimitSizeConan = mustBytes(sec, "LIMIT_SIZE_CONAN")
  58. Packages.LimitSizeConda = mustBytes(sec, "LIMIT_SIZE_CONDA")
  59. Packages.LimitSizeContainer = mustBytes(sec, "LIMIT_SIZE_CONTAINER")
  60. Packages.LimitSizeGeneric = mustBytes(sec, "LIMIT_SIZE_GENERIC")
  61. Packages.LimitSizeHelm = mustBytes(sec, "LIMIT_SIZE_HELM")
  62. Packages.LimitSizeMaven = mustBytes(sec, "LIMIT_SIZE_MAVEN")
  63. Packages.LimitSizeNpm = mustBytes(sec, "LIMIT_SIZE_NPM")
  64. Packages.LimitSizeNuGet = mustBytes(sec, "LIMIT_SIZE_NUGET")
  65. Packages.LimitSizePub = mustBytes(sec, "LIMIT_SIZE_PUB")
  66. Packages.LimitSizePyPI = mustBytes(sec, "LIMIT_SIZE_PYPI")
  67. Packages.LimitSizeRubyGems = mustBytes(sec, "LIMIT_SIZE_RUBYGEMS")
  68. Packages.LimitSizeVagrant = mustBytes(sec, "LIMIT_SIZE_VAGRANT")
  69. }
  70. func mustBytes(section *ini.Section, key string) int64 {
  71. const noLimit = "-1"
  72. value := section.Key(key).MustString(noLimit)
  73. if value == noLimit {
  74. return -1
  75. }
  76. bytes, err := humanize.ParseBytes(value)
  77. if err != nil || bytes > math.MaxInt64 {
  78. return -1
  79. }
  80. return int64(bytes)
  81. }