Allow numeric pages domain
Previously, `PagesDomain` would not allow a domain such as 123.example.com. With this change, this is now allowed, because it is a perfectly valid domain.
This commit is contained in:
parent
e34e576104
commit
8df7bcf532
3 changed files with 24 additions and 31 deletions
|
@ -1,7 +1,7 @@
|
|||
class PagesDomain < ActiveRecord::Base
|
||||
belongs_to :project
|
||||
|
||||
validates :domain, hostname: true
|
||||
validates :domain, hostname: { allow_numeric_hostname: true }
|
||||
validates :domain, uniqueness: { case_sensitive: false }
|
||||
validates :certificate, certificate: true, allow_nil: true, allow_blank: true
|
||||
validates :key, certificate_key: true, allow_nil: true, allow_blank: true
|
||||
|
@ -98,7 +98,7 @@ class PagesDomain < ActiveRecord::Base
|
|||
|
||||
def validate_pages_domain
|
||||
return unless domain
|
||||
if domain.downcase.ends_with?(".#{Settings.pages.host}".downcase)
|
||||
if domain.downcase.ends_with?(Settings.pages.host.downcase)
|
||||
self.errors.add(:domain, "*.#{Settings.pages.host} is restricted")
|
||||
end
|
||||
end
|
||||
|
|
4
changelogs/unreleased/allow_numeric_pages_domain.yml
Normal file
4
changelogs/unreleased/allow_numeric_pages_domain.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
title: Allow numeric pages domain
|
||||
merge_request: 11550
|
||||
author:
|
|
@ -6,7 +6,7 @@ describe PagesDomain, models: true do
|
|||
end
|
||||
|
||||
describe 'validate domain' do
|
||||
subject { build(:pages_domain, domain: domain) }
|
||||
subject(:pages_domain) { build(:pages_domain, domain: domain) }
|
||||
|
||||
context 'is unique' do
|
||||
let(:domain) { 'my.domain.com' }
|
||||
|
@ -14,36 +14,25 @@ describe PagesDomain, models: true do
|
|||
it { is_expected.to validate_uniqueness_of(:domain) }
|
||||
end
|
||||
|
||||
context 'valid domain' do
|
||||
let(:domain) { 'my.domain.com' }
|
||||
{
|
||||
'my.domain.com' => true,
|
||||
'123.456.789' => true,
|
||||
'0x12345.com' => true,
|
||||
'0123123' => true,
|
||||
'_foo.com' => false,
|
||||
'reserved.com' => false,
|
||||
'a.reserved.com' => false,
|
||||
nil => false
|
||||
}.each do |value, validity|
|
||||
context "domain #{value.inspect} validity" do
|
||||
before do
|
||||
allow(Settings.pages).to receive(:host).and_return('reserved.com')
|
||||
end
|
||||
|
||||
it { is_expected.to be_valid }
|
||||
end
|
||||
let(:domain) { value }
|
||||
|
||||
context 'valid hexadecimal-looking domain' do
|
||||
let(:domain) { '0x12345.com'}
|
||||
|
||||
it { is_expected.to be_valid }
|
||||
end
|
||||
|
||||
context 'no domain' do
|
||||
let(:domain) { nil }
|
||||
|
||||
it { is_expected.not_to be_valid }
|
||||
end
|
||||
|
||||
context 'invalid domain' do
|
||||
let(:domain) { '0123123' }
|
||||
|
||||
it { is_expected.not_to be_valid }
|
||||
end
|
||||
|
||||
context 'domain from .example.com' do
|
||||
let(:domain) { 'my.domain.com' }
|
||||
|
||||
before { allow(Settings.pages).to receive(:host).and_return('domain.com') }
|
||||
|
||||
it { is_expected.not_to be_valid }
|
||||
it { expect(pages_domain.valid?).to eq(validity) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue