diff --git a/src/domains.js b/src/domains.js index f37b751d3..88e121883 100644 --- a/src/domains.js +++ b/src/domains.js @@ -143,6 +143,10 @@ function validateHostname(location, domainObject) { if (/^[-.]/.test(location)) return new DomainsError(DomainsError.BAD_FIELD, 'Subdomain cannot start or end with hyphen or dot'); } + if (domainObject.config.hyphenatedSubdomains) { + if (location.indexOf('.') !== -1) return new DomainsError(DomainsError.BAD_FIELD, 'Subdomain cannot contain a dot'); + } + return null; } diff --git a/src/test/domains-test.js b/src/test/domains-test.js index 9583f0799..4ca8022e8 100644 --- a/src/test/domains-test.js +++ b/src/test/domains-test.js @@ -9,7 +9,8 @@ var async = require('async'), config = require('../config.js'), database = require('../database.js'), domains = require('../domains.js'), - expect = require('expect.js'); + expect = require('expect.js'), + _ = require('underscore'); describe('Domains', function () { before(function (done) { @@ -28,7 +29,7 @@ describe('Domains', function () { ], done); }); - let domain = { + const domain = { domain: 'example.com', zoneName: 'example.com', config: {} @@ -74,5 +75,14 @@ describe('Domains', function () { expect(domains.validateHostname('a0.x.y', domain)).to.be(null); expect(domains.validateHostname('01', domain)).to.be(null); }); + + it('hyphenatedSubdomains', function () { + let domainCopy = _.extend({}, domain); + domainCopy.config.hyphenatedSubdomains = true; + + expect(domains.validateHostname('a', domain)).to.be(null); + expect(domains.validateHostname('a0-x', domain)).to.be(null); + expect(domains.validateHostname('a0.x', domain)).to.be.an(Error); + }); }); });