chore: 新网已支持

pull/543/head
xiaojunnuo 2025-09-24 00:55:31 +08:00
parent 1c15beadc7
commit 48f4298a8d
6 changed files with 93 additions and 77 deletions

View File

@ -207,9 +207,13 @@ export function createAxiosService({ logger }: { logger: ILogger }) {
case 505: case 505:
error.message = "HTTP版本不受支持"; error.message = "HTTP版本不受支持";
break; break;
case 302:
//重定向
return Promise.resolve(error.response);
default: default:
break; break;
} }
logger.error(`请求出错status:${error.response?.status},statusText:${error.response?.statusText},url:${error.config?.url},method:${error.config?.method}`); logger.error(`请求出错status:${error.response?.status},statusText:${error.response?.statusText},url:${error.config?.url},method:${error.config?.method}`);
logger.error("返回数据:", JSON.stringify(error.response?.data)); logger.error("返回数据:", JSON.stringify(error.response?.data));
if (error.response?.data) { if (error.response?.data) {

View File

@ -60,7 +60,7 @@ watch(
}, },
value => { value => {
if (value == null) { if (value == null) {
reset(); resetImageCode();
} }
} }
); );

View File

@ -155,20 +155,15 @@ watch(forgotPasswordType, () => {
}); });
const handleFinish = async (values: any) => { const handleFinish = async (values: any) => {
try { await userStore.forgotPassword(
await userStore.forgotPassword( toRaw({
toRaw({ type: forgotPasswordType.value,
type: forgotPasswordType.value, input: formState.input,
input: formState.input, validateCode: formState.validateCode,
validateCode: formState.validateCode, password: formState.password,
password: formState.password, confirmPassword: formState.confirmPassword,
confirmPassword: formState.confirmPassword, }) as any
}) as any );
);
} finally {
formState.captchaForSms = null;
formState.captchaForEmail = null;
}
}; };
const handleFinishFailed = (errors: any) => { const handleFinishFailed = (errors: any) => {

View File

@ -189,7 +189,6 @@ export default defineComponent({
} finally { } finally {
loading.value = false; loading.value = false;
formState.captcha = null; formState.captcha = null;
formState.smsCaptcha = null;
} }
}; };

View File

