18 lines
485 B
Ruby
18 lines
485 B
Ruby
# frozen_string_literal: true
|
|
|
|
# ZoomUrlValidator
|
|
#
|
|
# Custom validator for zoom urls
|
|
#
|
|
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
|