mirror of https://github.com/certd/certd
perf: 手动上传证书优化,增加到期前报错提醒
parent
2ae193092d
commit
3d42bfd479
|
@ -120,10 +120,9 @@ export class RunHistory {
|
||||||
delete e.stack;
|
delete e.stack;
|
||||||
delete e.cause;
|
delete e.cause;
|
||||||
if (runnable.runnableType === "step") {
|
if (runnable.runnableType === "step") {
|
||||||
this._loggers[runnable.id].error(`[${runnable.runnableType}] [${runnable.title}]<id:${runnable.id}> :`, e, stack, cause);
|
this._loggers[runnable.id].error(stack, cause);
|
||||||
} else {
|
|
||||||
this._loggers[runnable.id].error(`[${runnable.runnableType}] [${runnable.title}]<id:${runnable.id}> :`, e.message);
|
|
||||||
}
|
}
|
||||||
|
this._loggers[runnable.id].error(`[${runnable.runnableType}] [${runnable.title}]<id:${runnable.id}> :`, e.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
finally(runnable: Runnable) {
|
finally(runnable: Runnable) {
|
||||||
|
|
|
@ -6,6 +6,7 @@ import dayjs from "dayjs";
|
||||||
|
|
||||||
export { CertReader };
|
export { CertReader };
|
||||||
export type { CertInfo };
|
export type { CertInfo };
|
||||||
|
|
||||||
@IsTaskPlugin({
|
@IsTaskPlugin({
|
||||||
name: "CertApplyUpload",
|
name: "CertApplyUpload",
|
||||||
icon: "ph:certificate",
|
icon: "ph:certificate",
|
||||||
|
@ -62,6 +63,19 @@ export type { CertInfo };
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
export class CertApplyUploadPlugin extends CertApplyBaseConvertPlugin {
|
export class CertApplyUploadPlugin extends CertApplyBaseConvertPlugin {
|
||||||
|
@TaskInput({
|
||||||
|
title: "过期前提醒",
|
||||||
|
value: 10,
|
||||||
|
component: {
|
||||||
|
name: "a-input-number",
|
||||||
|
vModel: "value",
|
||||||
|
},
|
||||||
|
required: true,
|
||||||
|
order: 100,
|
||||||
|
helper: "到期前多少天提醒",
|
||||||
|
})
|
||||||
|
renewDays!: number;
|
||||||
|
|
||||||
@TaskInput({
|
@TaskInput({
|
||||||
title: "手动上传证书",
|
title: "手动上传证书",
|
||||||
component: {
|
component: {
|
||||||
|
@ -97,6 +111,7 @@ export class CertApplyUploadPlugin extends CertApplyBaseConvertPlugin {
|
||||||
this.userContext = this.ctx.userContext;
|
this.userContext = this.ctx.userContext;
|
||||||
this.lastStatus = this.ctx.lastStatus as Step;
|
this.lastStatus = this.ctx.lastStatus as Step;
|
||||||
}
|
}
|
||||||
|
|
||||||
async onInit(): Promise<void> {}
|
async onInit(): Promise<void> {}
|
||||||
|
|
||||||
async getCertFromStore() {
|
async getCertFromStore() {
|
||||||
|
@ -107,48 +122,54 @@ export class CertApplyUploadPlugin extends CertApplyBaseConvertPlugin {
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
this.logger.warn("读取cert失败:", e);
|
this.logger.warn("读取cert失败:", e);
|
||||||
}
|
}
|
||||||
if (certReader == null) {
|
|
||||||
certReader = new CertReader(this.uploadCert);
|
|
||||||
}
|
|
||||||
if (!certReader.expires || certReader.expires < new Date().getTime()) {
|
|
||||||
throw new Error("证书已过期,停止部署,请重新上传证书");
|
|
||||||
}
|
|
||||||
|
|
||||||
return certReader;
|
return certReader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private checkExpires(certReader: CertReader) {
|
||||||
|
const renewDays = (this.renewDays ?? 10) * 24 * 60 * 60 * 1000;
|
||||||
|
if (certReader.expires) {
|
||||||
|
if (certReader.expires < new Date().getTime()) {
|
||||||
|
throw new Error("证书已过期,停止部署,请尽快上传新证书");
|
||||||
|
}
|
||||||
|
if (certReader.expires < new Date().getTime() + renewDays) {
|
||||||
|
throw new Error("证书即将已过期,停止部署,请尽快上传新证书");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async execute(): Promise<string | void> {
|
async execute(): Promise<string | void> {
|
||||||
let certReader = await this.getCertFromStore();
|
const oldCertReader = await this.getCertFromStore();
|
||||||
const crtMd5 = this.ctx.utils.hash.md5(certReader.cert.crt);
|
if (oldCertReader) {
|
||||||
|
const leftDays = dayjs(oldCertReader.expires).diff(dayjs(), "day");
|
||||||
const leftDays = dayjs(certReader.expires).diff(dayjs(), "day");
|
this.logger.info(`证书过期时间${dayjs(oldCertReader.expires).format("YYYY-MM-DD HH:mm:ss")},剩余${leftDays}天`);
|
||||||
this.logger.info(`证书过期时间${dayjs(certReader.expires).format("YYYY-MM-DD HH:mm:ss")},剩余${leftDays}天`);
|
this.checkExpires(oldCertReader);
|
||||||
|
|
||||||
if (!this.ctx.inputChanged) {
|
if (!this.ctx.inputChanged) {
|
||||||
this.logger.info("输入参数无变化");
|
this.logger.info("输入参数无变化");
|
||||||
const lastCrtMd5 = this.lastStatus?.status?.output?.certMd5;
|
const lastCrtMd5 = this.lastStatus?.status?.output?.certMd5;
|
||||||
this.logger.info("证书MD5", crtMd5);
|
const newCrtMd5 = this.ctx.utils.hash.md5(this.uploadCert.crt);
|
||||||
|
this.logger.info("证书MD5", newCrtMd5);
|
||||||
this.logger.info("上次证书MD5", lastCrtMd5);
|
this.logger.info("上次证书MD5", lastCrtMd5);
|
||||||
if (lastCrtMd5 === crtMd5) {
|
if (lastCrtMd5 === newCrtMd5) {
|
||||||
this.logger.info("证书无变化,跳过");
|
this.logger.info("证书无变化,跳过");
|
||||||
//输出证书MD5
|
//输出证书MD5
|
||||||
this.certMd5 = crtMd5;
|
this.certMd5 = newCrtMd5;
|
||||||
await this.output(certReader, false);
|
await this.output(oldCertReader, false);
|
||||||
return "skip";
|
return "skip";
|
||||||
}
|
}
|
||||||
this.logger.info("证书有变化,重新部署");
|
this.logger.info("证书有变化,重新部署");
|
||||||
} else {
|
} else {
|
||||||
this.logger.info("输入参数有变化,重新部署");
|
this.logger.info("输入参数有变化,重新部署");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
certReader = new CertReader(this.uploadCert);
|
const newCertReader = new CertReader(this.uploadCert);
|
||||||
this.clearLastStatus();
|
this.clearLastStatus();
|
||||||
//输出证书MD5
|
//输出证书MD5
|
||||||
this.certMd5 = this.ctx.utils.hash.md5(certReader.cert.crt);
|
this.certMd5 = this.ctx.utils.hash.md5(newCertReader.cert.crt);
|
||||||
const newLeftDays = dayjs(certReader.expires).diff(dayjs(), "day");
|
const newLeftDays = dayjs(newCertReader.expires).diff(dayjs(), "day");
|
||||||
this.logger.info(`新证书过期时间${dayjs(certReader.expires).format("YYYY-MM-DD HH:mm:ss")},剩余${newLeftDays}天`);
|
this.logger.info(`新证书过期时间${dayjs(newCertReader.expires).format("YYYY-MM-DD HH:mm:ss")},剩余${newLeftDays}天`);
|
||||||
|
this.checkExpires(newCertReader);
|
||||||
await this.output(certReader, true);
|
await this.output(newCertReader, true);
|
||||||
|
|
||||||
//必须output之后执行
|
//必须output之后执行
|
||||||
await this.emitCertApplySuccess();
|
await this.emitCertApplySuccess();
|
||||||
|
|
Loading…
Reference in New Issue