From c1b5fc8265dfe650567ecdbc3daecab97197a920 Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Wed, 3 Jun 2015 14:34:04 +0300 Subject: [PATCH] Fix domain name validation #2609 --- app/validators/domain_name_validator.rb | 3 +-- spec/models/domain_spec.rb | 14 +++++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/app/validators/domain_name_validator.rb b/app/validators/domain_name_validator.rb index 4d337b8b5..6a2d41c43 100644 --- a/app/validators/domain_name_validator.rb +++ b/app/validators/domain_name_validator.rb @@ -31,9 +31,8 @@ class DomainNameValidator < ActiveModel::EachValidator # rubocop: disable Metrics/LineLength unicode_chars = /\u00E4\u00F5\u00F6\u00FC\u0161\u017E/ # äõöüšž - regexp = /\A[a-zA-Z0-9#{unicode_chars}][a-zA-Z0-9#{unicode_chars}-]{0,61}[a-zA-Z0-9#{unicode_chars}]#{general_domains}\z/ + regexp = /\A[a-zA-Z0-9#{unicode_chars.source}][a-zA-Z0-9#{unicode_chars.source}-]{0,61}[a-zA-Z0-9#{unicode_chars.source}]#{general_domains.source}\z/ # rubocop: enable Metrics/LineLength - # rubocop: disable Style/DoubleNegation !!(value =~ regexp) # rubocop: enable Style/DoubleNegation diff --git a/spec/models/domain_spec.rb b/spec/models/domain_spec.rb index cc6c4e257..c9177b406 100644 --- a/spec/models/domain_spec.rb +++ b/spec/models/domain_spec.rb @@ -242,7 +242,7 @@ describe Domain do end it 'should not be valid when name length is longer than 63 characters' do - d = Fabricate.build(:domain, + d = Fabricate.build(:domain, name: "xn--4caaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ee") d.valid? d.errors.full_messages.should match_array([ @@ -294,6 +294,18 @@ describe Domain do d.errors.full_messages.should == ["Domain name Domain name is invalid"] end + it 'should not be valid with at character' do + d = Fabricate.build(:domain, name: 'dass@sf.ee') + d.valid? + d.errors.full_messages.should == ["Domain name Domain name is invalid"] + end + + it 'should not be valid with invalid characters' do + d = Fabricate.build(:domain, name: '@ba)s(?ä_:-df.ee') + d.valid? + d.errors.full_messages.should == ["Domain name Domain name is invalid"] + end + it 'should be valid when name length is two pynicodes' do d = Fabricate.build(:domain, name: "xn--4caa.ee") d.valid?