diff --git a/packages/ui/certd-server/src/plugins/plugin-plus/synology/access.ts b/packages/ui/certd-server/src/plugins/plugin-plus/synology/access.ts index 7992ff91a..0f4398086 100644 --- a/packages/ui/certd-server/src/plugins/plugin-plus/synology/access.ts +++ b/packages/ui/certd-server/src/plugins/plugin-plus/synology/access.ts @@ -124,6 +124,23 @@ export class SynologyAccess extends BaseAccess { }) timeout = 120; + @AccessInput({ + title: "测试", + component: { + name: "api-test", + action: "onTestRequest", + }, + helper: "点击测试接口看是否正常", + }) + testRequest = true; + + async onTestRequest() { + const client = new SynologyClient(this as any, this.ctx.http, this.ctx.logger, this.skipSslVerify); + await client.doLogin(); + await client.getCertList(); + return "ok"; + } + onLoginWithOPTCode(data: { otpCode: string }) { const ctx = this.ctx; const client = new SynologyClient(this as any, ctx.http, ctx.logger, this.skipSslVerify); diff --git a/packages/ui/certd-server/src/plugins/plugin-plus/synology/plugins/index.ts b/packages/ui/certd-server/src/plugins/plugin-plus/synology/plugins/index.ts index 860db409f..a115f1df0 100644 --- a/packages/ui/certd-server/src/plugins/plugin-plus/synology/plugins/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-plus/synology/plugins/index.ts @@ -1 +1,2 @@ export * from "./plugin-deploy-to-panel.js"; +export * from "./plugin-keep-alive.js"; diff --git a/packages/ui/certd-server/src/plugins/plugin-plus/synology/plugins/plugin-deploy-to-panel.ts b/packages/ui/certd-server/src/plugins/plugin-plus/synology/plugins/plugin-deploy-to-panel.ts index 6921aa2ef..3df14e4c0 100644 --- a/packages/ui/certd-server/src/plugins/plugin-plus/synology/plugins/plugin-deploy-to-panel.ts +++ b/packages/ui/certd-server/src/plugins/plugin-plus/synology/plugins/plugin-deploy-to-panel.ts @@ -46,7 +46,7 @@ export class SynologyDeployToPanel extends AbstractPlusTaskPlugin { //授权选择框 @TaskInput({ title: "群晖授权", - helper: "群晖登录授权,请确保账户是管理员用户组", + helper: "群晖登录授权,请确保账户是管理员用户组\n群晖OTP授权有效期只有30天,您还需要添加“群晖-刷新OTP登录有效期”任务做登录有效期保活", component: { name: "access-selector", type: "synology", diff --git a/packages/ui/certd-server/src/plugins/plugin-plus/synology/plugins/plugin-keep-alive.ts b/packages/ui/certd-server/src/plugins/plugin-plus/synology/plugins/plugin-keep-alive.ts new file mode 100644 index 000000000..edb81b549 --- /dev/null +++ b/packages/ui/certd-server/src/plugins/plugin-plus/synology/plugins/plugin-keep-alive.ts @@ -0,0 +1,81 @@ +import { IsTaskPlugin, pluginGroups, RunStrategy, TaskInput, TaskOutput } from "@certd/pipeline"; +import { AbstractPlusTaskPlugin } from "@certd/plugin-plus"; +import dayjs from "dayjs"; +@IsTaskPlugin({ + name: "SynologyKeepAlive", + title: "群晖-刷新OTP登录有效期", + icon: "simple-icons:synology", + group: pluginGroups.panel.key, + desc: "群晖登录状态可能30天失效,需要在失效之前登录一次,刷新有效期,您可以将其放在“部署到群晖面板”任务之后", + showRunStrategy: false, + default: { + strategy: { + runStrategy: RunStrategy.AlwaysRun, + }, + }, + needPlus: true, +}) +export class SynologyKeepAlivePlugin extends AbstractPlusTaskPlugin { + + + @TaskInput({ + title: "群晖授权", + helper: "群晖登录授权,请确保账户是管理员用户组", + component: { + name: "access-selector", + type: "synology", + }, + required: true, + }) + accessId!: string; + + + //授权选择框 + @TaskInput({ + title: "间隔天数", + helper: "多少天刷新一次,建议15天以内", + component: { + name: "number-input", + type: "number", + min: 1, + max: 30, + }, + required: true, + }) + intervalDays!: number; + + @TaskOutput({ + title: "上次刷新时间", + type :"SynologyLastRefreshTime" + }) + lastRefreshTime!: number; + + async onInstance() {} + async execute(): Promise { + this.logger.info("开始刷新群晖登录有效期"); + const now = dayjs() + const status = this.getLastStatus(); + if (status) { + let lastRefreshTime = this.getLastOutput("lastRefreshTime"); + lastRefreshTime = lastRefreshTime || 0; + this.lastRefreshTime = lastRefreshTime; + const lastTime = dayjs(lastRefreshTime); + const diffDays = now.diff(lastTime, "day"); + if (diffDays < this.intervalDays) { + this.logger.info(`距离上次刷新有效期${diffDays.toFixed(0)}天(${this.intervalDays}天),无需刷新`); + this.logger.info(`下一次刷新时间${lastTime.add(this.intervalDays, "day").format("YYYY-MM-DD")}`); + return; + } + } + + // const access: SynologyAccess = await this.getAccess(this.accessId); + // const client = new SynologyClient(access as any, this.ctx.http, this.ctx.logger, access.skipSslVerify); + // await client.doLogin(); + // await client.getCertList(); + this.lastRefreshTime = now.unix(); + this.logger.info("刷新群晖登录有效期成功"); + } + + +} +new SynologyKeepAlivePlugin();