mirror of
https://github.com/usual2970/certimate.git
synced 2025-06-11 06:59:51 +00:00
232 lines
7.6 KiB
TypeScript
232 lines
7.6 KiB
TypeScript
import { z } from "zod";
|
|
import { type BaseModel } from "pocketbase";
|
|
|
|
/*
|
|
注意:如果追加新的常量值,请保持以 ASCII 排序。
|
|
NOTICE: If you add new constant, please keep ASCII order.
|
|
*/
|
|
export const ACCESS_PROVIDER_TYPE_ACMEHTTPREQ = "acmehttpreq" as const;
|
|
export const ACCESS_PROVIDER_TYPE_ALIYUN = "aliyun" as const;
|
|
export const ACCESS_PROVIDER_TYPE_AWS = "aws" as const;
|
|
export const ACCESS_PROVIDER_TYPE_BAIDUCLOUD = "baiducloud" as const;
|
|
export const ACCESS_PROVIDER_TYPE_BYTEPLUS = "byteplus" as const;
|
|
export const ACCESS_PROVIDER_TYPE_CLOUDFLARE = "cloudflare" as const;
|
|
export const ACCESS_PROVIDER_TYPE_DOGECLOUD = "dogecloud" as const;
|
|
export const ACCESS_PROVIDER_TYPE_GODADDY = "godaddy" as const;
|
|
export const ACCESS_PROVIDER_TYPE_HUAWEICLOUD = "huaweicloud" as const;
|
|
export const ACCESS_PROVIDER_TYPE_KUBERNETES = "k8s" as const;
|
|
export const ACCESS_PROVIDER_TYPE_LOCAL = "local" as const;
|
|
export const ACCESS_PROVIDER_TYPE_NAMESILO = "namesilo" as const;
|
|
export const ACCESS_PROVIDER_TYPE_POWERDNS = "powerdns" as const;
|
|
export const ACCESS_PROVIDER_TYPE_QINIU = "qiniu" as const;
|
|
export const ACCESS_PROVIDER_TYPE_SSH = "ssh" as const;
|
|
export const ACCESS_PROVIDER_TYPE_TENCENTCLOUD = "tencentcloud" as const;
|
|
export const ACCESS_PROVIDER_TYPE_VOLCENGINE = "volcengine" as const;
|
|
export const ACCESS_PROVIDER_TYPE_WEBHOOK = "webhook" as const;
|
|
export const ACCESS_PROVIDER_TYPES = Object.freeze({
|
|
ACMEHTTPREQ: ACCESS_PROVIDER_TYPE_ACMEHTTPREQ,
|
|
ALIYUN: ACCESS_PROVIDER_TYPE_ALIYUN,
|
|
AWS: ACCESS_PROVIDER_TYPE_AWS,
|
|
BAIDUCLOUD: ACCESS_PROVIDER_TYPE_BAIDUCLOUD,
|
|
BYTEPLUS: ACCESS_PROVIDER_TYPE_BYTEPLUS,
|
|
CLOUDFLARE: ACCESS_PROVIDER_TYPE_CLOUDFLARE,
|
|
DOGECLOUD: ACCESS_PROVIDER_TYPE_DOGECLOUD,
|
|
GODADDY: ACCESS_PROVIDER_TYPE_GODADDY,
|
|
HUAWEICLOUD: ACCESS_PROVIDER_TYPE_HUAWEICLOUD,
|
|
KUBERNETES: ACCESS_PROVIDER_TYPE_KUBERNETES,
|
|
LOCAL: ACCESS_PROVIDER_TYPE_LOCAL,
|
|
NAMESILO: ACCESS_PROVIDER_TYPE_NAMESILO,
|
|
POWERDNS: ACCESS_PROVIDER_TYPE_POWERDNS,
|
|
QINIU: ACCESS_PROVIDER_TYPE_QINIU,
|
|
SSH: ACCESS_PROVIDER_TYPE_SSH,
|
|
TENCENTCLOUD: ACCESS_PROVIDER_TYPE_TENCENTCLOUD,
|
|
VOLCENGINE: ACCESS_PROVIDER_TYPE_VOLCENGINE,
|
|
WEBHOOK: ACCESS_PROVIDER_TYPE_WEBHOOK,
|
|
} as const);
|
|
|
|
export interface AccessModel extends Omit<BaseModel, "created" | "updated"> {
|
|
name: string;
|
|
configType: string;
|
|
usage: AccessUsages;
|
|
config: /*
|
|
注意:如果追加新的类型,请保持以 ASCII 排序。
|
|
NOTICE: If you add new type, please keep ASCII order.
|
|
*/
|
|
Record<string, unknown> &
|
|
(
|
|
| ACMEHttpReqAccessConfig
|
|
| AliyunAccessConfig
|
|
| AWSAccessConfig
|
|
| BaiduCloudAccessConfig
|
|
| BytePlusAccessConfig
|
|
| CloudflareAccessConfig
|
|
| DogeCloudAccessConfig
|
|
| GoDaddyAccessConfig
|
|
| HuaweiCloudAccessConfig
|
|
| KubernetesAccessConfig
|
|
| LocalAccessConfig
|
|
| NamesiloAccessConfig
|
|
| PowerDNSAccessConfig
|
|
| QiniuAccessConfig
|
|
| SSHAccessConfig
|
|
| TencentCloudAccessConfig
|
|
| VolcEngineAccessConfig
|
|
| WebhookAccessConfig
|
|
);
|
|
}
|
|
|
|
export type ACMEHttpReqAccessConfig = {
|
|
endpoint: string;
|
|
mode?: string;
|
|
username?: string;
|
|
password?: string;
|
|
};
|
|
|
|
export type AliyunAccessConfig = {
|
|
accessKeyId: string;
|
|
accessKeySecret: string;
|
|
};
|
|
|
|
export type AWSAccessConfig = {
|
|
accessKeyId: string;
|
|
secretAccessKey: string;
|
|
region?: string;
|
|
hostedZoneId?: string;
|
|
};
|
|
|
|
export type BaiduCloudAccessConfig = {
|
|
accessKeyId: string;
|
|
secretAccessKey: string;
|
|
};
|
|
|
|
export type BytePlusAccessConfig = {
|
|
accessKey: string;
|
|
secretKey: string;
|
|
};
|
|
|
|
export type CloudflareAccessConfig = {
|
|
dnsApiToken: string;
|
|
};
|
|
|
|
export type DogeCloudAccessConfig = {
|
|
accessKey: string;
|
|
secretKey: string;
|
|
};
|
|
|
|
export type GoDaddyAccessConfig = {
|
|
apiKey: string;
|
|
apiSecret: string;
|
|
};
|
|
|
|
export type HuaweiCloudAccessConfig = {
|
|
region: string;
|
|
accessKeyId: string;
|
|
secretAccessKey: string;
|
|
};
|
|
|
|
export type KubernetesAccessConfig = {
|
|
kubeConfig: string;
|
|
};
|
|
|
|
export type LocalAccessConfig = never;
|
|
|
|
export type NamesiloAccessConfig = {
|
|
apiKey: string;
|
|
};
|
|
|
|
export type PowerDNSAccessConfig = {
|
|
apiUrl: string;
|
|
apiKey: string;
|
|
};
|
|
|
|
export type QiniuAccessConfig = {
|
|
accessKey: string;
|
|
secretKey: string;
|
|
};
|
|
|
|
export type SSHAccessConfig = {
|
|
host: string;
|
|
port: string;
|
|
username: string;
|
|
password?: string;
|
|
key?: string;
|
|
keyFile?: string;
|
|
keyPassphrase?: string;
|
|
};
|
|
|
|
export type TencentCloudAccessConfig = {
|
|
secretId: string;
|
|
secretKey: string;
|
|
};
|
|
|
|
export type VolcEngineAccessConfig = {
|
|
accessKeyId: string;
|
|
secretAccessKey: string;
|
|
};
|
|
|
|
export type WebhookAccessConfig = {
|
|
url: string;
|
|
};
|
|
|
|
type AccessTypes = (typeof ACCESS_PROVIDER_TYPES)[keyof typeof ACCESS_PROVIDER_TYPES];
|
|
|
|
type AccessUsages = "apply" | "deploy" | "all";
|
|
|
|
type AccessProvider = {
|
|
type: AccessTypes;
|
|
name: string;
|
|
icon: string;
|
|
usage: AccessUsages;
|
|
};
|
|
|
|
export const accessProvidersMap: Map<AccessProvider["type"], AccessProvider> = new Map(
|
|
/*
|
|
注意:与定义常量值时不同,此处的顺序决定显示在前端的顺序。
|
|
NOTICE: The following order determines the order displayed at the frontend.
|
|
*/
|
|
[
|
|
[ACCESS_PROVIDER_TYPE_ALIYUN, "common.provider.aliyun", "/imgs/providers/aliyun.svg", "all"],
|
|
[ACCESS_PROVIDER_TYPE_TENCENTCLOUD, "common.provider.tencentcloud", "/imgs/providers/tencentcloud.svg", "all"],
|
|
[ACCESS_PROVIDER_TYPE_HUAWEICLOUD, "common.provider.huaweicloud", "/imgs/providers/huaweicloud.svg", "all"],
|
|
[ACCESS_PROVIDER_TYPE_BAIDUCLOUD, "common.provider.baiducloud", "/imgs/providers/baiducloud.svg", "all"],
|
|
[ACCESS_PROVIDER_TYPE_QINIU, "common.provider.qiniu", "/imgs/providers/qiniu.svg", "deploy"],
|
|
[ACCESS_PROVIDER_TYPE_DOGECLOUD, "common.provider.dogecloud", "/imgs/providers/dogecloud.svg", "deploy"],
|
|
[ACCESS_PROVIDER_TYPE_VOLCENGINE, "common.provider.volcengine", "/imgs/providers/volcengine.svg", "all"],
|
|
[ACCESS_PROVIDER_TYPE_BYTEPLUS, "common.provider.byteplus", "/imgs/providers/byteplus.svg", "all"],
|
|
[ACCESS_PROVIDER_TYPE_AWS, "common.provider.aws", "/imgs/providers/aws.svg", "apply"],
|
|
[ACCESS_PROVIDER_TYPE_CLOUDFLARE, "common.provider.cloudflare", "/imgs/providers/cloudflare.svg", "apply"],
|
|
[ACCESS_PROVIDER_TYPE_NAMESILO, "common.provider.namesilo", "/imgs/providers/namesilo.svg", "apply"],
|
|
[ACCESS_PROVIDER_TYPE_GODADDY, "common.provider.godaddy", "/imgs/providers/godaddy.svg", "apply"],
|
|
[ACCESS_PROVIDER_TYPE_POWERDNS, "common.provider.powerdns", "/imgs/providers/powerdns.svg", "apply"],
|
|
[ACCESS_PROVIDER_TYPE_LOCAL, "common.provider.local", "/imgs/providers/local.svg", "deploy"],
|
|
[ACCESS_PROVIDER_TYPE_SSH, "common.provider.ssh", "/imgs/providers/ssh.svg", "deploy"],
|
|
[ACCESS_PROVIDER_TYPE_WEBHOOK, "common.provider.webhook", "/imgs/providers/webhook.svg", "deploy"],
|
|
[ACCESS_PROVIDER_TYPE_KUBERNETES, "common.provider.kubernetes", "/imgs/providers/kubernetes.svg", "deploy"],
|
|
[ACCESS_PROVIDER_TYPE_ACMEHTTPREQ, "common.provider.acmehttpreq", "/imgs/providers/acmehttpreq.svg", "apply"],
|
|
].map(([type, name, icon, usage]) => [type as AccessTypes, { type: type as AccessTypes, name, icon, usage: usage as AccessUsages }])
|
|
);
|
|
|
|
export const accessTypeFormSchema = z.union(
|
|
[
|
|
z.literal("aliyun"),
|
|
z.literal("tencentcloud"),
|
|
z.literal("huaweicloud"),
|
|
z.literal("baiducloud"),
|
|
z.literal("qiniu"),
|
|
z.literal("dogecloud"),
|
|
z.literal("aws"),
|
|
z.literal("cloudflare"),
|
|
z.literal("namesilo"),
|
|
z.literal("godaddy"),
|
|
z.literal("powerdns"),
|
|
z.literal("acmehttpreq"),
|
|
z.literal("local"),
|
|
z.literal("ssh"),
|
|
z.literal("webhook"),
|
|
z.literal("k8s"),
|
|
z.literal("volcengine"),
|
|
z.literal("byteplus"),
|
|
],
|
|
{ message: "access.form.type.placeholder" }
|
|
);
|