mirror of
https://github.com/certd/certd.git
synced 2026-04-14 20:40:53 +08:00
61 lines
1.6 KiB
TypeScript
61 lines
1.6 KiB
TypeScript
|
|
import { VolcengineOpts } from "./dns-client.js";
|
|||
|
|
import { CertInfo } from "@certd/plugin-cert";
|
|||
|
|
|
|||
|
|
export class VolcengineCdnClient {
|
|||
|
|
opts: VolcengineOpts;
|
|||
|
|
|
|||
|
|
service: any;
|
|||
|
|
|
|||
|
|
constructor(opts: VolcengineOpts) {
|
|||
|
|
this.opts = opts;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
async getCdnClient() {
|
|||
|
|
if (this.service) {
|
|||
|
|
return this.service;
|
|||
|
|
}
|
|||
|
|
const { cdn } = await import("@volcengine/openapi");
|
|||
|
|
const service = new cdn.CdnService();
|
|||
|
|
// 设置ak、sk
|
|||
|
|
service.setAccessKeyId(this.opts.access.accessKeyId);
|
|||
|
|
service.setSecretKey(this.opts.access.secretAccessKey);
|
|||
|
|
|
|||
|
|
this.service = service;
|
|||
|
|
return service;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
async uploadCert(cert: CertInfo, certName: string) {
|
|||
|
|
const service = await this.getCdnClient();
|
|||
|
|
const res = await service.Generic("AddCertificate", {
|
|||
|
|
Source: "volc_cert_center",
|
|||
|
|
CertType: "server_cert",
|
|||
|
|
Certificate: cert.crt,
|
|||
|
|
PrivateKey: cert.key,
|
|||
|
|
EncryType: "inter_cert",
|
|||
|
|
Repeatable: false,
|
|||
|
|
Desc: certName
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
if (res.ResponseMetadata?.Error) {
|
|||
|
|
if (res.ResponseMetadata?.Error?.Code?.includes("Duplicated")) {
|
|||
|
|
// 证书已存在,ID为 cert-16293a8524844a3e8e30ed62f8e5bc94。
|
|||
|
|
const message = res.ResponseMetadata?.Error?.Message
|
|||
|
|
const reg = /ID为 (\S+)。/;
|
|||
|
|
const certId = message.match(reg)?.[1]
|
|||
|
|
if (certId) {
|
|||
|
|
this.opts.logger.info(`证书已存在,ID为 ${certId}`);
|
|||
|
|
return certId;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
throw new Error(JSON.stringify(res.ResponseMetadata?.Error));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
const certId = res.Result.CertId
|
|||
|
|
this.opts.logger.info(`上传证书成功:${certId}`)
|
|||
|
|
return certId;
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|