@ -8,7 +8,7 @@ import { XinnetClient } from "@certd/plugin-plus";
@IsAccess({ @IsAccess({
name: "xinnet", name: "xinnet",
title: "新网授权", title: "新网授权",
icon: "arcticons:dns-changer-3", icon: "lsicon:badge-new-filled",
desc: "" desc: ""
}) })
export class XinnetAccess extends BaseAccess { export class XinnetAccess extends BaseAccess {
@ -19,7 +19,7 @@ export class XinnetAccess extends BaseAccess {
@AccessInput({ @AccessInput({
title: "用户名", title: "用户名",
component: { component: {
placeholder: "手机号" placeholder: "手机号/用户名"
}, },
required: true, required: true,
encrypt: true encrypt: true
@ -27,13 +27,12 @@ export class XinnetAccess extends BaseAccess {
username = ""; username = "";
@AccessInput({ @AccessInput({
title: "域名登录密码", title: "登录密码",
component: { component: {
name: "a-input-password", name: "a-input-password",
vModel: "value", vModel: "value",
placeholder: "域名密码" placeholder: "登录密码"
}, },
helper: "您可以在此处[重置域名管理密码](https://domain.xinnet.com/#domain/manage/domain_manage_pwd)",
required: true, required: true,
encrypt: true encrypt: true
}) })
@ -62,6 +61,19 @@ export class XinnetAccess extends BaseAccess {
return "ok"; return "ok";
} }
getCacheKey () {
let hashStr = ""
for (const key in this) {
if (Object.prototype.hasOwnProperty.call(this, key)) {
const element = this[key];
hashStr += element;
}
}
const hashCode = this.ctx.utils.hash.sha256(hashStr);
return `xinnet-${hashCode}`;
}
} }
new XinnetAccess(); new XinnetAccess();

View File

@ -3,24 +3,27 @@ import { XinnetAccess } from "./access.js";
import { XinnetClient } from "@certd/plugin-plus"; import { XinnetClient } from "@certd/plugin-plus";
export type XinnetRecord = { export type XinnetRecord = {
id: number; recordId: number;
domainId: number, recordFullName: string;
recordValue: string;
type: string;
serviceCode: string;
dcpCookie: string;
}; };
// 这里通过IsDnsProvider注册一个dnsProvider // 这里通过IsDnsProvider注册一个dnsProvider
@IsDnsProvider({ @IsDnsProvider({
name: 'xinnet', name: "xinnet",
title: '新网', title: "新网",
desc: '新网域名解析', desc: "新网域名解析",
icon: 'arcticons:dns-changer-3', icon: "lsicon:badge-new-filled",
// 这里是对应的 cloudflare的access类型名称 // 这里是对应的 cloudflare的access类型名称
accessType: 'xinnet', accessType: "xinnet",
order:7, order: 7
}) })
export class XinnetProvider extends AbstractDnsProvider<XinnetRecord> { export class XinnetProvider extends AbstractDnsProvider<XinnetRecord> {
access!: XinnetAccess; access!: XinnetAccess;
client!:XinnetClient;
async onInstance() { async onInstance() {
//一些初始化的操作 //一些初始化的操作
// 也可以通过ctx成员变量传递context // 也可以通过ctx成员变量传递context
@ -37,37 +40,41 @@ export class XinnetProvider extends AbstractDnsProvider<XinnetRecord> {
* type: 'TXT', * type: 'TXT',
* domain: 'example.com' * domain: 'example.com'
*/ */
// const { fullRecord,hostRecord, value, type, domain } = options; const { fullRecord, hostRecord, value, type, domain } = options;
// this.logger.info('添加域名解析:', fullRecord, value, type, domain); this.logger.info("添加域名解析:", fullRecord, value, type, domain);
// const client = new XinnetClient({ const client = new XinnetClient({
// logger: this.logger, logger: this.logger,
// access: { access: this.access,
// domain: "", http: this.http
// password: this.access.password });
// },
// http: this.http
// });
const res = await client.getDomainList({
searchKey: domain
});
if (!res.list || res.list.length == 0) {
throw new Error("域名不存在");
}
const serviceCode = res.list[0].serviceCode;
// const domainId = await this.client.getDomainId(domain); const dcpCookie = await client.getDcpCookie({
// this.logger.info('获取domainId成功:', domainId); serviceCode
// });
// const res = await this.client.createRecord({
// domain: domain,
// domainId: domainId,
// type: 'TXT',
// host: hostRecord,
// data: value,
// ttl: 300,
// })
// return {
// id: res.id,
// domainId: domainId,
// };
return 1 as any const recordRes = await client.addDomainDnsRecord({
recordName: hostRecord,
type: type,
recordValue: value
}, {
dcpCookie,
serviceCode
});
return {
...recordRes,
serviceCode,
dcpCookie
};
} }
@ -76,27 +83,26 @@ export class XinnetProvider extends AbstractDnsProvider<XinnetRecord> {
* @param options * @param options
*/ */
async removeRecord(options: RemoveRecordOptions<XinnetRecord>): Promise<void> { async removeRecord(options: RemoveRecordOptions<XinnetRecord>): Promise<void> {
// const { fullRecord, value } = options.recordReq; const client = new XinnetClient({
// const record = options.recordRes; logger: this.logger,
// this.logger.info('删除域名解析:', fullRecord, value); access: this.access,
// if (!record) { http: this.http
// this.logger.info('record为空不执行删除'); });
// return;
// } const recordRes = options.recordRes;
// //这里调用删除txt dns解析记录接口 let dcpCookie = recordRes.dcpCookie;
// /** if (!dcpCookie) {
// * 请求示例 dcpCookie = await client.getDcpCookie({
// * DELETE /api/record?id=85371689655342080 HTTP/1.1 serviceCode: recordRes.serviceCode
// * Authorization: Basic {token} });
// * 请求参数 }
// */
// const {id,domainId} = record await client.deleteDomainDnsRecord(recordRes, {
// await this.client.deleteRecord({ dcpCookie,
// id, serviceCode: recordRes.serviceCode
// domainId });
// })
// this.logger.info(`删除域名解析成功:fullRecord=${fullRecord},id=${id}`);
// }
} }
} }