cloudflare: add config for default value of proxied

This commit is contained in:
Girish Ramakrishnan
2023-02-11 08:40:52 +01:00
parent 3bdc5731ea
commit f9ec2bc06a
2 changed files with 16 additions and 6 deletions

View File

@@ -16,6 +16,7 @@ const assert = require('assert'),
debug = require('debug')('box:dns/cloudflare'),
dig = require('../dig.js'),
dns = require('../dns.js'),
ipaddr = require('ipaddr.js'),
safe = require('safetydance'),
superagent = require('superagent'),
util = require('util'),
@@ -134,7 +135,13 @@ async function upsert(domainObject, location, type, values) {
};
if (i >= records.length) { // create a new record
debug(`upsert: Adding new record fqdn: ${fqdn}, zoneName: ${zoneName} proxied: false`);
// cloudflare will error if proxied is set for wrong record type or IP
if (type === 'A' || type === 'AAAA' || type === 'CNAME') {
const isUnicast = ipaddr.parse(value).range() === 'unicast';
data.proxied = isUnicast ? !!domainConfig.defaultProxyStatus : false; // only set at install time
}
debug(`upsert: Adding new record fqdn: ${fqdn}, zoneName: ${zoneName} proxied: ${data.proxied}`);
const [error, response] = await safe(createRequest('POST', `${CLOUDFLARE_ENDPOINT}/zones/${zoneId}/dns_records`, domainConfig)
.send(data));
@@ -243,15 +250,18 @@ async function verifyDomainConfig(domainObject) {
if (typeof domainConfig.email !== 'string') throw new BoxError(BoxError.BAD_FIELD, 'email must be a non-empty string');
}
if (typeof domainConfig.defaultProxyStatus !== 'boolean') throw new BoxError(BoxError.BAD_FIELD, 'defaultProxied must be a boolean');
const ip = '127.0.0.1';
const credentials = {
const sanitizedConfig = {
token: domainConfig.token,
tokenType: domainConfig.tokenType,
email: domainConfig.email || null
email: domainConfig.email || null,
defaultProxyStatus: domainConfig.defaultProxyStatus
};
if (process.env.BOX_ENV === 'test') return credentials; // this shouldn't be here
if (process.env.BOX_ENV === 'test') return sanitizedConfig; // this shouldn't be here
const [error, nameservers] = await safe(dig.resolve(zoneName, 'NS', { timeout: 5000 }));
if (error && error.code === 'ENOTFOUND') throw new BoxError(BoxError.BAD_FIELD, 'Unable to resolve nameservers for this domain');
@@ -272,5 +282,5 @@ async function verifyDomainConfig(domainObject) {
await del(domainObject, location, 'A', [ ip ]);
debug('verifyDomainConfig: Test A record removed again');
return credentials;
return sanitizedConfig;
}