mirror of https://github.com/certd/certd
101 lines
2.7 KiB
JavaScript
101 lines
2.7 KiB
JavaScript
import { AbstractDnsProvider, util } from '@certd/api'
|
|
import _ from 'lodash-es'
|
|
const request = util.request
|
|
export class DnspodDnsProvider extends AbstractDnsProvider {
|
|
static define () {
|
|
return {
|
|
name: 'dnspod',
|
|
label: 'dnspod',
|
|
desc: '腾讯云的域名解析接口已迁移到dnspod',
|
|
input: {
|
|
id: {
|
|
type: String,
|
|
attrs: {
|
|
placeholder: 'dnspod接口账户id',
|
|
rules: [{ required: true, message: '该项必填' }]
|
|
}
|
|
},
|
|
token: {
|
|
type: String,
|
|
label: 'token',
|
|
attrs: {
|
|
placeholder: '开放接口token',
|
|
rules: [{ required: true, message: '该项必填' }]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
constructor (dnsProviderConfig) {
|
|
super()
|
|
if (!dnsProviderConfig.id || !dnsProviderConfig.token) {
|
|
throw new Error('请正确配置dnspod的 id 和 token')
|
|
}
|
|
this.loginToken = dnsProviderConfig.id + ',' + dnsProviderConfig.token
|
|
}
|
|
|
|
async doRequest (options) {
|
|
const config = {
|
|
method: 'post',
|
|
formData: {
|
|
login_token: this.loginToken,
|
|
format: 'json',
|
|
lang: 'cn',
|
|
error_on_empty: 'no'
|
|
},
|
|
timeout: 5000
|
|
}
|
|
_.merge(config, options)
|
|
|
|
const ret = await request(config)
|
|
if (!ret || !ret.status || ret.status.code !== '1') {
|
|
throw new Error('请求失败:' + ret.status.message + ',api=' + config.url)
|
|
}
|
|
return ret
|
|
}
|
|
|
|
async getDomainList () {
|
|
const ret = await this.doRequest({
|
|
url: 'https://dnsapi.cn/Domain.List'
|
|
})
|
|
this.logger.debug('dnspod 域名列表:', ret.domains)
|
|
return ret.domains
|
|
}
|
|
|
|
async createRecord ({ fullRecord, type, value }) {
|
|
this.logger.info('添加域名解析:', fullRecord, value)
|
|
const domainItem = await this.matchDomain(fullRecord, 'name')
|
|
const domain = domainItem.name
|
|
const rr = fullRecord.replace('.' + domain, '')
|
|
|
|
const ret = await this.doRequest({
|
|
url: 'https://dnsapi.cn/Record.Create',
|
|
formData: {
|
|
domain,
|
|
sub_domain: rr,
|
|
record_type: type,
|
|
record_line: '默认',
|
|
value: value,
|
|
mx: 1
|
|
}
|
|
})
|
|
this.logger.info('添加域名解析成功:', fullRecord, value, JSON.stringify(ret.record))
|
|
return ret.record
|
|
}
|
|
|
|
async removeRecord ({ fullRecord, type, value, record }) {
|
|
const domain = await this.matchDomain(fullRecord, 'name')
|
|
|
|
const ret = await this.doRequest({
|
|
url: 'https://dnsapi.cn/Record.Remove',
|
|
formData: {
|
|
domain,
|
|
record_id: record.id
|
|
}
|
|
})
|
|
this.logger.info('删除域名解析成功:', fullRecord, value)
|
|
return ret.RecordId
|
|
}
|
|
}
|