mirror of https://github.com/certd/certd
Merge branch 'refs/heads/v2' into v2-dev
commit
7ad5bcffb5
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
## 1.本地调试运行
|
## 1.本地调试运行
|
||||||
|
|
||||||
安装依赖包:
|
### 克隆代码
|
||||||
```shell
|
```shell
|
||||||
|
|
||||||
# 克隆代码
|
# 克隆代码
|
||||||
|
@ -11,22 +11,38 @@ git clone https://github.com/certd/certd
|
||||||
|
|
||||||
#进入项目目录
|
#进入项目目录
|
||||||
cd certd
|
cd certd
|
||||||
|
```
|
||||||
|
|
||||||
|
### 修改pnpm-workspace.yaml文件
|
||||||
|
重要:否则无法正确加载专业版的access和plugin
|
||||||
|
```yaml
|
||||||
|
# pnpm-workspace.yaml
|
||||||
|
packages:
|
||||||
|
- 'packages/**' # <--------------注释掉这一行,PR时不要提交此修改
|
||||||
|
- 'packages/ui/**'
|
||||||
|
```
|
||||||
|
|
||||||
|
### 安装依赖和初始化:
|
||||||
|
```shell
|
||||||
|
# 安装pnpm,如果提示npm命令不存在,就需要先安装nodejs
|
||||||
|
npm install -g pnpm@8.15.7 --registry=https://registry.npmmirror.com
|
||||||
|
|
||||||
|
# 使用国内镜像源,如果有代理,就不需要
|
||||||
|
pnpm config set registry https://registry.npmmirror.com
|
||||||
# 安装依赖
|
# 安装依赖
|
||||||
npm install -g pnpm@8.15.7
|
|
||||||
pnpm install
|
pnpm install
|
||||||
|
|
||||||
# 初始化构建
|
# 初始化构建
|
||||||
npm run init
|
npm run init
|
||||||
```
|
```
|
||||||
|
|
||||||
启动 server:
|
### 启动 server:
|
||||||
```shell
|
```shell
|
||||||
cd packages/ui/certd-server
|
cd packages/ui/certd-server
|
||||||
npm run dev
|
npm run dev
|
||||||
```
|
```
|
||||||
|
|
||||||
启动 client:
|
### 启动 client:
|
||||||
```shell
|
```shell
|
||||||
cd packages/ui/certd-client
|
cd packages/ui/certd-client
|
||||||
npm run dev
|
npm run dev
|
||||||
|
@ -48,7 +64,7 @@ npm run dev
|
||||||
这样用户就可以在`certd`后台中创建这种授权凭证了
|
这样用户就可以在`certd`后台中创建这种授权凭证了
|
||||||
|
|
||||||
### 3. dns-provider
|
### 3. dns-provider
|
||||||
如果域名是这个平台进行解析的,那么你需要实现dns-provider
|
如果域名是这个平台进行解析的,那么你需要实现dns-provider,(申请证书需要)
|
||||||
参考`plugin-cloudflare/dns-provider.ts` 修改为你要做的平台的`dns-provider`
|
参考`plugin-cloudflare/dns-provider.ts` 修改为你要做的平台的`dns-provider`
|
||||||
|
|
||||||
### 4. plugin-deploy
|
### 4. plugin-deploy
|
||||||
|
@ -66,7 +82,7 @@ export * from './plugins/plugin-deploy-to-xx'
|
||||||
在`./src/plugins/index.ts`中增加`import`
|
在`./src/plugins/index.ts`中增加`import`
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
export * from "./plugin-cloudflare"
|
export * from "./plugin-cloudflare.js"
|
||||||
```
|
```
|
||||||
|
|
||||||
## 重启服务进行调试
|
## 重启服务进行调试
|
||||||
|
|
|
@ -10,3 +10,4 @@ export * from './plugin-west/index.js';
|
||||||
export * from './plugin-doge/index.js';
|
export * from './plugin-doge/index.js';
|
||||||
export * from './plugin-qiniu/index.js';
|
export * from './plugin-qiniu/index.js';
|
||||||
export * from './plugin-jdcloud/index.js';
|
export * from './plugin-jdcloud/index.js';
|
||||||
|
export * from './plugin-woai/index.js';
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
import { AccessInput, BaseAccess, IsAccess } from '@certd/pipeline';
|
||||||
|
|
||||||
|
@IsAccess({
|
||||||
|
name: 'woai',
|
||||||
|
title: '我爱云授权',
|
||||||
|
desc: '我爱云CDN',
|
||||||
|
})
|
||||||
|
export class WoaiAccess extends BaseAccess {
|
||||||
|
@AccessInput({
|
||||||
|
title: '账号',
|
||||||
|
component: {
|
||||||
|
placeholder: '我爱云的账号',
|
||||||
|
},
|
||||||
|
required: true,
|
||||||
|
})
|
||||||
|
username = '';
|
||||||
|
@AccessInput({
|
||||||
|
title: '密码',
|
||||||
|
component: {
|
||||||
|
placeholder: '我爱云的密码',
|
||||||
|
},
|
||||||
|
required: true,
|
||||||
|
encrypt: true,
|
||||||
|
})
|
||||||
|
password = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
new WoaiAccess();
|
|
@ -0,0 +1,2 @@
|
||||||
|
export * from './plugins/index.js';
|
||||||
|
export * from './access.js';
|
|
@ -0,0 +1 @@
|
||||||
|
export * from './plugin-deploy-to-cdn.js';
|
|
@ -0,0 +1,94 @@
|
||||||
|
import {AbstractTaskPlugin, HttpClient, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput} from '@certd/pipeline';
|
||||||
|
import {CertInfo} from '@certd/plugin-cert';
|
||||||
|
import {WoaiAccess} from '../access.js';
|
||||||
|
|
||||||
|
@IsTaskPlugin({
|
||||||
|
name: 'woaiCloud',
|
||||||
|
title: '部署证书到我爱云 CDN',
|
||||||
|
desc: '部署证书到我爱云CDN',
|
||||||
|
icon: 'clarity:plugin-line',
|
||||||
|
group: pluginGroups.other.key,
|
||||||
|
default: {
|
||||||
|
strategy: {
|
||||||
|
runStrategy: RunStrategy.SkipWhenSucceed,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
export class WoaiCdnPlugin extends AbstractTaskPlugin {
|
||||||
|
@TaskInput({
|
||||||
|
title: '证书ID',
|
||||||
|
helper: '请填写 <a href="https://console.edge.51vs.club/site/certificate" target="_blank">证书列表</a> 中的证书的ID',
|
||||||
|
component: {name: 'a-input'},
|
||||||
|
required: true,
|
||||||
|
})
|
||||||
|
certId!: string;
|
||||||
|
@TaskInput({
|
||||||
|
title: '域名证书',
|
||||||
|
helper: '请选择前置任务输出的域名证书',
|
||||||
|
component: {
|
||||||
|
name: 'pi-output-selector',
|
||||||
|
from: ['CertApply', 'CertApplyLego'],
|
||||||
|
},
|
||||||
|
required: true,
|
||||||
|
})
|
||||||
|
cert!: CertInfo;
|
||||||
|
@TaskInput({
|
||||||
|
title: 'Access授权',
|
||||||
|
helper: '我爱云的用户、密码授权',
|
||||||
|
component: {
|
||||||
|
name: 'pi-access-selector',
|
||||||
|
type: 'woai',
|
||||||
|
},
|
||||||
|
required: true,
|
||||||
|
})
|
||||||
|
accessId!: string;
|
||||||
|
http!: HttpClient;
|
||||||
|
private readonly baseApi = 'https://console.edeg.51vs.club';
|
||||||
|
|
||||||
|
async onInstance() {
|
||||||
|
this.http = this.ctx.http;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async doRequestApi(url: string, data: any = null, method = 'post', token: string | null = null) {
|
||||||
|
const headers = {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
...(token ? {'Token': token} : {}),
|
||||||
|
};
|
||||||
|
const res = await this.http.request<any, any>({
|
||||||
|
url,
|
||||||
|
method,
|
||||||
|
data,
|
||||||
|
headers,
|
||||||
|
});
|
||||||
|
if (res.code !== 200) {
|
||||||
|
throw new Error(`${JSON.stringify(res.message)}`);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
async execute(): Promise<void> {
|
||||||
|
const {certId, cert, accessId} = this;
|
||||||
|
const access = (await this.accessService.getById(accessId)) as WoaiAccess;
|
||||||
|
// 登录获取token
|
||||||
|
const loginResponse = await this.doRequestApi(`${this.baseApi}/account/login`, {
|
||||||
|
username: access.username,
|
||||||
|
password: access.password,
|
||||||
|
});
|
||||||
|
const token = loginResponse.data.token;
|
||||||
|
this.logger.info('登录成功,获取到Token:', token);
|
||||||
|
// 更新证书
|
||||||
|
const editCertResponse = await this.doRequestApi(
|
||||||
|
`${this.baseApi}/certificate/edit`,
|
||||||
|
{
|
||||||
|
id: certId,
|
||||||
|
cert: cert.crt,
|
||||||
|
key: cert.key,
|
||||||
|
},
|
||||||
|
'post',
|
||||||
|
token
|
||||||
|
);
|
||||||
|
this.logger.info('证书更新成功:', editCertResponse.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new WoaiCdnPlugin();
|
|
@ -1,5 +1,5 @@
|
||||||
packages:
|
packages:
|
||||||
# all packages in subdirs of packages/ and components/
|
- 'packages/**' # <--------------开发插件请注释掉这一行,PR时本修改不要提交
|
||||||
- 'packages/**'
|
- 'packages/ui/**'
|
||||||
# exclude packages that are inside test directories
|
|
||||||
- '!**/test/**'
|
- '!**/test/**'
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue