diff --git a/packages/core/pipeline/package.json b/packages/core/pipeline/package.json index 3ac1c8adb..250450ebd 100644 --- a/packages/core/pipeline/package.json +++ b/packages/core/pipeline/package.json @@ -23,7 +23,7 @@ "qs": "^6.11.2" }, "devDependencies": { - "@certd/acme-client": "^1.20.9", + "@certd/acme-client": "workspace:^1.20.9", "@rollup/plugin-commonjs": "^23.0.4", "@rollup/plugin-json": "^6.0.0", "@rollup/plugin-node-resolve": "^15.0.1", diff --git a/packages/core/pipeline/src/access/registry.ts b/packages/core/pipeline/src/access/registry.ts index 19e4fc7f7..65b14fa2e 100644 --- a/packages/core/pipeline/src/access/registry.ts +++ b/packages/core/pipeline/src/access/registry.ts @@ -1,4 +1,4 @@ import { Registry } from "../registry"; // @ts-ignore -export const accessRegistry = new Registry(); +export const accessRegistry = new Registry("access"); diff --git a/packages/core/pipeline/src/core/file-store.ts b/packages/core/pipeline/src/core/file-store.ts index ea7eb5fac..5006fdc02 100644 --- a/packages/core/pipeline/src/core/file-store.ts +++ b/packages/core/pipeline/src/core/file-store.ts @@ -1,7 +1,8 @@ -import { fileUtils } from "../utils/util.file"; +import { fileUtils } from "../utils"; import dayjs from "dayjs"; import path from "path"; import fs from "fs"; +import { logger } from "../utils"; export type FileStoreOptions = { rootDir?: string; @@ -30,6 +31,7 @@ export class FileStore { const localPath = this.buildFilePath(filename); fs.writeFileSync(localPath, file); + logger.info(`写入文件:${localPath}`); return localPath; } diff --git a/packages/core/pipeline/src/plugin/api.ts b/packages/core/pipeline/src/plugin/api.ts index f16031744..41a66af6d 100644 --- a/packages/core/pipeline/src/plugin/api.ts +++ b/packages/core/pipeline/src/plugin/api.ts @@ -6,6 +6,7 @@ import { IAccessService } from "../access"; import { IEmailService } from "../service"; import { IContext } from "../core"; import { AxiosInstance } from "axios"; +import { logger } from "../utils"; export enum ContextScope { global, @@ -89,6 +90,7 @@ export abstract class AbstractTaskPlugin implements ITaskPlugin { } saveFile(filename: string, file: Buffer) { const filePath = this.ctx.fileStore.writeFile(filename, file); + logger.info(`saveFile:${filePath}`); this._result.files!.push({ id: this.randomFileId(), filename, diff --git a/packages/core/pipeline/src/plugin/registry.ts b/packages/core/pipeline/src/plugin/registry.ts index 20101d872..753a14b3b 100644 --- a/packages/core/pipeline/src/plugin/registry.ts +++ b/packages/core/pipeline/src/plugin/registry.ts @@ -1,4 +1,4 @@ import { Registry } from "../registry"; import { AbstractTaskPlugin } from "./api"; -export const pluginRegistry = new Registry(); +export const pluginRegistry = new Registry("plugin"); diff --git a/packages/core/pipeline/src/registry/registry.ts b/packages/core/pipeline/src/registry/registry.ts index 8e2e2ed18..135e00176 100644 --- a/packages/core/pipeline/src/registry/registry.ts +++ b/packages/core/pipeline/src/registry/registry.ts @@ -1,3 +1,5 @@ +import { logger } from "../utils"; + export type Registrable = { name: string; title: string; @@ -9,15 +11,21 @@ export type RegistryItem = { target: T; }; export class Registry { + type = ""; storage: { [key: string]: RegistryItem; } = {}; + constructor(type: string) { + this.type = type; + } + register(key: string, value: RegistryItem) { if (!key || value == null) { return; } this.storage[key] = value; + logger.info(`注册插件:${this.type}:${key}`); } get(name: string): RegistryItem { diff --git a/packages/core/pipeline/src/utils/index.ts b/packages/core/pipeline/src/utils/index.ts index b17e682c3..fcf07887b 100644 --- a/packages/core/pipeline/src/utils/index.ts +++ b/packages/core/pipeline/src/utils/index.ts @@ -1,6 +1,7 @@ import sleep from "./util.sleep"; import { request } from "./util.request"; export * from "./util.log"; +export * from "./util.file"; export const utils = { sleep, http: request, diff --git a/packages/plugins/plugin-cert/package.json b/packages/plugins/plugin-cert/package.json index 3a945cf89..c5bb0a9b1 100644 --- a/packages/plugins/plugin-cert/package.json +++ b/packages/plugins/plugin-cert/package.json @@ -17,8 +17,8 @@ "preview": "vite preview" }, "dependencies": { - "@certd/acme-client": "^1.20.9", - "@certd/pipeline": "^1.20.9", + "@certd/acme-client": "workspace:^1.20.9", + "@certd/pipeline": "workspace:^1.20.9", "jszip": "^3.10.1", "node-forge": "^0.10.0" }, diff --git a/packages/plugins/plugin-cert/src/dns-provider/registry.ts b/packages/plugins/plugin-cert/src/dns-provider/registry.ts index d4df27450..c5c9c1ea2 100644 --- a/packages/plugins/plugin-cert/src/dns-provider/registry.ts +++ b/packages/plugins/plugin-cert/src/dns-provider/registry.ts @@ -1,3 +1,3 @@ import { Registry } from "@certd/pipeline"; -export const dnsProviderRegistry = new Registry(); +export const dnsProviderRegistry = new Registry("dnsProvider"); diff --git a/packages/plugins/plugin-cert/src/plugin/cert-plugin/acme.ts b/packages/plugins/plugin-cert/src/plugin/cert-plugin/acme.ts index 1f11ff558..3024d82b2 100644 --- a/packages/plugins/plugin-cert/src/plugin/cert-plugin/acme.ts +++ b/packages/plugins/plugin-cert/src/plugin/cert-plugin/acme.ts @@ -3,7 +3,7 @@ import * as acme from "@certd/acme-client"; import _ from "lodash"; import { Challenge } from "@certd/acme-client/types/rfc8555"; import { Logger } from "log4js"; -import { IContext } from "@certd/pipeline/src/core/context"; +import { IContext } from "@certd/pipeline"; import { IDnsProvider } from "../../dns-provider"; export type CertInfo = { crt: string; diff --git a/packages/plugins/plugin-cert/src/plugin/cert-plugin/index.ts b/packages/plugins/plugin-cert/src/plugin/cert-plugin/index.ts index ca62f4f50..7b21fbba3 100644 --- a/packages/plugins/plugin-cert/src/plugin/cert-plugin/index.ts +++ b/packages/plugins/plugin-cert/src/plugin/cert-plugin/index.ts @@ -6,6 +6,7 @@ import { Logger } from "log4js"; import { DnsProviderDefine, dnsProviderRegistry } from "../../dns-provider"; import { CertReader } from "./cert-reader"; import JSZip from "jszip"; +import { fileUtils } from "@certd/pipeline"; export { CertReader }; export type { CertInfo }; @@ -133,11 +134,11 @@ export class CertApplyPlugin extends AbstractTaskPlugin { async execute(): Promise { const oldCert = await this.condition(); if (oldCert != null) { - return await this.output(oldCert.toCertInfo()); + return await this.output(oldCert); } const cert = await this.doCertApply(); if (cert != null) { - await this.output(cert.toCertInfo()); + await this.output(cert); //清空后续任务的状态,让后续任务能够重新执行 this.clearLastStatus(); } else { @@ -145,17 +146,24 @@ export class CertApplyPlugin extends AbstractTaskPlugin { } } - async output(cert: CertInfo) { + async output(certReader: CertReader) { + const cert: CertInfo = certReader.toCertInfo(); this.cert = cert; - await this.zipCert(cert); + // this.logger.info(JSON.stringify(certReader.detail)); + const applyTime = dayjs(certReader.detail.validity.notBefore).format("YYYYMMDDHHmmss"); + await this.zipCert(cert, applyTime); } - async zipCert(cert: CertInfo) { + async zipCert(cert: CertInfo, applyTime: string) { const zip = new JSZip(); zip.file("cert.crt", cert.crt); zip.file("cert.key", cert.key); + const domain_name = this.domains[0].replace(".", "_").replace("*", "_"); + const filename = `cert_${domain_name}_${applyTime}.zip`; const content = await zip.generateAsync({ type: "nodebuffer" }); - this.saveFile("cert.zip", content); + this.saveFile(filename, content); + this.logger.info(`getFileRootDir:${fileUtils.getFileRootDir("11")}`); + this.logger.info(`保存文件:${filename}`); } /** diff --git a/packages/plugins/plugin-util/package.json b/packages/plugins/plugin-util/package.json index 410dc0409..484978136 100644 --- a/packages/plugins/plugin-util/package.json +++ b/packages/plugins/plugin-util/package.json @@ -21,7 +21,7 @@ "shelljs": "^0.8.5" }, "devDependencies": { - "@certd/pipeline": "^1.20.9", + "@certd/pipeline": "workspace:^1.20.9", "@rollup/plugin-commonjs": "^23.0.4", "@rollup/plugin-json": "^6.0.0", "@rollup/plugin-node-resolve": "^15.0.1", diff --git a/packages/ui/certd-client/package.json b/packages/ui/certd-client/package.json index ccd67576f..d51496328 100644 --- a/packages/ui/certd-client/package.json +++ b/packages/ui/certd-client/package.json @@ -26,10 +26,10 @@ "@ant-design/icons-vue": "^6.1.0", "@aws-sdk/client-s3": "^3.383.0", "@aws-sdk/s3-request-presigner": "^3.383.0", - "@fast-crud/fast-crud": "^1.20.1", - "@fast-crud/fast-extends": "^1.20.1", - "@fast-crud/ui-antdv4": "^1.20.1", - "@fast-crud/ui-interface": "^1.20.1", + "@fast-crud/fast-crud": "^1.20.2", + "@fast-crud/fast-extends": "^1.20.2", + "@fast-crud/ui-antdv4": "^1.20.2", + "@fast-crud/ui-interface": "^1.20.2", "@iconify/vue": "^4.1.1", "@soerenmartius/vue3-clipboard": "^0.1.2", "ant-design-vue": "^4.1.2", diff --git a/packages/ui/certd-client/src/plugin/fast-crud/index.tsx b/packages/ui/certd-client/src/plugin/fast-crud/index.tsx index f5f2bdd8e..1c2d9a1da 100644 --- a/packages/ui/certd-client/src/plugin/fast-crud/index.tsx +++ b/packages/ui/certd-client/src/plugin/fast-crud/index.tsx @@ -58,6 +58,7 @@ function install(app: App, options: any = {}) { buttons: { view: { type: "link", text: null, icon: "ion:eye-outline" }, edit: { type: "link", text: null, icon: "ion:create-outline" }, + copy: {show:true,type: "link", text: null, icon: "ion:copy-outline"}, remove: { type: "link", style: { color: "red" }, text: null, icon: "ion:trash-outline" } }, dropdown: { diff --git a/packages/ui/certd-server/package.json b/packages/ui/certd-server/package.json index a89f1fbcd..a9cb04e40 100644 --- a/packages/ui/certd-server/package.json +++ b/packages/ui/certd-server/package.json @@ -21,16 +21,10 @@ "mig": "typeorm migration:create -n name" }, "dependencies": { - "@certd/acme-client": "^1.20.9", - "@certd/pipeline": "^1.20.9", - "@certd/plugin-aliyun": "^1.20.9", - "@certd/plugin-all": "^1.20.9", - "@certd/plugin-center": "^1.20.9", - "@certd/plugin-cert": "^1.20.9", - "@certd/plugin-host": "^1.20.9", - "@certd/plugin-huawei": "^1.20.9", - "@certd/plugin-tencent": "^1.20.9", - "@certd/plugin-util": "^1.20.9", + "@certd/acme-client": "workspace:^1.20.9", + "@certd/pipeline": "workspace:^1.20.9", + "@certd/plugin-cert": "workspace:^1.20.9", + "@certd/plugin-util": "workspace:^1.20.9", "@alicloud/cs20151215": "^3.0.3", "@alicloud/openapi-client": "^0.4.0", "@alicloud/pop-core": "^1.7.10", diff --git a/packages/ui/certd-server/src/basic/crud-controller.ts b/packages/ui/certd-server/src/basic/crud-controller.ts index 9403841e8..c4de2a79a 100644 --- a/packages/ui/certd-server/src/basic/crud-controller.ts +++ b/packages/ui/certd-server/src/basic/crud-controller.ts @@ -32,6 +32,7 @@ export abstract class CrudController extends BaseController { @Body(ALL) bean ) { + delete bean.id; const id = await this.getService().add(bean); return this.ok(id); } diff --git a/packages/ui/certd-server/src/modules/pipeline/controller/history-controller.ts b/packages/ui/certd-server/src/modules/pipeline/controller/history-controller.ts index 8adeb016b..a19e6b40e 100644 --- a/packages/ui/certd-server/src/modules/pipeline/controller/history-controller.ts +++ b/packages/ui/certd-server/src/modules/pipeline/controller/history-controller.ts @@ -19,6 +19,7 @@ import { PipelineService } from '../service/pipeline-service'; import { CommonException } from '../../../basic/exception/common-exception'; import { PermissionException } from '../../../basic/exception/permission-exception'; import * as fs from 'fs'; +import { logger } from '../../../utils/logger'; /** * 证书 @@ -151,7 +152,7 @@ export class HistoryController extends CrudController { // const filename = file.filename; // 要下载的文件的完整路径 const path = file.path; - + logger.info(`download:${path}`); // 以流的形式下载文件 this.ctx.attachment(path); this.ctx.set('Content-Type', 'application/octet-stream');