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