summaryrefslogtreecommitdiff
path: root/app/validators/gitlab/zoom_url_validator.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/validators/gitlab/zoom_url_validator.rb')
-rw-r--r--app/validators/gitlab/zoom_url_validator.rb22
1 files changed, 22 insertions, 0 deletions
diff --git a/app/validators/gitlab/zoom_url_validator.rb b/app/validators/gitlab/zoom_url_validator.rb
new file mode 100644
index 00000000000..c752cec07c2
--- /dev/null
+++ b/app/validators/gitlab/zoom_url_validator.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+module Gitlab
+ # Gitlab::Utils::ZoomUrlValidator
+ #
+ # Custom validator for zoom urls
+ #
+ # @example usage
+ # validates :url, 'gitlab/zoom_url': true
+ class ZoomUrlValidator < ActiveModel::EachValidator
+ ALLOWED_SCHEMES = %w(https).freeze
+
+ def validate_each(record, attribute, value)
+ links_count = Gitlab::ZoomLinkExtractor.new(value).links.size
+ valid = Gitlab::UrlSanitizer.valid?(value, allowed_schemes: ALLOWED_SCHEMES)
+
+ return if links_count == 1 && valid
+
+ record.errors.add(:url, 'must contain one valid Zoom URL')
+ end
+ end
+end