diff --git a/packages/ui/certd-server/src/plugins/plugin-51dns/client.ts b/packages/ui/certd-server/src/plugins/plugin-51dns/client.ts
index 4f094135..39cd86a5 100644
--- a/packages/ui/certd-server/src/plugins/plugin-51dns/client.ts
+++ b/packages/ui/certd-server/src/plugins/plugin-51dns/client.ts
@@ -1,5 +1,5 @@
-import { createAxiosService, HttpClient, ILogger } from "@certd/basic";
-import { Dns51Access } from "./access.js";
+import {createAxiosService, HttpClient, ILogger} from "@certd/basic";
+import {Dns51Access} from "./access.js";
export class Dns51Client {
logger: ILogger;
@@ -8,6 +8,7 @@ export class Dns51Client {
cryptoJs: any;
isLogined = false;
_token = "";
+ _cookie = "";
constructor(options: {
logger: ILogger;
@@ -56,17 +57,27 @@ export class Dns51Client {
url: "https://www.51dns.com/login.html",
method: "get",
withCredentials: true,
- logRes:false,
- returnResponse:true
+ logRes: false,
+ returnResponse: true,
+ headers: {
+ // 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36',
+ 'Origin': 'https://www.51dns.com',
+ 'Referer': 'https://www.51dns.com',
+ },
});
+ let setCookie = res.headers['set-cookie']
+ let cookie = setCookie.map((item: any) => {
+ return item.split(';')[0]
+ }).join(';')
+
//提取 var csrfToken = "ieOfM21eDd9nWJv3OZtMJF6ogDsnPKQHJ17dlMck";
const _token = res.data.match(/var csrfToken = "(.*?)"/)[1];
this.logger.info("_token:", _token);
this._token = _token;
var obj = {
- "email_or_phone": this.aes("18603046467"),
- "password": this.aes("JiDian1Zu"),
+ "email_or_phone": this.aes(this.access.username),
+ "password": this.aes(this.access.password),
"type": this.aes("account"),
"redirectTo": "https://www.51dns.com/domain",
"_token": _token
@@ -78,20 +89,50 @@ export class Dns51Client {
...obj
},
withCredentials: true,
+ logRes: false,
+ returnResponse: true,
headers: {
- "Content-Type": "application/x-www-form-urlencoded"
- },
- logRes:false,
- returnResponse:true,
+ 'Origin': 'https://www.51dns.com',
+ 'Referer': 'https://www.51dns.com',
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ 'Cookie': cookie,
+ 'X-Requested-With': 'XMLHttpRequest'
+ }
});
+ this.logger.info("return headers:", JSON.stringify(res2.headers))
+ if (res2.data.code == 0) {
+ setCookie = res2.headers['set-cookie']
+ this._cookie = setCookie.map((item: any) => {
+ return item.split(';')[0]
+ }).join(';')
+ this.logger.info("cookie:", this._cookie)
+ this.logger.info("登录成功")
+ } else {
+ throw new Error("登录失败:", res2.data)
+ }
- // 提取 182****43522
- // console.log(res2.headers)
- // console.log(res2.data)
- const username = res2.data.match(/(.*?)<\/span>/)[1];
+ const res3 = await this.http.request({
+ url: 'https://www.51dns.com/domain',
+ method: 'get',
+ withCredentials: true,
+ logRes: false,
+ returnResponse: true,
+ headers: {
+ // 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.6261.95 Safari/537.36',
+ 'Origin': 'https://www.51dns.com',
+ 'Referer': 'https://www.51dns.com/login.html',
+ 'Cookie': this._cookie,
+ }
+ })
+
+ const success2 = res3.data.includes('DNS解析')
+
+ if (!success2) {
+ throw new Error("检查登录失败")
+ }
+ this.logger.info("检查登录成功")
- this.logger.info("登录成功:username:", username);
this.isLogined = true;
}
@@ -102,63 +143,58 @@ export class Dns51Client {
url: `https://www.51dns.com/domain?domain=${domain}&status=`,
method: "get",
withCredentials: true,
- logRes:false,
- returnResponse:true
+ logRes: false,
+ returnResponse: true,
+ headers: this.getRequestHeaders()
});
// 提取 certd.top
- const regex = new RegExp(``, "g");
- const matched = res.data.match(regex);
- if (!matched || matched.length === 0) {
+ const regExp = new RegExp(`]*>${domain}<\\/a>`, "i");
+ const matched = res.data.match(regExp);
+ if (!matched || matched.length < 1) {
throw new Error(`域名${domain}不存在`);
}
- return matched[1];
-
+ const domainId = matched[1];
+ this.logger.info(`域名${domain}的id为${domainId}`)
+ return parseInt(domainId);
}
- async createRecord(param: { domain: string, data: any; domainId: void; host: string; ttl: number; type: string }) {
- const { domain, data, host, type } = param;
+ private getRequestHeaders() {
+ return {
+ 'Origin': 'https://www.51dns.com',
+ 'Referer': 'https://www.51dns.com',
+ 'Cookie': this._cookie
+ };
+ }
+
+ async createRecord(param: { domain: string, data: any; domainId: number; host: string; ttl: number; type: string }) {
+ const {domain, data, host, type} = param;
const domainId = await this.getDomainId(domain);
const url = "https://www.51dns.com/domain/storenNewRecord";
const req = {
_token: this._token,
- domain_id: parseInt(domainId),
+ domain_id: domainId,
record: host,
type: type,
value: data,
ttl: 300,
+ mx:"",
view_id: 0
};
+ this.logger.info("req:", JSON.stringify(req))
const res = await this.http.request({
url,
method: "post",
data: req,
withCredentials: true,
headers: {
- "Content-Type": "application/x-www-form-urlencoded"
+ ...this.getRequestHeaders(),
+ 'Content-Type': 'application/x-www-form-urlencoded'
}
});
- /*
- {
- "status": 200,
- "msg": "\u6b63\u786e",
- "data": {
- "record": "1111",
- "type": "TXT",
- "value": "2222",
- "mx": "-",
- "ttl": "300",
- "view_id": "0",
- "id": 601019779,
- "domain_id": "193341603",
- "trecord": "1111",
- "view_name": "\u9ed8\u8ba4"
- }
-}
- */
- if(res.status !== 200){
+ if (res.status !== 200) {
throw new Error(`创建域名解析失败:${res.msg}`);
}
const id = res.data.id;
@@ -170,13 +206,13 @@ export class Dns51Client {
}
async deleteRecord(param: { domainId: number; id: number }) {
- const url ="https://www.51dns.com/domain/operateRecord"
- /*
- type: delete
+ const url = "https://www.51dns.com/domain/operateRecord"
+ /*
+ type: delete
ids[0]: 601019779
domain_id: 193341603
_token: ieOfM21eDd9nWJv3OZtMJF6ogDsnPKQHJ17dlMck
- */
+ */
const body = {
type: "delete",
ids: [param.id],
@@ -189,10 +225,11 @@ _token: ieOfM21eDd9nWJv3OZtMJF6ogDsnPKQHJ17dlMck
data: body,
withCredentials: true,
headers: {
- "Content-Type": "application/x-www-form-urlencoded"
+ ...this.getRequestHeaders(),
+ 'Content-Type': 'application/x-www-form-urlencoded'
}
});
- if(res.status !== 200){
+ if (res.status !== 200) {
throw new Error(`删除域名解析失败:${res.msg}`);
}
diff --git a/packages/ui/certd-server/src/plugins/plugin-51dns/dns-provider.ts b/packages/ui/certd-server/src/plugins/plugin-51dns/dns-provider.ts
index 033524fa..32d57231 100644
--- a/packages/ui/certd-server/src/plugins/plugin-51dns/dns-provider.ts
+++ b/packages/ui/certd-server/src/plugins/plugin-51dns/dns-provider.ts
@@ -6,7 +6,6 @@ import { Dns51Client } from "./client.js";
export type Dns51Record = {
id: number;
domainId: number,
- client: Dns51Client,
};
// 这里通过IsDnsProvider注册一个dnsProvider
@@ -21,10 +20,16 @@ export type Dns51Record = {
export class Dns51DnsProvider extends AbstractDnsProvider {
// 通过Autowire传递context
access!: Dns51Access;
+
+ client!:Dns51Client;
async onInstance() {
//一些初始化的操作
// 也可以通过ctx成员变量传递context, 与Autowire效果一样
this.access = this.ctx.access as Dns51Access;
+ this.client = new Dns51Client({
+ logger: this.logger,
+ access: this.access,
+ });
}
/**
@@ -41,15 +46,12 @@ export class Dns51DnsProvider extends AbstractDnsProvider {
this.logger.info('添加域名解析:', fullRecord, value, type, domain);
- const dns51Client = new Dns51Client({
- logger: this.logger,
- access: this.access,
- });
- const domainId = await dns51Client.getDomainId(domain);
+
+ const domainId = await this.client.getDomainId(domain);
this.logger.info('获取domainId成功:', domainId);
- const res = await dns51Client.createRecord({
+ const res = await this.client.createRecord({
domain: domain,
domainId: domainId,
type: 'TXT',
@@ -60,7 +62,6 @@ export class Dns51DnsProvider extends AbstractDnsProvider {
return {
id: res.id,
domainId: domainId,
- client: dns51Client,
};
}
@@ -84,8 +85,8 @@ export class Dns51DnsProvider extends AbstractDnsProvider {
* Authorization: Basic {token}
* 请求参数
*/
- const { client,id,domainId} = record
- await client.deleteRecord({
+ const {id,domainId} = record
+ await this.client.deleteRecord({
id,
domainId
})