certimate/ui/src/domain/access.ts
2024-12-17 19:11:28 +08:00

204 lines
6.8 KiB
TypeScript

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 BaseModel {
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 = {
accessKeyId: string;
secretAccessKey: string;
region?: 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: number;
username: string;
password?: string;
key?: string;
keyPassphrase?: string;
};
export type TencentCloudAccessConfig = {
secretId: string;
secretKey: string;
};
export type VolcEngineAccessConfig = {
accessKeyId: string;
secretAccessKey: string;
};
export type WebhookAccessConfig = {
url: string;
};
type AccessUsages = "apply" | "deploy" | "all";
type AccessProvider = {
type: string;
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, { type, name, icon, usage: usage as AccessUsages }])
);