From 6f398144cb4ebe4c1cc3bceea6d76a8f861e6450 Mon Sep 17 00:00:00 2001 From: Girish Ramakrishnan Date: Sat, 25 Aug 2018 18:12:55 -0700 Subject: [PATCH] validate hyphenatedSubdomain --- src/dns/cloudflare.js | 1 + src/dns/digitalocean.js | 1 + src/dns/gandi.js | 1 + src/dns/gcdns.js | 1 + src/dns/godaddy.js | 1 + src/dns/manual.js | 5 ++++- src/dns/namecom.js | 4 ++++ src/dns/route53.js | 3 ++- src/test/dns-test.js | 1 + 9 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/dns/cloudflare.js b/src/dns/cloudflare.js index e7f47a0ab..661869ff9 100644 --- a/src/dns/cloudflare.js +++ b/src/dns/cloudflare.js @@ -231,6 +231,7 @@ function verifyDnsConfig(dnsConfig, fqdn, zoneName, ip, callback) { if (!dnsConfig.token || typeof dnsConfig.token !== 'string') return callback(new DomainsError(DomainsError.BAD_FIELD, 'token must be a non-empty string')); if (!dnsConfig.email || typeof dnsConfig.email !== 'string') return callback(new DomainsError(DomainsError.BAD_FIELD, 'email must be a non-empty string')); + if ('hyphenatedSubdomains' in dnsConfig && typeof dnsConfig.hyphenatedSubdomains !== 'boolean') return callback(new DomainsError(DomainsError.BAD_FIELD, 'hyphenatedSubdomains must be a boolean')); var credentials = { token: dnsConfig.token, diff --git a/src/dns/digitalocean.js b/src/dns/digitalocean.js index e77da4e05..0a6f969c9 100644 --- a/src/dns/digitalocean.js +++ b/src/dns/digitalocean.js @@ -201,6 +201,7 @@ function verifyDnsConfig(dnsConfig, fqdn, zoneName, ip, callback) { assert.strictEqual(typeof callback, 'function'); if (!dnsConfig.token || typeof dnsConfig.token !== 'string') return callback(new DomainsError(DomainsError.BAD_FIELD, 'token must be a non-empty string')); + if ('hyphenatedSubdomains' in dnsConfig && typeof dnsConfig.hyphenatedSubdomains !== 'boolean') return callback(new DomainsError(DomainsError.BAD_FIELD, 'hyphenatedSubdomains must be a boolean')); var credentials = { token: dnsConfig.token, diff --git a/src/dns/gandi.js b/src/dns/gandi.js index 8eccbd0b9..d6710cc22 100644 --- a/src/dns/gandi.js +++ b/src/dns/gandi.js @@ -113,6 +113,7 @@ function verifyDnsConfig(dnsConfig, fqdn, zoneName, ip, callback) { assert.strictEqual(typeof callback, 'function'); if (!dnsConfig.token || typeof dnsConfig.token !== 'string') return callback(new DomainsError(DomainsError.BAD_FIELD, 'token must be a non-empty string')); + if ('hyphenatedSubdomains' in dnsConfig && typeof dnsConfig.hyphenatedSubdomains !== 'boolean') return callback(new DomainsError(DomainsError.BAD_FIELD, 'hyphenatedSubdomains must be a boolean')); var credentials = { token: dnsConfig.token, diff --git a/src/dns/gcdns.js b/src/dns/gcdns.js index f7f6ef120..ee425d2a9 100644 --- a/src/dns/gcdns.js +++ b/src/dns/gcdns.js @@ -168,6 +168,7 @@ function verifyDnsConfig(dnsConfig, fqdn, zoneName, ip, callback) { if (!dnsConfig.credentials || typeof dnsConfig.credentials !== 'object') return callback(new DomainsError(DomainsError.BAD_FIELD, 'credentials must be an object')); if (typeof dnsConfig.credentials.client_email !== 'string') return callback(new DomainsError(DomainsError.BAD_FIELD, 'credentials.client_email must be a string')); if (typeof dnsConfig.credentials.private_key !== 'string') return callback(new DomainsError(DomainsError.BAD_FIELD, 'credentials.private_key must be a string')); + if ('hyphenatedSubdomains' in dnsConfig && typeof dnsConfig.hyphenatedSubdomains !== 'boolean') return callback(new DomainsError(DomainsError.BAD_FIELD, 'hyphenatedSubdomains must be a boolean')); var credentials = getDnsCredentials(dnsConfig); if (process.env.BOX_ENV === 'test') return callback(null, credentials); // this shouldn't be here diff --git a/src/dns/godaddy.js b/src/dns/godaddy.js index be7063467..53be07487 100644 --- a/src/dns/godaddy.js +++ b/src/dns/godaddy.js @@ -148,6 +148,7 @@ function verifyDnsConfig(dnsConfig, fqdn, zoneName, ip, callback) { if (!dnsConfig.apiKey || typeof dnsConfig.apiKey !== 'string') return callback(new DomainsError(DomainsError.BAD_FIELD, 'apiKey must be a non-empty string')); if (!dnsConfig.apiSecret || typeof dnsConfig.apiSecret !== 'string') return callback(new DomainsError(DomainsError.BAD_FIELD, 'apiSecret must be a non-empty string')); + if ('hyphenatedSubdomains' in dnsConfig && typeof dnsConfig.hyphenatedSubdomains !== 'boolean') return callback(new DomainsError(DomainsError.BAD_FIELD, 'hyphenatedSubdomains must be a boolean')); var credentials = { apiKey: dnsConfig.apiKey, diff --git a/src/dns/manual.js b/src/dns/manual.js index 1a3412042..748179e49 100644 --- a/src/dns/manual.js +++ b/src/dns/manual.js @@ -55,10 +55,13 @@ function verifyDnsConfig(dnsConfig, domain, zoneName, ip, callback) { assert.strictEqual(typeof ip, 'string'); assert.strictEqual(typeof callback, 'function'); + if ('wildcard' in dnsConfig && typeof dnsConfig.wildcard !== 'boolean') return callback(new DomainsError(DomainsError.BAD_FIELD, 'wildcard must be a boolean')); + if ('hyphenatedSubdomains' in dnsConfig && typeof dnsConfig.hyphenatedSubdomains !== 'boolean') return callback(new DomainsError(DomainsError.BAD_FIELD, 'hyphenatedSubdomains must be a boolean')); + var config = { wildcard: !!dnsConfig.wildcard, hyphenatedSubdomains: !!dnsConfig.hyphenatedSubdomains - } + }; // Very basic check if the nameservers can be fetched dns.resolve(zoneName, 'NS', { timeout: 5000 }, function (error, nameservers) { diff --git a/src/dns/namecom.js b/src/dns/namecom.js index afad1720f..7ae8c17bb 100644 --- a/src/dns/namecom.js +++ b/src/dns/namecom.js @@ -208,6 +208,10 @@ function verifyDnsConfig(dnsConfig, fqdn, zoneName, ip, callback) { assert.strictEqual(typeof ip, 'string'); assert.strictEqual(typeof callback, 'function'); + if (typeof dnsConfig.username !== 'string') return callback(new DomainsError(DomainsError.BAD_FIELD, 'username must be a string')); + if (typeof dnsConfig.token !== 'string') return callback(new DomainsError(DomainsError.BAD_FIELD, 'token must be a string')); + if ('hyphenatedSubdomains' in dnsConfig && typeof dnsConfig.hyphenatedSubdomains !== 'boolean') return callback(new DomainsError(DomainsError.BAD_FIELD, 'hyphenatedSubdomains must be a boolean')); + var credentials = { username: dnsConfig.username, token: dnsConfig.token, diff --git a/src/dns/route53.js b/src/dns/route53.js index a878092d7..502fa16a3 100644 --- a/src/dns/route53.js +++ b/src/dns/route53.js @@ -114,7 +114,7 @@ function add(dnsConfig, zoneName, subdomain, type, values, callback) { }; var route53 = new AWS.Route53(getDnsCredentials(dnsConfig)); - route53.changeResourceRecordSets(params, function(error, result) { + route53.changeResourceRecordSets(params, function(error) { if (error && error.code === 'AccessDenied') return callback(new DomainsError(DomainsError.ACCESS_DENIED, error.message)); if (error && error.code === 'InvalidClientTokenId') return callback(new DomainsError(DomainsError.ACCESS_DENIED, error.message)); if (error && error.code === 'PriorRequestNotComplete') return callback(new DomainsError(DomainsError.STILL_BUSY, error.message)); @@ -235,6 +235,7 @@ function verifyDnsConfig(dnsConfig, fqdn, zoneName, ip, callback) { if (!dnsConfig.accessKeyId || typeof dnsConfig.accessKeyId !== 'string') return callback(new DomainsError(DomainsError.BAD_FIELD, 'accessKeyId must be a non-empty string')); if (!dnsConfig.secretAccessKey || typeof dnsConfig.secretAccessKey !== 'string') return callback(new DomainsError(DomainsError.BAD_FIELD, 'secretAccessKey must be a non-empty string')); + if ('hyphenatedSubdomains' in dnsConfig && typeof dnsConfig.hyphenatedSubdomains !== 'boolean') return callback(new DomainsError(DomainsError.BAD_FIELD, 'hyphenatedSubdomains must be a boolean')); var credentials = { accessKeyId: dnsConfig.accessKeyId, diff --git a/src/test/dns-test.js b/src/test/dns-test.js index 43f3e849c..514beb093 100644 --- a/src/test/dns-test.js +++ b/src/test/dns-test.js @@ -506,6 +506,7 @@ describe('dns provider', function () { before(function (done) { DOMAIN_0.provider = 'namecom'; DOMAIN_0.config = { + username: 'fake', token: TOKEN };