Commit 9f3a1203 authored by Grzegorz Bizon's avatar Grzegorz Bizon

Merge branch '29271-fix-pages-numeric-domain' into 'master'

Allow numeric pages domain

Closes #29271

See merge request !11927
parents 35083dc9 8df7bcf5
class PagesDomain < ActiveRecord::Base class PagesDomain < ActiveRecord::Base
belongs_to :project belongs_to :project
validates :domain, hostname: true validates :domain, hostname: { allow_numeric_hostname: true }
validates :domain, uniqueness: { case_sensitive: false } validates :domain, uniqueness: { case_sensitive: false }
validates :certificate, certificate: true, allow_nil: true, allow_blank: true validates :certificate, certificate: true, allow_nil: true, allow_blank: true
validates :key, certificate_key: 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 ...@@ -98,7 +98,7 @@ class PagesDomain < ActiveRecord::Base
def validate_pages_domain def validate_pages_domain
return unless 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") self.errors.add(:domain, "*.#{Settings.pages.host} is restricted")
end end
end end
......
---
title: Allow numeric pages domain
merge_request: 11550
author:
...@@ -6,7 +6,7 @@ describe PagesDomain, models: true do ...@@ -6,7 +6,7 @@ describe PagesDomain, models: true do
end end
describe 'validate domain' do describe 'validate domain' do
subject { build(:pages_domain, domain: domain) } subject(:pages_domain) { build(:pages_domain, domain: domain) }
context 'is unique' do context 'is unique' do
let(:domain) { 'my.domain.com' } let(:domain) { 'my.domain.com' }
...@@ -14,36 +14,25 @@ describe PagesDomain, models: true do ...@@ -14,36 +14,25 @@ describe PagesDomain, models: true do
it { is_expected.to validate_uniqueness_of(:domain) } it { is_expected.to validate_uniqueness_of(:domain) }
end end
context 'valid domain' do {
let(:domain) { 'my.domain.com' } 'my.domain.com' => true,
'123.456.789' => true,
it { is_expected.to be_valid } '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 end
context 'valid hexadecimal-looking domain' do let(:domain) { value }
let(:domain) { '0x12345.com'}
it { is_expected.to be_valid } it { expect(pages_domain.valid?).to eq(validity) }
end 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 }
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment