about summary refs log tree commit diff
path: root/app/validators
diff options
context:
space:
mode:
authorClaire <claire.github-309c@sitedethib.com>2021-03-02 12:02:56 +0100
committerGitHub <noreply@github.com>2021-03-02 12:02:56 +0100
commit65db2625508c220fd3c0a1f37cdd2e13b6e02987 (patch)
tree47b7ffdb601a3eed8870699f74212706450d04e9 /app/validators
parenta8139ab0160096d09d83e8d3f9c7849129be1aa8 (diff)
Update twitter-text from 1.14 to 3.1.0 and fix toot character counting (#15382)
* Update twitter-text from 1.14 to 3.1.0

* Disable emoji parsing

* Properly depend on twitter-text for url detection

* Fix some URLs being wrongly detected client-side

* Add test for server-side validation of non-autolinkable URLs

* Fix server-side status length counting
Diffstat (limited to 'app/validators')
-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 93bae2fa8..b56c5a321 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 = 500
+  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