cloudflare: validate response fields

This commit is contained in:
Girish Ramakrishnan
2024-01-12 14:52:24 +01:00
parent cef0b6d0d8
commit 33a97d0e50

View File

@@ -77,9 +77,16 @@ async function getZoneByName(domainConfig, zoneName) {
const [error, response] = await safe(createRequest('GET', `${CLOUDFLARE_ENDPOINT}/zones?name=${zoneName}&status=active`, domainConfig));
if (error) throw new BoxError(BoxError.NETWORK_ERROR, error.message);
if (response.statusCode !== 200 || response.body.success !== true) throw translateRequestError(response);
if (!response.body.result.length) throw new BoxError(BoxError.NOT_FOUND, util.format('%s %j', response.statusCode, response.body));
if (!response.body.result || !response.body.result.length) throw new BoxError(BoxError.NOT_FOUND, `${response.statusCode} ${JSON.stringify(response.body)}`);
return response.body.result[0];
// check 'id' and 'name_servers' exist in the response
const zone = response.body.result[0];
const zoneId = safe.query(zone, 'id');
if (typeof zoneId !== 'string') throw new BoxError(BoxError.EXTERNAL_ERROR, `No zone id in response: ${response.statusCode} ${JSON.stringify(response.body)}`);
const name_servers = safe.query(zone, 'name_servers');
if (!Array.isArray(name_servers)) throw new BoxError(BoxError.EXTERNAL_ERROR, `name_servers is not an array: ${response.statusCode} ${JSON.stringify(response.body)}`);
return zone;
}
// gets records filtered by zone, type and fqdn
@@ -110,8 +117,8 @@ async function upsert(domainObject, location, type, values) {
debug('upsert: %s for zone %s of type %s with values %j', fqdn, zoneName, type, values);
const result = await getZoneByName(domainConfig, zoneName);
const zoneId = result.id;
const zone = await getZoneByName(domainConfig, zoneName);
const zoneId = zone.id;
const records = await getDnsRecords(domainConfig, zoneId, fqdn, type);
@@ -223,8 +230,8 @@ async function wait(domainObject, subdomain, type, value, options) {
debug('wait: %s for zone %s of type %s', fqdn, zoneName, type);
const result = await getZoneByName(domainConfig, zoneName);
const zoneId = result.id;
const zone = await getZoneByName(domainConfig, zoneName);
const zoneId = zone.id;
const dnsRecords = await getDnsRecords(domainConfig, zoneId, fqdn, type);
if (dnsRecords.length === 0) throw new BoxError(BoxError.NOT_FOUND, 'Domain not found');