mirror of https://github.com/certd/certd
88 lines
1.9 KiB
JavaScript
88 lines
1.9 KiB
JavaScript
/**
|
|
* Setup testing
|
|
*/
|
|
|
|
const url = require('url');
|
|
const net = require('net');
|
|
const fs = require('fs');
|
|
const dns = require('dns').promises;
|
|
const chai = require('chai');
|
|
const chaiAsPromised = require('chai-as-promised');
|
|
const axios = require('./../src/axios');
|
|
|
|
|
|
/**
|
|
* Add promise support to Chai
|
|
*/
|
|
|
|
chai.use(chaiAsPromised);
|
|
|
|
|
|
/**
|
|
* HTTP challenge port
|
|
*/
|
|
|
|
if (process.env.ACME_HTTP_PORT) {
|
|
axios.defaults.acmeSettings.httpChallengePort = process.env.ACME_HTTP_PORT;
|
|
}
|
|
|
|
|
|
/**
|
|
* External account binding
|
|
*/
|
|
|
|
if (('ACME_CAP_EAB_ENABLED' in process.env) && (process.env.ACME_CAP_EAB_ENABLED === '1')) {
|
|
const pebbleConfig = JSON.parse(fs.readFileSync('/etc/pebble/pebble.json').toString());
|
|
const [kid, hmacKey] = Object.entries(pebbleConfig.pebble.externalAccountMACKeys)[0];
|
|
|
|
process.env.ACME_EAB_KID = kid;
|
|
process.env.ACME_EAB_HMAC_KEY = hmacKey;
|
|
}
|
|
|
|
|
|
/**
|
|
* Custom DNS resolver
|
|
*/
|
|
|
|
if (process.env.ACME_DNS_RESOLVER) {
|
|
dns.setServers([process.env.ACME_DNS_RESOLVER]);
|
|
|
|
|
|
/**
|
|
* Axios DNS resolver
|
|
*/
|
|
|
|
axios.interceptors.request.use(async (config) => {
|
|
const urlObj = url.parse(config.url);
|
|
|
|
/* Bypass */
|
|
if (axios.defaults.acmeSettings.bypassCustomDnsResolver === true) {
|
|
return config;
|
|
}
|
|
|
|
/* Skip IP addresses and localhost */
|
|
if (net.isIP(urlObj.hostname) || (urlObj.hostname === 'localhost')) {
|
|
return config;
|
|
}
|
|
|
|
/* Lookup hostname */
|
|
const result = await dns.resolve4(urlObj.hostname);
|
|
|
|
if (!result.length) {
|
|
throw new Error(`Unable to lookup address: ${urlObj.hostname}`);
|
|
}
|
|
|
|
/* Place hostname in header */
|
|
config.headers = config.headers || {};
|
|
config.headers.Host = urlObj.hostname;
|
|
|
|
/* Inject address into URL */
|
|
delete urlObj.host;
|
|
urlObj.hostname = result[0];
|
|
config.url = url.format(urlObj);
|
|
|
|
/* Done */
|
|
return config;
|
|
});
|
|
}
|