mirror of
https://github.com/certd/certd.git
synced 2026-07-30 01:07:38 +08:00
chore: format
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput } from "@certd/pipeline";
|
||||
import { CertApplyPluginNames, CertInfo, CertReader } from "@certd/plugin-cert";
|
||||
import { createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from "@certd/plugin-lib";
|
||||
import { createCertDomainGetterInputDefine, createRemoteSelectInputDefine } from "@certd/plugin-lib";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { tmpdir } from "node:os";
|
||||
@@ -8,11 +8,11 @@ import { sp } from "@certd/basic";
|
||||
import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js";
|
||||
|
||||
@IsTaskPlugin({
|
||||
name: 'AliyunDeployCertToFC',
|
||||
title: '阿里云-部署至阿里云FC(3.0)',
|
||||
icon: 'svg:icon-aliyun',
|
||||
name: "AliyunDeployCertToFC",
|
||||
title: "阿里云-部署至阿里云FC(3.0)",
|
||||
icon: "svg:icon-aliyun",
|
||||
group: pluginGroups.aliyun.key,
|
||||
desc: '部署证书到阿里云函数计算(FC3.0)',
|
||||
desc: "部署证书到阿里云函数计算(FC3.0)",
|
||||
needPlus: false,
|
||||
default: {
|
||||
strategy: {
|
||||
@@ -22,10 +22,10 @@ import { AliyunAccess } from "../../../plugin-lib/aliyun/access/index.js";
|
||||
})
|
||||
export class AliyunDeployCertToFC extends AbstractTaskPlugin {
|
||||
@TaskInput({
|
||||
title: '域名证书',
|
||||
helper: '请选择证书申请任务输出的域名证书',
|
||||
title: "域名证书",
|
||||
helper: "请选择证书申请任务输出的域名证书",
|
||||
component: {
|
||||
name: 'output-selector',
|
||||
name: "output-selector",
|
||||
from: [...CertApplyPluginNames],
|
||||
},
|
||||
required: true,
|
||||
@@ -36,56 +36,55 @@ export class AliyunDeployCertToFC extends AbstractTaskPlugin {
|
||||
certDomains!: string[];
|
||||
|
||||
@TaskInput({
|
||||
title: 'FC大区',
|
||||
value: 'cn-hangzhou',
|
||||
title: "FC大区",
|
||||
value: "cn-hangzhou",
|
||||
component: {
|
||||
name: 'a-auto-complete',
|
||||
vModel: 'value',
|
||||
name: "a-auto-complete",
|
||||
vModel: "value",
|
||||
options: [
|
||||
{ value: 'cn-qingdao', label: '华北1(青岛)' },
|
||||
{ value: 'cn-beijing', label: '华北2(北京)' },
|
||||
{ value: 'cn-zhangjiakou', label: '华北 3(张家口)' },
|
||||
{ value: 'cn-huhehaote', label: '华北5(呼和浩特)' },
|
||||
{ value: 'cn-hangzhou', label: '华东1(杭州)' },
|
||||
{ value: 'cn-shanghai', label: '华东2(上海)' },
|
||||
{ value: 'cn-shenzhen', label: '华南1(深圳)' },
|
||||
{ value: 'ap-southeast-2', label: '澳大利亚(悉尼)' },
|
||||
{ value: 'eu-central-1', label: '德国(法兰克福)' },
|
||||
{ value: 'ap-southeast-3', label: '马来西亚(吉隆坡)' },
|
||||
{ value: 'us-east-1', label: '美国(弗吉尼亚)' },
|
||||
{ value: 'us-west-1', label: '美国(硅谷)' },
|
||||
{ value: 'ap-northeast-1', label: '日本(东京)' },
|
||||
{ value: 'ap-southeast-7', label: '泰国(曼谷)' },
|
||||
{ value: 'cn-chengdu', label: '西南1(成都)' },
|
||||
{ value: 'ap-southeast-1', label: '新加坡' },
|
||||
{ value: 'ap-south-1', label: '印度(孟买)' },
|
||||
{ value: 'ap-southeast-5', label: '印度尼西亚(雅加达)' },
|
||||
{ value: 'eu-west-1', label: '英国(伦敦)' },
|
||||
{ value: 'cn-hongkong', label: '中国香港' },
|
||||
{ value: "cn-qingdao", label: "华北1(青岛)" },
|
||||
{ value: "cn-beijing", label: "华北2(北京)" },
|
||||
{ value: "cn-zhangjiakou", label: "华北 3(张家口)" },
|
||||
{ value: "cn-huhehaote", label: "华北5(呼和浩特)" },
|
||||
{ value: "cn-hangzhou", label: "华东1(杭州)" },
|
||||
{ value: "cn-shanghai", label: "华东2(上海)" },
|
||||
{ value: "cn-shenzhen", label: "华南1(深圳)" },
|
||||
{ value: "ap-southeast-2", label: "澳大利亚(悉尼)" },
|
||||
{ value: "eu-central-1", label: "德国(法兰克福)" },
|
||||
{ value: "ap-southeast-3", label: "马来西亚(吉隆坡)" },
|
||||
{ value: "us-east-1", label: "美国(弗吉尼亚)" },
|
||||
{ value: "us-west-1", label: "美国(硅谷)" },
|
||||
{ value: "ap-northeast-1", label: "日本(东京)" },
|
||||
{ value: "ap-southeast-7", label: "泰国(曼谷)" },
|
||||
{ value: "cn-chengdu", label: "西南1(成都)" },
|
||||
{ value: "ap-southeast-1", label: "新加坡" },
|
||||
{ value: "ap-south-1", label: "印度(孟买)" },
|
||||
{ value: "ap-southeast-5", label: "印度尼西亚(雅加达)" },
|
||||
{ value: "eu-west-1", label: "英国(伦敦)" },
|
||||
{ value: "cn-hongkong", label: "中国香港" },
|
||||
],
|
||||
},
|
||||
required: true,
|
||||
})
|
||||
regionId!: string;
|
||||
|
||||
|
||||
@TaskInput({
|
||||
title: '阿里云账号id',
|
||||
helper: '阿里云主账号ID,右上角头像下方获取',
|
||||
title: "阿里云账号id",
|
||||
helper: "阿里云主账号ID,右上角头像下方获取",
|
||||
component: {
|
||||
name: 'a-input',
|
||||
vModel:"value"
|
||||
name: "a-input",
|
||||
vModel: "value",
|
||||
},
|
||||
required: true,
|
||||
})
|
||||
accountId!: string;
|
||||
|
||||
@TaskInput({
|
||||
title: 'Access授权',
|
||||
helper: '阿里云授权AccessKeyId、AccessKeySecret',
|
||||
title: "Access授权",
|
||||
helper: "阿里云授权AccessKeyId、AccessKeySecret",
|
||||
component: {
|
||||
name: 'access-selector',
|
||||
type: 'aliyun',
|
||||
name: "access-selector",
|
||||
type: "aliyun",
|
||||
},
|
||||
required: true,
|
||||
})
|
||||
@@ -93,33 +92,33 @@ export class AliyunDeployCertToFC extends AbstractTaskPlugin {
|
||||
|
||||
@TaskInput(
|
||||
createRemoteSelectInputDefine({
|
||||
title: 'FC域名',
|
||||
title: "FC域名",
|
||||
helper: "请选择要部署证书的域名",
|
||||
typeName: 'AliyunDeployCertToFC',
|
||||
typeName: "AliyunDeployCertToFC",
|
||||
action: AliyunDeployCertToFC.prototype.onGetDomainList.name,
|
||||
watches: ['accessId', 'regionId'],
|
||||
watches: ["accessId", "regionId"],
|
||||
})
|
||||
)
|
||||
fcDomains!: string[];
|
||||
|
||||
@TaskInput({
|
||||
title: '域名支持的协议类型',
|
||||
value: '',
|
||||
title: "域名支持的协议类型",
|
||||
value: "",
|
||||
component: {
|
||||
name: 'a-select',
|
||||
vModel:"value",
|
||||
name: "a-select",
|
||||
vModel: "value",
|
||||
options: [
|
||||
{ value: '', label: '保持原样(适用于原来已经开启了HTTPS)' },
|
||||
{ value: 'HTTPS', label: '仅HTTPS' },
|
||||
{ value: 'HTTP,HTTPS', label: 'HTTP与HTTPS同时支持' },
|
||||
{ value: "", label: "保持原样(适用于原来已经开启了HTTPS)" },
|
||||
{ value: "HTTPS", label: "仅HTTPS" },
|
||||
{ value: "HTTP,HTTPS", label: "HTTP与HTTPS同时支持" },
|
||||
],
|
||||
},
|
||||
})
|
||||
protocol!: string;
|
||||
|
||||
@TaskInput({
|
||||
title: '证书名称',
|
||||
helper: '上传后将以此名称作为前缀备注',
|
||||
title: "证书名称",
|
||||
helper: "上传后将以此名称作为前缀备注",
|
||||
})
|
||||
certName!: string;
|
||||
|
||||
@@ -133,17 +132,16 @@ export class AliyunDeployCertToFC extends AbstractTaskPlugin {
|
||||
});
|
||||
}
|
||||
async execute(): Promise<void> {
|
||||
this.logger.info('开始部署证书到阿里云');
|
||||
this.logger.info("开始部署证书到阿里云");
|
||||
const access = await this.getAccess<AliyunAccess>(this.accessId);
|
||||
|
||||
const client = await this.getClient(access);
|
||||
|
||||
const $Util = await import('@alicloud/tea-util');
|
||||
const $OpenApi = await import('@alicloud/openapi-client');
|
||||
const $Util = await import("@alicloud/tea-util");
|
||||
const $OpenApi = await import("@alicloud/openapi-client");
|
||||
|
||||
|
||||
let privateKey = this.cert.key
|
||||
try{
|
||||
let privateKey = this.cert.key;
|
||||
try {
|
||||
// openssl rsa -in private_key.pem -out private_key_pkcs1.pem
|
||||
const tempDir = path.join(tmpdir(), "certd");
|
||||
if (!fs.existsSync(tempDir)) {
|
||||
@@ -151,7 +149,7 @@ export class AliyunDeployCertToFC extends AbstractTaskPlugin {
|
||||
}
|
||||
const keyFileName = this.ctx.utils.id.randomNumber(10);
|
||||
const tempPem = `${tempDir}/${keyFileName}.pem`;
|
||||
const tempPkcs1Pem =`${tempDir}/${keyFileName}_pkcs1.pem`;
|
||||
const tempPkcs1Pem = `${tempDir}/${keyFileName}_pkcs1.pem`;
|
||||
fs.writeFileSync(tempPem, this.cert.key);
|
||||
const oldPfxCmd = `openssl rsa -in ${tempPem} -traditional -out ${tempPkcs1Pem}`;
|
||||
await this.exec(oldPfxCmd);
|
||||
@@ -159,34 +157,31 @@ export class AliyunDeployCertToFC extends AbstractTaskPlugin {
|
||||
privateKey = fileBuffer.toString();
|
||||
fs.unlinkSync(tempPem);
|
||||
fs.unlinkSync(tempPkcs1Pem);
|
||||
}catch (e) {
|
||||
this.logger.warn("私钥转换为PKCS#1格式失败",e);
|
||||
} catch (e) {
|
||||
this.logger.warn("私钥转换为PKCS#1格式失败", e);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
for (const domainName of this.fcDomains) {
|
||||
const params = new $OpenApi.Params({
|
||||
// 接口名称
|
||||
action: 'UpdateCustomDomain',
|
||||
action: "UpdateCustomDomain",
|
||||
// 接口版本
|
||||
version: '2023-03-30',
|
||||
version: "2023-03-30",
|
||||
// 接口协议
|
||||
protocol: 'HTTPS',
|
||||
protocol: "HTTPS",
|
||||
// 接口 HTTP 方法
|
||||
method: 'PUT',
|
||||
authType: 'AK',
|
||||
style: 'FC',
|
||||
method: "PUT",
|
||||
authType: "AK",
|
||||
style: "FC",
|
||||
// 接口 PATH
|
||||
pathname: `/2023-03-30/custom-domains/${domainName}`,
|
||||
// 接口请求体内容格式
|
||||
reqBodyType: 'json',
|
||||
reqBodyType: "json",
|
||||
// 接口响应体内容格式
|
||||
bodyType: 'json',
|
||||
bodyType: "json",
|
||||
});
|
||||
// body params
|
||||
const certName = this.buildCertName(CertReader.getMainDomain(this.cert.crt),this.certName??"")
|
||||
const certName = this.buildCertName(CertReader.getMainDomain(this.cert.crt), this.certName ?? "");
|
||||
|
||||
const body: { [key: string]: any } = {
|
||||
certConfig: {
|
||||
@@ -209,7 +204,7 @@ export class AliyunDeployCertToFC extends AbstractTaskPlugin {
|
||||
}
|
||||
|
||||
async getClient(access: AliyunAccess) {
|
||||
const $OpenApi = await import('@alicloud/openapi-client');
|
||||
const $OpenApi = await import("@alicloud/openapi-client");
|
||||
const config = new $OpenApi.Config({
|
||||
accessKeyId: access.accessKeyId,
|
||||
accessKeySecret: access.accessKeySecret,
|
||||
@@ -221,30 +216,30 @@ export class AliyunDeployCertToFC extends AbstractTaskPlugin {
|
||||
|
||||
async onGetDomainList(data: any) {
|
||||
if (!this.accessId) {
|
||||
throw new Error('请选择Access授权');
|
||||
throw new Error("请选择Access授权");
|
||||
}
|
||||
const access = await this.getAccess<AliyunAccess>(this.accessId);
|
||||
const client = await this.getClient(access);
|
||||
|
||||
const $OpenApi = await import('@alicloud/openapi-client');
|
||||
const $Util = await import('@alicloud/tea-util');
|
||||
const $OpenApi = await import("@alicloud/openapi-client");
|
||||
const $Util = await import("@alicloud/tea-util");
|
||||
const params = new $OpenApi.Params({
|
||||
// 接口名称
|
||||
action: 'ListCustomDomains',
|
||||
action: "ListCustomDomains",
|
||||
// 接口版本
|
||||
version: '2023-03-30',
|
||||
version: "2023-03-30",
|
||||
// 接口协议
|
||||
protocol: 'HTTPS',
|
||||
protocol: "HTTPS",
|
||||
// 接口 HTTP 方法
|
||||
method: 'GET',
|
||||
authType: 'AK',
|
||||
style: 'FC',
|
||||
method: "GET",
|
||||
authType: "AK",
|
||||
style: "FC",
|
||||
// 接口 PATH
|
||||
pathname: `/2023-03-30/custom-domains`,
|
||||
// 接口请求体内容格式
|
||||
reqBodyType: 'json',
|
||||
reqBodyType: "json",
|
||||
// 接口响应体内容格式
|
||||
bodyType: 'json',
|
||||
bodyType: "json",
|
||||
});
|
||||
|
||||
const runtime = new $Util.RuntimeOptions({});
|
||||
@@ -255,7 +250,7 @@ export class AliyunDeployCertToFC extends AbstractTaskPlugin {
|
||||
|
||||
const list = res?.body?.customDomains;
|
||||
if (!list || list.length === 0) {
|
||||
throw new Error('没有找到FC域名,请先创建FC域名');
|
||||
throw new Error("没有找到FC域名,请先创建FC域名");
|
||||
}
|
||||
|
||||
const options = list.map((item: any) => {
|
||||
|
||||
Reference in New Issue
Block a user