Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/user_detail.rb')
-rw-r--r--app/models/user_detail.rb23
1 files changed, 22 insertions, 1 deletions
diff --git a/app/models/user_detail.rb b/app/models/user_detail.rb
index 9ac814eebda..bbb08ed5774 100644
--- a/app/models/user_detail.rb
+++ b/app/models/user_detail.rb
@@ -17,10 +17,24 @@ class UserDetail < MainClusterwide::ApplicationRecord
DEFAULT_FIELD_LENGTH = 500
+ MASTODON_VALIDATION_REGEX = /
+ \A # beginning of string
+ @?\b # optional leading at
+ ([\w\d.%+-]+) # character group to pick up words in user portion of username
+ @ # separator between user and host
+ ( # beginning of charagter group for host portion
+ [\w\d.-]+ # character group to pick up words in host portion of username
+ \.\w{2,} # pick up tld of host domain, 2 chars or more
+ )\b # end of character group to pick up words in host portion of username
+ \z # end of string
+ /x
+
validates :discord, length: { maximum: DEFAULT_FIELD_LENGTH }, allow_blank: true
validate :discord_format
validates :linkedin, length: { maximum: DEFAULT_FIELD_LENGTH }, allow_blank: true
validates :location, length: { maximum: DEFAULT_FIELD_LENGTH }, allow_blank: true
+ validates :mastodon, length: { maximum: DEFAULT_FIELD_LENGTH }, allow_blank: true
+ validate :mastodon_format
validates :organization, length: { maximum: DEFAULT_FIELD_LENGTH }, allow_blank: true
validates :skype, length: { maximum: DEFAULT_FIELD_LENGTH }, allow_blank: true
validates :twitter, length: { maximum: DEFAULT_FIELD_LENGTH }, allow_blank: true
@@ -32,7 +46,7 @@ class UserDetail < MainClusterwide::ApplicationRecord
enum registration_objective: REGISTRATION_OBJECTIVE_PAIRS, _suffix: true
def sanitize_attrs
- %i[discord linkedin skype twitter website_url].each do |attr|
+ %i[discord linkedin mastodon skype twitter website_url].each do |attr|
value = self[attr]
self[attr] = Sanitize.clean(value) if value.present?
end
@@ -49,6 +63,7 @@ class UserDetail < MainClusterwide::ApplicationRecord
self.discord = '' if discord.nil?
self.linkedin = '' if linkedin.nil?
self.location = '' if location.nil?
+ self.mastodon = '' if mastodon.nil?
self.organization = '' if organization.nil?
self.skype = '' if skype.nil?
self.twitter = '' if twitter.nil?
@@ -62,4 +77,10 @@ def discord_format
errors.add(:discord, _('must contain only a discord user ID.'))
end
+def mastodon_format
+ return if mastodon.blank? || mastodon =~ UserDetail::MASTODON_VALIDATION_REGEX
+
+ errors.add(:mastodon, _('must contain only a mastodon username.'))
+end
+
UserDetail.prepend_mod_with('UserDetail')