import Core from '@alicloud/pop-core' import dayjs from 'dayjs' import { AbstractAliyunPlugin } from '../abstract-aliyun.js' export class UploadCertToAliyun extends AbstractAliyunPlugin { /** * 插件定义 * 名称 * 入参 * 出参 */ static define () { return { name: 'uploadCertToAliyun', label: '上传证书到阿里云', input: { name: { label: '证书名称' }, accessProvider: { label: 'Access提供者', type: [String, Object], desc: 'AccessProviders的key 或 一个包含accessKeyId与accessKeySecret的对象', options: 'accessProviders[type=aliyun]' } }, output: { aliyunCertId: { type: String, desc: '上传成功后的阿里云CertId' } } } } getClient (aliyunProvider) { return new Core({ accessKeyId: aliyunProvider.accessKeyId, accessKeySecret: aliyunProvider.accessKeySecret, endpoint: 'https://cas.aliyuncs.com', apiVersion: '2018-07-13' }) } async execute ({ accessProviders, cert, props, context, logger }) { const { name, accessProvider } = props const certName = name + '-' + dayjs().format('YYYYMMDD-HHmmss') const params = { RegionId: 'cn-hangzhou', Name: certName, Cert: this.format(cert.crt.toString()), Key: this.format(cert.key.toString()) } const requestOption = { method: 'POST' } const provider = super.getAccessProvider(accessProvider, accessProviders) const client = this.getClient(provider) const ret = await client.request('CreateUserCertificate', params, requestOption) this.checkRet(ret) this.logger.info('证书上传成功:aliyunCertId=', ret.CertId) context.aliyunCertId = ret.CertId } }