mirror of
https://github.com/certd/certd.git
synced 2026-04-24 04:17:25 +08:00
pref(plugin-volcengine): 新增火山引擎 CDN部署功能
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
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;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user