mirror of
https://github.com/certd/certd.git
synced 2025-11-25 09:10:11 +08:00
98 lines
2.7 KiB
JavaScript
98 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: {
|
||
accessProvider: {
|
||
label: '授权',
|
||
type: [String, Object],
|
||
desc: '需要dnspod类型的授权',
|
||
component: {
|
||
name: 'access-provider-selector',
|
||
filter: 'dnspod'
|
||
},
|
||
required: true
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
constructor (args) {
|
||
super(args)
|
||
const { props } = args
|
||
const accessProvider = this.getAccessProvider(props.accessProvider)
|
||
this.loginToken = accessProvider.id + ',' + accessProvider.token
|
||
}
|
||
|
||
async doRequest (options, successCodes = []) {
|
||
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) {
|
||
const code = ret.status.code
|
||
if (code !== '1' || !successCodes.includes(code)) {
|
||
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
|
||
}
|
||
}, ['104'])// 104错误码为记录已存在,无需再次添加
|
||
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
|
||
}
|
||
}
|