chore: 支持dynadot,会覆盖原有的dns解析,京东云也有问题,没有测试通过,这两个目前都有缺陷

This commit is contained in:
xiaojunnuo
2024-09-25 02:31:45 +08:00
parent f9a3ac2cb1
commit 86e291c5a3
13 changed files with 292 additions and 527 deletions

View File

@@ -3,7 +3,7 @@ import { ColumnCompositionProps, dict, compute } from "@fast-crud/fast-crud";
import * as api from "./api";
// @ts-ignore
import _ from "lodash-es";
import { toRef } from "vue";
import { computed, ref, toRef } from "vue";
import { useReference } from "/@/use/use-refrence";
export function getCommonColumnDefine(crudExpose: any, typeRef: any) {
@@ -48,6 +48,8 @@ export function getCommonColumnDefine(crudExpose: any, typeRef: any) {
});
}
const currentDefine = ref();
return {
type: {
title: "类型",
@@ -76,13 +78,21 @@ export function getCommonColumnDefine(crudExpose: any, typeRef: any) {
return;
}
const define = await api.GetProviderDefine(value);
currentDefine.value = define;
console.log("define", define);
if (!immediate) {
form.access = {};
}
buildDefineFields(define, form);
}
}
},
helper: computed(() => {
const define = currentDefine.value;
if (define == null) {
return "";
}
return define.desc;
})
},
addForm: {
value: typeRef

View File

@@ -1,15 +1,19 @@
# key: ./data/ssl/cert.key
# cert: ./data/ssl/cert.crt
plus:
server:
baseUrl: 'http://127.0.0.1:11007'
#plus:
# server:
# baseUrl: 'https://api.ai.handsfree.work'
# baseUrl: 'http://127.0.0.1:11007'
plus:
server:
baseUrl: 'https://api.ai.handsfree.work'
#typeorm:
# dataSource:
# default:
# database: './data/db1.sqlite'
#account:
# server:
# baseUrl: 'http://127.0.0.1:1017/subject'
account:
server:
baseUrl: 'http://127.0.0.1:1017/subject'
baseUrl: 'https://ai.handsfree.work/subject'

View File

@@ -63,7 +63,6 @@
"md5": "^2.3.0",
"mwtsc": "^1.4.0",
"nanoid": "^4.0.0",
"node-fetch": "^3.3.2",
"nodemailer": "^6.9.3",
"pg": "^8.12.0",
"qiniu": "^7.12.0",

View File

@@ -7,7 +7,7 @@ import { AccessInput, IsAccess } from '@certd/pipeline';
@IsAccess({
name: 'dynadot',
title: 'dynadot授权',
desc: '目前设置dns解析会覆盖已有的解析配置,慎用',
desc: '************\n注意申请证书时会覆盖已有的域名解析配置,慎用\n************\n待优化主要是dynadot的接口一言难尽',
})
export class DynadotAccess {
/**

View File

@@ -59,13 +59,21 @@ export class DynadotDnsProvider extends AbstractDnsProvider {
const { fullRecord, value, type, domain } = options;
this.logger.info('添加域名解析:', fullRecord, value, type, domain);
//先获取域名原始解析记录
//https://api.dynadot.com/api3.xml?key=[API Key]&command=domain_info&domain=domain1.com
const res1 = await this.doRequest('domain_info', {
domain: domain,
});
// this.logger.info(`域名信息:${JSON.stringify(res1)}`);
// "DomainInfoResponse.NameServerSettings":{"Type":"Dynadot DNS","SubDomains":[{"Subhost":"_acme-challenge","RecordType":"TXT","Value":"43XrhFA6pJpE7a-20y7BmC6CsN20TMt5l-Zl-CL_-4I"}],"TTL":"300"}
this.logger.info('原始域名解析记录:', JSON.stringify(res1.DomainInfoResponse?.DomainInfo?.NameServerSettings));
const prefix = fullRecord.replace(`.${domain}`, '');
// 给domain下创建txt类型的dns解析记录fullRecord
const res = await this.doRequest('set_dns2', {
domain: domain,
subdomain0: prefix,
sub_record_type0: 'TXT',
sub_record0 : value,
sub_record0: value,
});
this.logger.info(`添加域名解析成功:fullRecord=${fullRecord},value=${value}`);
this.logger.info(`请求结果:${JSON.stringify(res)}`);

View File

@@ -4,13 +4,17 @@ import { JDCloudAccess } from './access.js';
function promisfy(func: any) {
return (params: any, regionId: string) => {
return new Promise((resolve, reject) => {
func(params, regionId, (err, result) => {
if (err) {
reject(err);
return;
}
resolve(result);
});
try {
func(params, regionId, (err, result) => {
if (err) {
reject(err.error || err);
return;
}
resolve(result);
});
} catch (e) {
reject(e);
}
});
};
}
@@ -57,17 +61,23 @@ export class JDCloudDnsProvider extends AbstractDnsProvider {
const { fullRecord, value, type, domain } = options;
this.logger.info('添加域名解析:', fullRecord, value, type, domain);
const describeDomains = promisfy(this.service.describeDomains);
const describeDomains = promisfy((a, b, c) => {
this.service.describeDomains(a, b, c);
});
const res: any = await describeDomains({ domainName: domain, pageNumber: 1, pageSize: 10 }, this.regionId);
if (res.dataList.length === 0) {
this.logger.info('请求成功:', JSON.stringify(res.result));
const dataList = res.result.dataList;
if (dataList.length === 0) {
throw new Error('账号下找不到域名:' + domain);
}
const domainId = res.dataList[0].id;
const domainId = dataList[0].id;
this.logger.info('domainId:', domainId);
//开始创建解析记录
const createResourceRecord = promisfy(this.service.createResourceRecord);
const createResourceRecord = promisfy((a, b, c) => {
this.service.createResourceRecord(a, b, c);
});
const res2: any = await createResourceRecord(
{
domainId,
@@ -79,8 +89,9 @@ export class JDCloudDnsProvider extends AbstractDnsProvider {
},
this.regionId
);
const recordId = res2.dataList[0].id;
this.logger.info('请求成功:', JSON.stringify(res.result));
const recordList = res2.result.dataList;
const recordId = recordList[0].id;
this.logger.info(`添加域名解析成功:fullRecord=${fullRecord},value=${value}`);
this.logger.info(`请求结果:recordId:${recordId}`);
@@ -96,7 +107,7 @@ export class JDCloudDnsProvider extends AbstractDnsProvider {
async removeRecord(opts: RemoveRecordOptions<any>): Promise<void> {
const { record } = opts;
const deleteResourceRecord = promisfy(this.service.deleteResourceRecord);
const res = await deleteResourceRecord(
const res: any = await deleteResourceRecord(
{
domainId: record.domainId,
resourceRecordId: record.id,