@@ -59,31 +59,20 @@ def self.username_length
5959 3 ..15
6060 end
6161
62- def self . suggest_username ( name )
63- return unless name . present?
64-
65- # If it's an email
66- if name =~ /([^@]+)@([^\. ]+)/
67- name = Regexp . last_match [ 1 ]
68-
69- # Special case, if it's "me" or "i" @ something, take the something.
70- name = Regexp . last_match [ 2 ] if [ 'i' , 'me' ] . include? ( name )
71- end
72-
73- name . gsub! ( /^[^A-Za-z0-9]+/ , "" )
74- name . gsub! ( /[^A-Za-z0-9_]+$/ , "" )
62+ def self . sanitize_username! ( name )
63+ name . gsub! ( /^[^A-Za-z0-9]+|[^A-Za-z0-9_]+$/ , "" )
7564 name . gsub! ( /[^A-Za-z0-9_]+/ , "_" )
65+ end
7666
77- # Pad the length with 1s
67+ def self . pad_missing_chars_with_1s! ( name )
7868 missing_chars = User . username_length . begin - name . length
7969 name << ( '1' * missing_chars ) if missing_chars > 0
70+ end
8071
81- # Trim extra length
82- name = name [ 0 ..User . username_length . end -1 ]
83-
72+ def self . find_available_username_based_on ( name )
8473 i = 1
8574 attempt = name
86- while ! username_available? ( attempt )
75+ until username_available? ( attempt )
8776 suffix = i . to_s
8877 max_length = User . username_length . end - suffix . length - 1
8978 attempt = "#{ name [ 0 ..max_length ] } #{ suffix } "
@@ -92,6 +81,27 @@ def self.suggest_username(name)
9281 attempt
9382 end
9483
84+ EMAIL = %r{([^@]+)@([^\. ]+)}
85+
86+ def self . suggest_username ( name )
87+ return unless name . present?
88+
89+ if name =~ EMAIL
90+ # When 'walter@white.com' take 'walter'
91+ name = Regexp . last_match [ 1 ]
92+
93+ # When 'me@eviltrout.com' take 'eviltrout'
94+ name = Regexp . last_match [ 2 ] if [ 'i' , 'me' ] . include? ( name )
95+ end
96+
97+ sanitize_username! ( name )
98+ pad_missing_chars_with_1s! ( name )
99+
100+ # Trim extra length
101+ name = name [ 0 ..User . username_length . end -1 ]
102+ find_available_username_based_on ( name )
103+ end
104+
95105 def self . create_for_email ( email , opts = { } )
96106 username = suggest_username ( email )
97107
@@ -240,7 +250,7 @@ def self.mentionable_usernames
240250 end
241251
242252 def moderator?
243- # this saves us from checking both, admins are always moderators
253+ # this saves us from checking both, admins are always moderators
244254 #
245255 # in future we may split this out
246256 admin || moderator
@@ -409,7 +419,7 @@ def has_trust_level?(level)
409419 end
410420
411421 # a touch faster than automatic
412- def admin?
422+ def admin?
413423 admin
414424 end
415425
@@ -545,7 +555,7 @@ def email_validator
545555 end
546556 end
547557 end
548-
558+
549559 def email_in_restriction_setting? ( setting )
550560 domains = setting . gsub ( '.' , '\.' )
551561 regexp = Regexp . new ( "@(#{ domains } )" , true )
0 commit comments