mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-01-17 04:51:11 +08:00
44 lines
1.6 KiB
Markdown
44 lines
1.6 KiB
Markdown
---
|
|
name: FETCH
|
|
parameters:
|
|
- url
|
|
- args
|
|
ts_ignore: true
|
|
# Make sure to update fetch.d.ts if changing the docs below!
|
|
---
|
|
|
|
`FETCH` is a wrapper for the [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/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](PANIC.md) 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.
|
|
|
|
```javascript
|
|
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)),
|
|
]);
|
|
});
|
|
```
|