mirror of https://github.com/certd/certd
107 lines
2.9 KiB
JavaScript
107 lines
2.9 KiB
JavaScript
import { AbstractAliyunPlugin } from '../../aliyun/abstract-aliyun.js'
|
||
import Core from '@alicloud/pop-core'
|
||
import dayjs from 'dayjs'
|
||
|
||
const define = {
|
||
name: 'deployCertToAliyunCDN',
|
||
label: '部署到阿里云CDN',
|
||
input: {
|
||
domainName: {
|
||
label: 'cdn加速域名',
|
||
component: {
|
||
placeholder: 'cdn加速域名',
|
||
rules: [{ required: true, message: '该项必填' }]
|
||
}
|
||
},
|
||
certName: {
|
||
label: '证书名称',
|
||
component: {
|
||
placeholder: '上传后将以此名称作为前缀'
|
||
}
|
||
},
|
||
from: {
|
||
value: 'upload',
|
||
label: '证书来源',
|
||
component: {
|
||
placeholder: '证书来源',
|
||
required: true,
|
||
name: 'a-select',
|
||
options: [
|
||
{ value: 'upload', label: '直接上传' },
|
||
{ value: 'cas', label: '从证书库', title: '需要uploadCertToAliyun作为前置任务' }
|
||
]
|
||
},
|
||
desc: '如果选择cas类型,则需要以《上传证书到阿里云》作为前置任务'
|
||
|
||
},
|
||
// serverCertificateStatus: {
|
||
// label: '启用https',
|
||
// options: [
|
||
// { value: 'on', label: '开启HTTPS,并更新证书' },
|
||
// { value: 'auto', label: '若HTTPS开启则更新,未开启不更新' }
|
||
// ],
|
||
// required:true
|
||
// },
|
||
accessProvider: {
|
||
label: 'Access提供者',
|
||
type: [String, Object],
|
||
desc: 'AccessProviders的key 或 一个包含accessKeyId与accessKeySecret的对象',
|
||
component: {
|
||
name: 'provider-selector',
|
||
filter: 'aliyun'
|
||
},
|
||
required: true
|
||
}
|
||
},
|
||
output: {
|
||
|
||
}
|
||
}
|
||
|
||
export class DeployCertToAliyunCDN extends AbstractAliyunPlugin {
|
||
static define () {
|
||
return define
|
||
}
|
||
|
||
async execute ({ cert, props, context }) {
|
||
const accessProvider = this.getAccessProvider(props.accessProvider)
|
||
const client = this.getClient(accessProvider)
|
||
const params = this.buildParams(props, context, cert)
|
||
await this.doRequest(client, params)
|
||
}
|
||
|
||
getClient (aliyunProvider) {
|
||
return new Core({
|
||
accessKeyId: aliyunProvider.accessKeyId,
|
||
accessKeySecret: aliyunProvider.accessKeySecret,
|
||
endpoint: 'https://cdn.aliyuncs.com',
|
||
apiVersion: '2018-05-10'
|
||
})
|
||
}
|
||
|
||
buildParams (args, context, cert) {
|
||
const { certName, from, domainName } = args
|
||
const CertName = certName + '-' + dayjs().format('YYYYMMDDHHmmss')
|
||
|
||
const params = {
|
||
RegionId: 'cn-hangzhou',
|
||
DomainName: domainName,
|
||
ServerCertificateStatus: 'on',
|
||
CertName: CertName,
|
||
CertType: from,
|
||
ServerCertificate: cert.crt,
|
||
PrivateKey: cert.key
|
||
}
|
||
return params
|
||
}
|
||
|
||
async doRequest (client, params) {
|
||
const requestOption = {
|
||
method: 'POST'
|
||
}
|
||
const ret = await client.request('SetDomainServerCertificate', params, requestOption)
|
||
this.checkRet(ret)
|
||
this.logger.info('设置cdn证书成功:', ret.RequestId)
|
||
}
|
||
}
|