summaryrefslogtreecommitdiff
path: root/app/models/namespace/package_setting.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/namespace/package_setting.rb')
-rw-r--r--app/models/namespace/package_setting.rb28
1 files changed, 28 insertions, 0 deletions
diff --git a/app/models/namespace/package_setting.rb b/app/models/namespace/package_setting.rb
new file mode 100644
index 00000000000..a2064e020b3
--- /dev/null
+++ b/app/models/namespace/package_setting.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+class Namespace::PackageSetting < ApplicationRecord
+ self.primary_key = :namespace_id
+ self.table_name = 'namespace_package_settings'
+
+ PackageSettingNotImplemented = Class.new(StandardError)
+
+ PACKAGES_WITH_SETTINGS = %w[maven].freeze
+
+ belongs_to :namespace, inverse_of: :package_setting_relation
+
+ validates :namespace, presence: true
+ validates :maven_duplicates_allowed, inclusion: { in: [true, false] }
+ validates :maven_duplicate_exception_regex, untrusted_regexp: true, length: { maximum: 255 }
+
+ class << self
+ def duplicates_allowed?(package)
+ return true unless package
+ raise PackageSettingNotImplemented unless PACKAGES_WITH_SETTINGS.include?(package.package_type)
+
+ duplicates_allowed = package.package_settings["#{package.package_type}_duplicates_allowed"]
+ regex = ::Gitlab::UntrustedRegexp.new("\\A#{package.package_settings["#{package.package_type}_duplicate_exception_regex"]}\\z")
+
+ duplicates_allowed || regex.match?(package.name)
+ end
+ end
+end