dnscontrol/documentation/functions/global/FETCH.md
Jeffrey Cafferata 05be3b83ed
DOCS: Added GitBook code blocks syntax for dnsconfig.js. (#2149)
Co-authored-by: Tom Limoncelli <tlimoncelli@stackoverflow.com>
2023-03-13 16:30:21 -04:00

1.7 KiB

name parameters ts_ignore
FETCH
url
args
true

FETCH is a wrapper for the Fetch API. This allows dynamically setting DNS records based on an external data source, e.g. the API of your cloud provider.

Compared to fetch from Fetch API, FETCH will call PANIC to terminate the execution of the script, and therefore DNSControl, if a network error occurs.

Otherwise the syntax of FETCH is the same as fetch.

FETCH is not enabled by default. Please read the warnings below.

WARNING:

  1. Relying on external sources adds a point of failure. If the external source doesn't work, your script won't either. Please make sure you are aware of the consequences.
  2. Make sure DNSControl only uses verified configuration if you want to use FETCH. For example, an attacker can send Pull Requests to your config repo, and have your CI test malicious configurations and make arbitrary HTTP requests. Therefore, FETCH must be explicitly enabled with flag --allow-fetch on DNSControl invocation.

{% code title="dnsconfig.js" %}

var REG_NONE = NewRegistrar('none');
var DNS_BIND = NewDnsProvider('bind');

D('example.com', REG_NONE, DnsProvider(DNS_BIND), [
  A('@', '1.2.3.4'),
]);

FETCH('https://example.com', {
  // All three options below are optional
  headers: {"X-Authentication": "barfoo"},
  method: "POST",
  body: "Hello World",
}).then(function(r) {
  return r.text();
}).then(function(t) {
  // Example of generating record based on response
  D_EXTEND('example.com', [
    TXT('@', t.slice(0, 100)),
  ]);
});

{% endcode %}