mirror of
https://github.com/usual2970/certimate.git
synced 2025-06-20 03:09:54 +00:00
refactor(ui): clean code
This commit is contained in:
parent
c3e7590f53
commit
252da5d7e1
@ -6,6 +6,7 @@ import (
|
|||||||
"crypto/x509"
|
"crypto/x509"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
@ -34,9 +35,9 @@ func (n *monitorNode) Process(ctx context.Context) error {
|
|||||||
|
|
||||||
nodeCfg := n.node.GetConfigForMonitor()
|
nodeCfg := n.node.GetConfigForMonitor()
|
||||||
|
|
||||||
targetAddr := fmt.Sprintf("%s:%d", nodeCfg.Host, nodeCfg.Port)
|
targetAddr := net.JoinHostPort(nodeCfg.Host, fmt.Sprintf("%d", nodeCfg.Port))
|
||||||
if nodeCfg.Port == 0 {
|
if nodeCfg.Port == 0 {
|
||||||
targetAddr = fmt.Sprintf("%s:443", nodeCfg.Host)
|
targetAddr = net.JoinHostPort(nodeCfg.Host, "443")
|
||||||
}
|
}
|
||||||
|
|
||||||
targetDomain := nodeCfg.Domain
|
targetDomain := nodeCfg.Domain
|
||||||
|
@ -28,7 +28,7 @@ import ACMEDns01ProviderSelect from "@/components/provider/ACMEDns01ProviderSele
|
|||||||
import CAProviderSelect from "@/components/provider/CAProviderSelect";
|
import CAProviderSelect from "@/components/provider/CAProviderSelect";
|
||||||
import Show from "@/components/Show";
|
import Show from "@/components/Show";
|
||||||
import { ACCESS_USAGES, ACME_DNS01_PROVIDERS, accessProvidersMap, acmeDns01ProvidersMap, caProvidersMap } from "@/domain/provider";
|
import { ACCESS_USAGES, ACME_DNS01_PROVIDERS, accessProvidersMap, acmeDns01ProvidersMap, caProvidersMap } from "@/domain/provider";
|
||||||
import { type WorkflowNodeConfigForApply } from "@/domain/workflow";
|
import { type WorkflowNodeConfigForApply, defaultNodeConfigForApply } from "@/domain/workflow";
|
||||||
import { useAntdForm, useAntdFormName, useZustandShallowSelector } from "@/hooks";
|
import { useAntdForm, useAntdFormName, useZustandShallowSelector } from "@/hooks";
|
||||||
import { useAccessesStore } from "@/stores/access";
|
import { useAccessesStore } from "@/stores/access";
|
||||||
import { useContactEmailsStore } from "@/stores/contact";
|
import { useContactEmailsStore } from "@/stores/contact";
|
||||||
@ -59,11 +59,7 @@ export type ApplyNodeConfigFormInstance = {
|
|||||||
const MULTIPLE_INPUT_SEPARATOR = ";";
|
const MULTIPLE_INPUT_SEPARATOR = ";";
|
||||||
|
|
||||||
const initFormModel = (): ApplyNodeConfigFormFieldValues => {
|
const initFormModel = (): ApplyNodeConfigFormFieldValues => {
|
||||||
return {
|
return defaultNodeConfigForApply();
|
||||||
challengeType: "dns-01",
|
|
||||||
keyAlgorithm: "RSA2048",
|
|
||||||
skipBeforeExpiryDays: 30,
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const ApplyNodeConfigForm = forwardRef<ApplyNodeConfigFormInstance, ApplyNodeConfigFormProps>(
|
const ApplyNodeConfigForm = forwardRef<ApplyNodeConfigFormInstance, ApplyNodeConfigFormProps>(
|
||||||
|
@ -4,7 +4,7 @@ import { Form, type FormInstance } from "antd";
|
|||||||
import { createSchemaFieldRule } from "antd-zod";
|
import { createSchemaFieldRule } from "antd-zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import { type Expr, type WorkflowNodeConfigForCondition } from "@/domain/workflow";
|
import { type Expr, type WorkflowNodeConfigForCondition, defaultNodeConfigForCondition } from "@/domain/workflow";
|
||||||
import { useAntdForm } from "@/hooks";
|
import { useAntdForm } from "@/hooks";
|
||||||
|
|
||||||
import ConditionNodeConfigFormExpressionEditor, { type ConditionNodeConfigFormExpressionEditorInstance } from "./ConditionNodeConfigFormExpressionEditor";
|
import ConditionNodeConfigFormExpressionEditor, { type ConditionNodeConfigFormExpressionEditorInstance } from "./ConditionNodeConfigFormExpressionEditor";
|
||||||
@ -29,7 +29,7 @@ export type ConditionNodeConfigFormInstance = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const initFormModel = (): ConditionNodeConfigFormFieldValues => {
|
const initFormModel = (): ConditionNodeConfigFormFieldValues => {
|
||||||
return {};
|
return defaultNodeConfigForCondition();
|
||||||
};
|
};
|
||||||
|
|
||||||
const ConditionNodeConfigForm = forwardRef<ConditionNodeConfigFormInstance, ConditionNodeConfigFormProps>(
|
const ConditionNodeConfigForm = forwardRef<ConditionNodeConfigFormInstance, ConditionNodeConfigFormProps>(
|
||||||
|
@ -11,7 +11,7 @@ import DeploymentProviderPicker from "@/components/provider/DeploymentProviderPi
|
|||||||
import DeploymentProviderSelect from "@/components/provider/DeploymentProviderSelect.tsx";
|
import DeploymentProviderSelect from "@/components/provider/DeploymentProviderSelect.tsx";
|
||||||
import Show from "@/components/Show";
|
import Show from "@/components/Show";
|
||||||
import { ACCESS_USAGES, DEPLOYMENT_PROVIDERS, accessProvidersMap, deploymentProvidersMap } from "@/domain/provider";
|
import { ACCESS_USAGES, DEPLOYMENT_PROVIDERS, accessProvidersMap, deploymentProvidersMap } from "@/domain/provider";
|
||||||
import { type WorkflowNodeConfigForDeploy, WorkflowNodeType } from "@/domain/workflow";
|
import { type WorkflowNodeConfigForDeploy, WorkflowNodeType, defaultNodeConfigForDeploy } from "@/domain/workflow";
|
||||||
import { useAntdForm, useAntdFormName, useZustandShallowSelector } from "@/hooks";
|
import { useAntdForm, useAntdFormName, useZustandShallowSelector } from "@/hooks";
|
||||||
import { useWorkflowStore } from "@/stores/workflow";
|
import { useWorkflowStore } from "@/stores/workflow";
|
||||||
|
|
||||||
@ -117,9 +117,7 @@ export type DeployNodeConfigFormInstance = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const initFormModel = (): DeployNodeConfigFormFieldValues => {
|
const initFormModel = (): DeployNodeConfigFormFieldValues => {
|
||||||
return {
|
return defaultNodeConfigForDeploy();
|
||||||
skipOnLastSucceeded: true,
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const DeployNodeConfigForm = forwardRef<DeployNodeConfigFormInstance, DeployNodeConfigFormProps>(
|
const DeployNodeConfigForm = forwardRef<DeployNodeConfigFormInstance, DeployNodeConfigFormProps>(
|
||||||
|
@ -4,7 +4,7 @@ import { Alert, Form, type FormInstance, Input, InputNumber } from "antd";
|
|||||||
import { createSchemaFieldRule } from "antd-zod";
|
import { createSchemaFieldRule } from "antd-zod";
|
||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import { type WorkflowNodeConfigForMonitor } from "@/domain/workflow";
|
import { type WorkflowNodeConfigForMonitor, defaultNodeConfigForMonitor } from "@/domain/workflow";
|
||||||
import { useAntdForm } from "@/hooks";
|
import { useAntdForm } from "@/hooks";
|
||||||
import { validDomainName, validIPv4Address, validIPv6Address, validPortNumber } from "@/utils/validators";
|
import { validDomainName, validIPv4Address, validIPv6Address, validPortNumber } from "@/utils/validators";
|
||||||
|
|
||||||
@ -25,11 +25,7 @@ export type MonitorNodeConfigFormInstance = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const initFormModel = (): MonitorNodeConfigFormFieldValues => {
|
const initFormModel = (): MonitorNodeConfigFormFieldValues => {
|
||||||
return {
|
return defaultNodeConfigForMonitor();
|
||||||
host: "",
|
|
||||||
port: 443,
|
|
||||||
requestPath: "/",
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const MonitorNodeConfigForm = forwardRef<MonitorNodeConfigFormInstance, MonitorNodeConfigFormProps>(
|
const MonitorNodeConfigForm = forwardRef<MonitorNodeConfigFormInstance, MonitorNodeConfigFormProps>(
|
||||||
|
@ -12,7 +12,7 @@ import NotificationProviderSelect from "@/components/provider/NotificationProvid
|
|||||||
import Show from "@/components/Show";
|
import Show from "@/components/Show";
|
||||||
import { ACCESS_USAGES, NOTIFICATION_PROVIDERS, accessProvidersMap, notificationProvidersMap } from "@/domain/provider";
|
import { ACCESS_USAGES, NOTIFICATION_PROVIDERS, accessProvidersMap, notificationProvidersMap } from "@/domain/provider";
|
||||||
import { notifyChannelsMap } from "@/domain/settings";
|
import { notifyChannelsMap } from "@/domain/settings";
|
||||||
import { type WorkflowNodeConfigForNotify } from "@/domain/workflow";
|
import { type WorkflowNodeConfigForNotify, defaultNodeConfigForNotify } from "@/domain/workflow";
|
||||||
import { useAntdForm, useAntdFormName, useZustandShallowSelector } from "@/hooks";
|
import { useAntdForm, useAntdFormName, useZustandShallowSelector } from "@/hooks";
|
||||||
import { useAccessesStore } from "@/stores/access";
|
import { useAccessesStore } from "@/stores/access";
|
||||||
import { useNotifyChannelsStore } from "@/stores/notify";
|
import { useNotifyChannelsStore } from "@/stores/notify";
|
||||||
@ -41,7 +41,7 @@ export type NotifyNodeConfigFormInstance = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const initFormModel = (): NotifyNodeConfigFormFieldValues => {
|
const initFormModel = (): NotifyNodeConfigFormFieldValues => {
|
||||||
return {};
|
return defaultNodeConfigForNotify();
|
||||||
};
|
};
|
||||||
|
|
||||||
const NotifyNodeConfigForm = forwardRef<NotifyNodeConfigFormInstance, NotifyNodeConfigFormProps>(
|
const NotifyNodeConfigForm = forwardRef<NotifyNodeConfigFormInstance, NotifyNodeConfigFormProps>(
|
||||||
|
@ -6,7 +6,7 @@ import dayjs from "dayjs";
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
|
|
||||||
import Show from "@/components/Show";
|
import Show from "@/components/Show";
|
||||||
import { WORKFLOW_TRIGGERS, type WorkflowNodeConfigForStart, type WorkflowTriggerType } from "@/domain/workflow";
|
import { WORKFLOW_TRIGGERS, type WorkflowNodeConfigForStart, type WorkflowTriggerType, defaultNodeConfigForStart } from "@/domain/workflow";
|
||||||
import { useAntdForm } from "@/hooks";
|
import { useAntdForm } from "@/hooks";
|
||||||
import { getNextCronExecutions, validCronExpression } from "@/utils/cron";
|
import { getNextCronExecutions, validCronExpression } from "@/utils/cron";
|
||||||
|
|
||||||
@ -27,10 +27,7 @@ export type StartNodeConfigFormInstance = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const initFormModel = (): StartNodeConfigFormFieldValues => {
|
const initFormModel = (): StartNodeConfigFormFieldValues => {
|
||||||
return {
|
return defaultNodeConfigForStart();
|
||||||
trigger: WORKFLOW_TRIGGERS.AUTO,
|
|
||||||
triggerCron: "0 0 * * *",
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const StartNodeConfigForm = forwardRef<StartNodeConfigFormInstance, StartNodeConfigFormProps>(
|
const StartNodeConfigForm = forwardRef<StartNodeConfigFormInstance, StartNodeConfigFormProps>(
|
||||||
|
@ -6,7 +6,7 @@ import { z } from "zod";
|
|||||||
|
|
||||||
import { validateCertificate, validatePrivateKey } from "@/api/certificates";
|
import { validateCertificate, validatePrivateKey } from "@/api/certificates";
|
||||||
import TextFileInput from "@/components/TextFileInput";
|
import TextFileInput from "@/components/TextFileInput";
|
||||||
import { type WorkflowNodeConfigForUpload } from "@/domain/workflow";
|
import { type WorkflowNodeConfigForUpload, defaultNodeConfigForUpload } from "@/domain/workflow";
|
||||||
import { useAntdForm } from "@/hooks";
|
import { useAntdForm } from "@/hooks";
|
||||||
import { getErrMsg } from "@/utils/error";
|
import { getErrMsg } from "@/utils/error";
|
||||||
|
|
||||||
@ -27,7 +27,7 @@ export type UploadNodeConfigFormInstance = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const initFormModel = (): UploadNodeConfigFormFieldValues => {
|
const initFormModel = (): UploadNodeConfigFormFieldValues => {
|
||||||
return {};
|
return defaultNodeConfigForUpload();
|
||||||
};
|
};
|
||||||
|
|
||||||
const UploadNodeConfigForm = forwardRef<UploadNodeConfigFormInstance, UploadNodeConfigFormProps>(
|
const UploadNodeConfigForm = forwardRef<UploadNodeConfigFormInstance, UploadNodeConfigFormProps>(
|
||||||
|
@ -133,6 +133,13 @@ export type WorkflowNodeConfigForStart = {
|
|||||||
triggerCron?: string;
|
triggerCron?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const defaultNodeConfigForStart = (): Partial<WorkflowNodeConfigForStart> => {
|
||||||
|
return {
|
||||||
|
trigger: WORKFLOW_TRIGGERS.AUTO,
|
||||||
|
triggerCron: "0 0 * * *",
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
export type WorkflowNodeConfigForApply = {
|
export type WorkflowNodeConfigForApply = {
|
||||||
domains: string;
|
domains: string;
|
||||||
contactEmail: string;
|
contactEmail: string;
|
||||||
@ -152,6 +159,14 @@ export type WorkflowNodeConfigForApply = {
|
|||||||
skipBeforeExpiryDays: number;
|
skipBeforeExpiryDays: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const defaultNodeConfigForApply = (): Partial<WorkflowNodeConfigForApply> => {
|
||||||
|
return {
|
||||||
|
challengeType: "dns-01",
|
||||||
|
keyAlgorithm: "RSA2048",
|
||||||
|
skipBeforeExpiryDays: 30,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
export type WorkflowNodeConfigForUpload = {
|
export type WorkflowNodeConfigForUpload = {
|
||||||
certificateId: string;
|
certificateId: string;
|
||||||
domains: string;
|
domains: string;
|
||||||
@ -159,6 +174,10 @@ export type WorkflowNodeConfigForUpload = {
|
|||||||
privateKey: string;
|
privateKey: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const defaultNodeConfigForUpload = (): Partial<WorkflowNodeConfigForUpload> => {
|
||||||
|
return {};
|
||||||
|
};
|
||||||
|
|
||||||
export type WorkflowNodeConfigForMonitor = {
|
export type WorkflowNodeConfigForMonitor = {
|
||||||
host: string;
|
host: string;
|
||||||
port: number;
|
port: number;
|
||||||
@ -166,6 +185,13 @@ export type WorkflowNodeConfigForMonitor = {
|
|||||||
requestPath?: string;
|
requestPath?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const defaultNodeConfigForMonitor = (): Partial<WorkflowNodeConfigForMonitor> => {
|
||||||
|
return {
|
||||||
|
port: 443,
|
||||||
|
requestPath: "/",
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
export type WorkflowNodeConfigForDeploy = {
|
export type WorkflowNodeConfigForDeploy = {
|
||||||
certificate: string;
|
certificate: string;
|
||||||
provider: string;
|
provider: string;
|
||||||
@ -174,6 +200,12 @@ export type WorkflowNodeConfigForDeploy = {
|
|||||||
skipOnLastSucceeded: boolean;
|
skipOnLastSucceeded: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const defaultNodeConfigForDeploy = (): Partial<WorkflowNodeConfigForDeploy> => {
|
||||||
|
return {
|
||||||
|
skipOnLastSucceeded: true,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
export type WorkflowNodeConfigForNotify = {
|
export type WorkflowNodeConfigForNotify = {
|
||||||
subject: string;
|
subject: string;
|
||||||
message: string;
|
message: string;
|
||||||
@ -186,10 +218,18 @@ export type WorkflowNodeConfigForNotify = {
|
|||||||
providerConfig?: Record<string, unknown>;
|
providerConfig?: Record<string, unknown>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const defaultNodeConfigForNotify = (): Partial<WorkflowNodeConfigForNotify> => {
|
||||||
|
return {};
|
||||||
|
};
|
||||||
|
|
||||||
export type WorkflowNodeConfigForCondition = {
|
export type WorkflowNodeConfigForCondition = {
|
||||||
expression?: Expr;
|
expression?: Expr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const defaultNodeConfigForCondition = (): Partial<WorkflowNodeConfigForCondition> => {
|
||||||
|
return {};
|
||||||
|
};
|
||||||
|
|
||||||
export type WorkflowNodeConfigForBranch = never;
|
export type WorkflowNodeConfigForBranch = never;
|
||||||
|
|
||||||
export type WorkflowNodeConfigForEnd = never;
|
export type WorkflowNodeConfigForEnd = never;
|
||||||
@ -243,15 +283,18 @@ type InitWorkflowOptions = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const initWorkflow = (options: InitWorkflowOptions = {}): WorkflowModel => {
|
export const initWorkflow = (options: InitWorkflowOptions = {}): WorkflowModel => {
|
||||||
const root = newNode(WorkflowNodeType.Start, {}) as WorkflowNode;
|
const root = newNode(WorkflowNodeType.Start, {
|
||||||
root.config = { trigger: WORKFLOW_TRIGGERS.MANUAL };
|
nodeConfig: { trigger: WORKFLOW_TRIGGERS.MANUAL },
|
||||||
|
});
|
||||||
|
|
||||||
switch (options.template) {
|
switch (options.template) {
|
||||||
case "standard":
|
case "standard":
|
||||||
{
|
{
|
||||||
let current = root;
|
let current = root;
|
||||||
|
|
||||||
const applyNode = newNode(WorkflowNodeType.Apply);
|
const applyNode = newNode(WorkflowNodeType.Apply, {
|
||||||
|
nodeConfig: defaultNodeConfigForApply(),
|
||||||
|
});
|
||||||
current.next = applyNode;
|
current.next = applyNode;
|
||||||
|
|
||||||
current = current.next;
|
current = current.next;
|
||||||
@ -260,6 +303,7 @@ export const initWorkflow = (options: InitWorkflowOptions = {}): WorkflowModel =
|
|||||||
current = current.next!.branches![1];
|
current = current.next!.branches![1];
|
||||||
current.next = newNode(WorkflowNodeType.Notify, {
|
current.next = newNode(WorkflowNodeType.Notify, {
|
||||||
nodeConfig: {
|
nodeConfig: {
|
||||||
|
...defaultNodeConfigForNotify(),
|
||||||
subject: "[Certimate] Workflow Failure Alert!",
|
subject: "[Certimate] Workflow Failure Alert!",
|
||||||
message: "Your workflow run for the certificate application has failed. Please check the details.",
|
message: "Your workflow run for the certificate application has failed. Please check the details.",
|
||||||
} as WorkflowNodeConfigForNotify,
|
} as WorkflowNodeConfigForNotify,
|
||||||
@ -268,8 +312,8 @@ export const initWorkflow = (options: InitWorkflowOptions = {}): WorkflowModel =
|
|||||||
current = applyNode.next!.branches![0];
|
current = applyNode.next!.branches![0];
|
||||||
current.next = newNode(WorkflowNodeType.Deploy, {
|
current.next = newNode(WorkflowNodeType.Deploy, {
|
||||||
nodeConfig: {
|
nodeConfig: {
|
||||||
|
...defaultNodeConfigForDeploy(),
|
||||||
certificate: `${applyNode.id}#certificate`,
|
certificate: `${applyNode.id}#certificate`,
|
||||||
skipOnLastSucceeded: true,
|
|
||||||
} as WorkflowNodeConfigForDeploy,
|
} as WorkflowNodeConfigForDeploy,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -279,6 +323,7 @@ export const initWorkflow = (options: InitWorkflowOptions = {}): WorkflowModel =
|
|||||||
current = current.next!.branches![1];
|
current = current.next!.branches![1];
|
||||||
current.next = newNode(WorkflowNodeType.Notify, {
|
current.next = newNode(WorkflowNodeType.Notify, {
|
||||||
nodeConfig: {
|
nodeConfig: {
|
||||||
|
...defaultNodeConfigForNotify(),
|
||||||
subject: "[Certimate] Workflow Failure Alert!",
|
subject: "[Certimate] Workflow Failure Alert!",
|
||||||
message: "Your workflow run for the certificate deployment has failed. Please check the details.",
|
message: "Your workflow run for the certificate deployment has failed. Please check the details.",
|
||||||
} as WorkflowNodeConfigForNotify,
|
} as WorkflowNodeConfigForNotify,
|
||||||
@ -290,7 +335,9 @@ export const initWorkflow = (options: InitWorkflowOptions = {}): WorkflowModel =
|
|||||||
{
|
{
|
||||||
let current = root;
|
let current = root;
|
||||||
|
|
||||||
const monitorNode = newNode(WorkflowNodeType.Monitor);
|
const monitorNode = newNode(WorkflowNodeType.Monitor, {
|
||||||
|
nodeConfig: defaultNodeConfigForMonitor(),
|
||||||
|
});
|
||||||
current.next = monitorNode;
|
current.next = monitorNode;
|
||||||
|
|
||||||
current = current.next;
|
current = current.next;
|
||||||
@ -299,6 +346,7 @@ export const initWorkflow = (options: InitWorkflowOptions = {}): WorkflowModel =
|
|||||||
current = current.next!.branches![1];
|
current = current.next!.branches![1];
|
||||||
current.next = newNode(WorkflowNodeType.Notify, {
|
current.next = newNode(WorkflowNodeType.Notify, {
|
||||||
nodeConfig: {
|
nodeConfig: {
|
||||||
|
...defaultNodeConfigForNotify(),
|
||||||
subject: "[Certimate] Workflow Failure Alert!",
|
subject: "[Certimate] Workflow Failure Alert!",
|
||||||
message: "Your workflow run for the certificate monitoring has failed. Please check the details.",
|
message: "Your workflow run for the certificate monitoring has failed. Please check the details.",
|
||||||
} as WorkflowNodeConfigForNotify,
|
} as WorkflowNodeConfigForNotify,
|
||||||
@ -352,6 +400,7 @@ export const initWorkflow = (options: InitWorkflowOptions = {}): WorkflowModel =
|
|||||||
} as WorkflowNodeConfigForCondition;
|
} as WorkflowNodeConfigForCondition;
|
||||||
current.next = newNode(WorkflowNodeType.Notify, {
|
current.next = newNode(WorkflowNodeType.Notify, {
|
||||||
nodeConfig: {
|
nodeConfig: {
|
||||||
|
...defaultNodeConfigForNotify(),
|
||||||
subject: "[Certimate] Certificate Expiry Alert!",
|
subject: "[Certimate] Certificate Expiry Alert!",
|
||||||
message: "The certificate will expire soon. Please pay attention to your website.",
|
message: "The certificate will expire soon. Please pay attention to your website.",
|
||||||
} as WorkflowNodeConfigForNotify,
|
} as WorkflowNodeConfigForNotify,
|
||||||
@ -380,6 +429,7 @@ export const initWorkflow = (options: InitWorkflowOptions = {}): WorkflowModel =
|
|||||||
} as WorkflowNodeConfigForCondition;
|
} as WorkflowNodeConfigForCondition;
|
||||||
current.next = newNode(WorkflowNodeType.Notify, {
|
current.next = newNode(WorkflowNodeType.Notify, {
|
||||||
nodeConfig: {
|
nodeConfig: {
|
||||||
|
...defaultNodeConfigForNotify(),
|
||||||
subject: "[Certimate] Certificate Expiry Alert!",
|
subject: "[Certimate] Certificate Expiry Alert!",
|
||||||
message: "The certificate has already expired. Please pay attention to your website.",
|
message: "The certificate has already expired. Please pay attention to your website.",
|
||||||
} as WorkflowNodeConfigForNotify,
|
} as WorkflowNodeConfigForNotify,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user