about summary refs log tree commit diff
diff options
context:
space:
mode:
authorThibG <thib@sitedethib.com>2018-11-27 12:28:01 +0100
committerEugen Rochko <eugen@zeonfederated.com>2018-11-27 12:28:01 +0100
commit395615d9f3c521824f7e56f6d1bb2d82b8e421b4 (patch)
treee6e1821481ee41819e582d1d03811c2a3bc7c0a6
parentd5fac45f5b3501e923401a12a9b18d225b19232a (diff)
Allow hyphens in the middle of remote user names (#9345)
Fixes #9309

This only allows hyphens in the middle of a username, much like dots,
although I don't have a compelling reason to do so other than keeping
the changes minimal.
-rw-r--r--app/models/account.rb2
-rw-r--r--spec/models/account_spec.rb8
2 files changed, 8 insertions, 2 deletions
diff --git a/app/models/account.rb b/app/models/account.rb
index 46d32a36e..f25263306 100644
--- a/app/models/account.rb
+++ b/app/models/account.rb
@@ -46,7 +46,7 @@
 #
 
 class Account < ApplicationRecord
-  USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.]+[a-z0-9_]+)?/i
+  USERNAME_RE = /[a-z0-9_]+([a-z0-9_\.-]+[a-z0-9_]+)?/i
   MENTION_RE  = /(?<=^|[^\/[:word:]])@((#{USERNAME_RE})(?:@[a-z0-9\.\-]+[a-z0-9]+)?)/i
 
   include AccountAvatar
diff --git a/spec/models/account_spec.rb b/spec/models/account_spec.rb
index 9133616a2..f7f78d34c 100644
--- a/spec/models/account_spec.rb
+++ b/spec/models/account_spec.rb
@@ -618,9 +618,15 @@ RSpec.describe Account, type: :model do
         expect(account).not_to model_have_error_on_field(:username)
       end
 
-      it 'is invalid if the username doesn\'t only contains letters, numbers and underscores' do
+      it 'is valid even if the username contains hyphens' do
         account = Fabricate.build(:account, domain: 'domain', username: 'the-doctor')
         account.valid?
+        expect(account).to_not model_have_error_on_field(:username)
+      end
+
+      it 'is invalid if the username doesn\'t only contains letters, numbers, underscores and hyphens' do
+        account = Fabricate.build(:account, domain: 'domain', username: 'the doctor')
+        account.valid?
         expect(account).to model_have_error_on_field(:username)
       end