40 lines
1.1 KiB
TypeScript
40 lines
1.1 KiB
TypeScript
|
import * as plugins from '../smartacme.plugins.js';
|
||
|
import type { IChallengeHandler } from './IChallengeHandler.js';
|
||
|
|
||
|
/**
|
||
|
* DNS-01 challenge handler using CloudflareAccount and Smartdns.
|
||
|
*/
|
||
|
export class Dns01Handler implements IChallengeHandler<plugins.tsclass.network.IDnsChallenge> {
|
||
|
private cf: any;
|
||
|
private smartdns: plugins.smartdnsClient.Smartdns;
|
||
|
|
||
|
constructor(
|
||
|
cloudflareAccount: any,
|
||
|
smartdnsInstance?: plugins.smartdnsClient.Smartdns,
|
||
|
) {
|
||
|
this.cf = cloudflareAccount;
|
||
|
this.smartdns = smartdnsInstance ?? new plugins.smartdnsClient.Smartdns({});
|
||
|
}
|
||
|
|
||
|
public getSupportedTypes(): string[] {
|
||
|
return ['dns-01'];
|
||
|
}
|
||
|
|
||
|
public async prepare(ch: plugins.tsclass.network.IDnsChallenge): Promise<void> {
|
||
|
// set DNS TXT record
|
||
|
await this.cf.convenience.acmeSetDnsChallenge(ch);
|
||
|
// wait for DNS propagation
|
||
|
await this.smartdns.checkUntilAvailable(
|
||
|
ch.hostName,
|
||
|
'TXT',
|
||
|
ch.challenge,
|
||
|
100,
|
||
|
5000,
|
||
|
);
|
||
|
}
|
||
|
|
||
|
public async cleanup(ch: plugins.tsclass.network.IDnsChallenge): Promise<void> {
|
||
|
// remove DNS TXT record
|
||
|
await this.cf.convenience.acmeRemoveDnsChallenge(ch);
|
||
|
}
|
||
|
}
|