about summary refs log tree commit diff
path: root/app/validators/status_length_validator.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/validators/status_length_validator.rb')
-rw-r--r--app/validators/status_length_validator.rb9
1 files changed, 8 insertions, 1 deletions
diff --git a/app/validators/status_length_validator.rb b/app/validators/status_length_validator.rb
index 92ee5e643..dcbc4a41a 100644
--- a/app/validators/status_length_validator.rb
+++ b/app/validators/status_length_validator.rb
@@ -2,6 +2,13 @@
 
 class StatusLengthValidator < ActiveModel::Validator
   MAX_CHARS = (ENV['MAX_TOOT_CHARS'] || 500).to_i
+  URL_PATTERN = %r{
+    (?:
+      (#{Twitter::TwitterText::Regex[:valid_url_preceding_chars]})
+      (#{FetchLinkCardService::URL_PATTERN})
+    )
+  }iox
+  URL_PLACEHOLDER = "\1#{'x' * 23}"
 
   def validate(status)
     return unless status.local? && !status.reblog?
@@ -28,7 +35,7 @@ class StatusLengthValidator < ActiveModel::Validator
     return '' if @status.text.nil?
 
     @status.text.dup.tap do |new_text|
-      new_text.gsub!(FetchLinkCardService::URL_PATTERN, 'x' * 23)
+      new_text.gsub!(URL_PATTERN, URL_PLACEHOLDER)
       new_text.gsub!(Account::MENTION_RE, '@\2')
     end
   end