mirror of
https://github.com/discourse/discourse.git
synced 2025-02-20 18:58:10 +00:00
allow regex options on username site settings
This commit is contained in:
parent
c29334cf23
commit
ddbd1d5ab8
17
lib/validators/regex_setting_validation.rb
Normal file
17
lib/validators/regex_setting_validation.rb
Normal file
@ -0,0 +1,17 @@
|
||||
module RegexSettingValidation
|
||||
|
||||
def initialize_regex_opts(opts = {})
|
||||
@regex = Regexp.new(opts[:regex]) if opts[:regex]
|
||||
@regex_error = opts[:regex_error] || 'site_settings.errors.regex_mismatch'
|
||||
end
|
||||
|
||||
def regex_match?(val)
|
||||
if @regex && !(val =~ @regex)
|
||||
@regex_fail = true
|
||||
return false
|
||||
end
|
||||
|
||||
true
|
||||
end
|
||||
|
||||
end
|
@ -1,8 +1,10 @@
|
||||
class StringSettingValidator
|
||||
|
||||
include RegexSettingValidation
|
||||
|
||||
def initialize(opts = {})
|
||||
@opts = opts
|
||||
@regex = Regexp.new(opts[:regex]) if opts[:regex]
|
||||
@regex_error = opts[:regex_error] || 'site_settings.errors.regex_mismatch'
|
||||
initialize_regex_opts(opts)
|
||||
end
|
||||
|
||||
def valid_value?(val)
|
||||
@ -13,12 +15,7 @@ class StringSettingValidator
|
||||
return false
|
||||
end
|
||||
|
||||
if @regex && !(val =~ @regex)
|
||||
@regex_fail = true
|
||||
return false
|
||||
end
|
||||
|
||||
true
|
||||
regex_match?(val)
|
||||
end
|
||||
|
||||
def error_message
|
||||
|
@ -1,13 +1,21 @@
|
||||
class UsernameSettingValidator
|
||||
|
||||
include RegexSettingValidation
|
||||
|
||||
def initialize(opts = {})
|
||||
@opts = opts
|
||||
initialize_regex_opts(opts)
|
||||
end
|
||||
|
||||
def valid_value?(val)
|
||||
!val.present? || User.where(username: val).exists?
|
||||
!val.present? || (User.where(username: val).exists? && regex_match?(val))
|
||||
end
|
||||
|
||||
def error_message
|
||||
I18n.t('site_settings.errors.invalid_username')
|
||||
if @regex_fail
|
||||
I18n.t(@regex_error)
|
||||
else
|
||||
I18n.t('site_settings.errors.invalid_username')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -17,5 +17,26 @@ describe UsernameSettingValidator do
|
||||
it "returns false if value does not match a user's username" do
|
||||
expect(validator.valid_value?('no way')).to eq(false)
|
||||
end
|
||||
|
||||
context "regex support" do
|
||||
let!(:darthvader) { Fabricate(:user, username: 'darthvader') }
|
||||
let!(:luke) { Fabricate(:user, username: 'luke') }
|
||||
|
||||
it "returns false if regex doesn't match" do
|
||||
v = described_class.new(regex: 'darth')
|
||||
expect(v.valid_value?('luke')).to eq(false)
|
||||
expect(v.valid_value?('vader')).to eq(false)
|
||||
end
|
||||
|
||||
it "returns true if regex matches" do
|
||||
v = described_class.new(regex: 'darth')
|
||||
expect(v.valid_value?('darthvader')).to eq(true)
|
||||
end
|
||||
|
||||
it "returns false if regex matches but username doesn't match a user" do
|
||||
v = described_class.new(regex: 'darth')
|
||||
expect(v.valid_value?('darthmaul')).to eq(false)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
Loading…
x
Reference in New Issue
Block a user