feat: add desec dns-01 applicant
This commit is contained in:
87
ui/public/imgs/providers/desec.svg
Normal file
87
ui/public/imgs/providers/desec.svg
Normal file
@@ -0,0 +1,87 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="7.4053912mm"
|
||||
height="7.5173831mm"
|
||||
viewBox="0 0 7.4053913 7.5173831"
|
||||
version="1.1"
|
||||
id="svg1262"
|
||||
sodipodi:docname="logo.notext.svg"
|
||||
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
|
||||
<defs
|
||||
id="defs1256" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.6"
|
||||
inkscape:cx="101.86078"
|
||||
inkscape:cy="8.9271745"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="g3885"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="2560"
|
||||
inkscape:window-height="1365"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="38"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata1259">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-254.94057,-266.78298)">
|
||||
<g
|
||||
id="g3885"
|
||||
transform="matrix(0.26519825,0,0,0.26519825,228.89366,215.69135)"
|
||||
style="fill:#000000">
|
||||
<g
|
||||
style="fill:#000000;stroke:#ffffff;stroke-opacity:1"
|
||||
id="layer1-9"
|
||||
transform="matrix(0.22901929,0,0,0.22901929,26.296508,84.906304)"
|
||||
inkscape:export-filename="/home/nils/git/desec-stack/webapp/src/assets/logo.png"
|
||||
inkscape:export-xdpi="567.52002"
|
||||
inkscape:export-ydpi="567.52002">
|
||||
<g
|
||||
style="fill:#000000;stroke:#ffffff;stroke-opacity:1"
|
||||
transform="translate(-194.13584,150.8067)"
|
||||
id="g3933">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 509.13584,366.2239 c 8.87906,-33.13708 42.93987,-52.8021 76.07695,-43.92304 21.43594,5.74374 38.17931,22.48711 43.92305,43.92304 0,0 -6.09923,-6.07815 -10,-6.07815 -3.90077,0 -10,6.07815 -10,6.07815 0,0 -6.09923,-6.07815 -10,-6.07815 -3.90077,0 -10,6.07815 -10,6.07815 0,0 -6.09923,-6.07815 -10,-6.07815 -3.90077,0 -10,6.07815 -10,6.07815 0,0 -6.09923,-6.07815 -10,-6.07815 -3.90077,0 -10,6.07815 -10,6.07815 0,0 -6.09923,-6.07815 -10,-6.07815 -3.90077,0 -10,6.07815 -10,6.07815 0,0 -6.09923,-6.07815 -10,-6.07815 -3.90077,0 -10,6.07815 -10,6.07815 z"
|
||||
id="path2985-6-3"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker:none;enable-background:accumulate" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
d="m 567.42674,364.89583 v 61.87321 c 0,9.34738 5.48085,16.17306 12.23879,16.17306 6.75795,0 12.23635,-6.83606 12.23635,-16.18344 0,0 -1.07806,-1.02674 -1.75904,-1.03964 -0.64261,-0.0122 -1.69589,0.91753 -1.69589,0.91753 0,6.70817 -3.93157,13.01592 -8.78142,13.01592 -4.84984,0 -8.78142,-6.30775 -8.78142,-13.01592 l -7.6e-4,-61.74072 z"
|
||||
id="path3775-7-4-6"
|
||||
style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:117.14173126;stroke-opacity:1;marker:none;enable-background:accumulate" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
@@ -23,6 +23,7 @@ import AccessFormCdnflyConfig from "./AccessFormCdnflyConfig";
|
||||
import AccessFormCloudflareConfig from "./AccessFormCloudflareConfig";
|
||||
import AccessFormClouDNSConfig from "./AccessFormClouDNSConfig";
|
||||
import AccessFormCMCCCloudConfig from "./AccessFormCMCCCloudConfig";
|
||||
import AccessFormDeSECConfig from "./AccessFormDeSECConfig";
|
||||
import AccessFormDNSLAConfig from "./AccessFormDNSLAConfig";
|
||||
import AccessFormDogeCloudConfig from "./AccessFormDogeCloudConfig";
|
||||
import AccessFormDynv6Config from "./AccessFormDynv6Config";
|
||||
@@ -131,6 +132,8 @@ const AccessForm = forwardRef<AccessFormInstance, AccessFormProps>(({ className,
|
||||
return <AccessFormClouDNSConfig {...nestedFormProps} />;
|
||||
case ACCESS_PROVIDERS.CMCCCLOUD:
|
||||
return <AccessFormCMCCCloudConfig {...nestedFormProps} />;
|
||||
case ACCESS_PROVIDERS.DESEC:
|
||||
return <AccessFormDeSECConfig {...nestedFormProps} />;
|
||||
case ACCESS_PROVIDERS.DNSLA:
|
||||
return <AccessFormDNSLAConfig {...nestedFormProps} />;
|
||||
case ACCESS_PROVIDERS.DOGECLOUD:
|
||||
|
||||
61
ui/src/components/access/AccessFormDeSECConfig.tsx
Normal file
61
ui/src/components/access/AccessFormDeSECConfig.tsx
Normal file
@@ -0,0 +1,61 @@
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { Form, type FormInstance, Input } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { type AccessConfigForDeSEC } from "@/domain/access";
|
||||
|
||||
type AccessFormDeSECConfigFieldValues = Nullish<AccessConfigForDeSEC>;
|
||||
|
||||
export type AccessFormDeSECConfigProps = {
|
||||
form: FormInstance;
|
||||
formName: string;
|
||||
disabled?: boolean;
|
||||
initialValues?: AccessFormDeSECConfigFieldValues;
|
||||
onValuesChange?: (values: AccessFormDeSECConfigFieldValues) => void;
|
||||
};
|
||||
|
||||
const initFormModel = (): AccessFormDeSECConfigFieldValues => {
|
||||
return {
|
||||
token: "",
|
||||
};
|
||||
};
|
||||
|
||||
const AccessFormDeSECConfig = ({ form: formInst, formName, disabled, initialValues, onValuesChange }: AccessFormDeSECConfigProps) => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const formSchema = z.object({
|
||||
token: z
|
||||
.string()
|
||||
.min(1, t("access.form.desec_token.placeholder"))
|
||||
.max(256, t("common.errmsg.string_max", { max: 256 }))
|
||||
.trim(),
|
||||
});
|
||||
const formRule = createSchemaFieldRule(formSchema);
|
||||
|
||||
const handleFormChange = (_: unknown, values: z.infer<typeof formSchema>) => {
|
||||
onValuesChange?.(values);
|
||||
};
|
||||
|
||||
return (
|
||||
<Form
|
||||
form={formInst}
|
||||
disabled={disabled}
|
||||
initialValues={initialValues ?? initFormModel()}
|
||||
layout="vertical"
|
||||
name={formName}
|
||||
onValuesChange={handleFormChange}
|
||||
>
|
||||
<Form.Item
|
||||
name="token"
|
||||
label={t("access.form.desec_token.label")}
|
||||
rules={[formRule]}
|
||||
tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.desec_token.tooltip") }}></span>}
|
||||
>
|
||||
<Input.Password autoComplete="new-password" placeholder={t("access.form.desec_token.placeholder")} />
|
||||
</Form.Item>
|
||||
</Form>
|
||||
);
|
||||
};
|
||||
|
||||
export default AccessFormDeSECConfig;
|
||||
@@ -20,6 +20,7 @@ export interface AccessModel extends BaseModel {
|
||||
| AccessConfigForCloudflare
|
||||
| AccessConfigForClouDNS
|
||||
| AccessConfigForCMCCCloud
|
||||
| AccessConfigForDeSEC
|
||||
| AccessConfigForDNSLA
|
||||
| AccessConfigForDogeCloud
|
||||
| AccessConfigForDynv6
|
||||
@@ -124,6 +125,10 @@ export type AccessConfigForCMCCCloud = {
|
||||
accessKeySecret: string;
|
||||
};
|
||||
|
||||
export type AccessConfigForDeSEC = {
|
||||
token: string;
|
||||
};
|
||||
|
||||
export type AccessConfigForDNSLA = {
|
||||
apiId: string;
|
||||
apiSecret: string;
|
||||
|
||||
@@ -100,6 +100,7 @@ export const accessProvidersMap: Map<AccessProvider["type"] | string, AccessProv
|
||||
|
||||
[ACCESS_PROVIDERS.CLOUDFLARE, "provider.cloudflare", "/imgs/providers/cloudflare.svg", [ACCESS_USAGES.APPLY]],
|
||||
[ACCESS_PROVIDERS.CLOUDNS, "provider.cloudns", "/imgs/providers/cloudns.png", [ACCESS_USAGES.APPLY]],
|
||||
[ACCESS_PROVIDERS.DESEC, "provider.desec", "/imgs/providers/desec.svg", [ACCESS_USAGES.APPLY]],
|
||||
[ACCESS_PROVIDERS.DNSLA, "provider.dnsla", "/imgs/providers/dnsla.svg", [ACCESS_USAGES.APPLY]],
|
||||
[ACCESS_PROVIDERS.DYNV6, "provider.dynv6", "/imgs/providers/dynv6.svg", [ACCESS_USAGES.APPLY]],
|
||||
[ACCESS_PROVIDERS.GNAME, "provider.gname", "/imgs/providers/gname.png", [ACCESS_USAGES.APPLY]],
|
||||
@@ -194,6 +195,7 @@ export const applyDNSProvidersMap: Map<ApplyDNSProvider["type"] | string, ApplyD
|
||||
[APPLY_DNS_PROVIDERS.AZURE_DNS, "provider.azure.dns"],
|
||||
[APPLY_DNS_PROVIDERS.CLOUDFLARE, "provider.cloudflare"],
|
||||
[APPLY_DNS_PROVIDERS.CLOUDNS, "provider.cloudns"],
|
||||
[APPLY_DNS_PROVIDERS.DESEC, "provider.desec"],
|
||||
[APPLY_DNS_PROVIDERS.DNSLA, "provider.dnsla"],
|
||||
[APPLY_DNS_PROVIDERS.DYNV6, "provider.dynv6"],
|
||||
[APPLY_DNS_PROVIDERS.GCORE, "provider.gcore"],
|
||||
|
||||
@@ -126,6 +126,9 @@
|
||||
"access.form.cmcccloud_access_key_secret.label": "CMCC ECloud AccessKeySecret",
|
||||
"access.form.cmcccloud_access_key_secret.placeholder": "Please enter CMCC ECloud AccessKeySecret",
|
||||
"access.form.cmcccloud_access_key_secret.tooltip": "For more information, see <a href=\"https://ecloud.10086.cn/op-help-center/doc/article/49739\" target=\"_blank\">https://ecloud.10086.cn/op-help-center/doc/article/49739</a>",
|
||||
"access.form.desec_token.label": "deSEC token",
|
||||
"access.form.desec_token.placeholder": "Please enter deSEC token",
|
||||
"access.form.desec_token.tooltip": "For more information, see <a href=\"https://desec.readthedocs.io/en/latest/auth/tokens.html#manage-tokens\" target=\"_blank\">https://desec.readthedocs.io/en/latest/auth/tokens.html</a>",
|
||||
"access.form.dnsla_api_id.label": "DNS.LA API ID",
|
||||
"access.form.dnsla_api_id.placeholder": "Please enter DNS.LA API ID",
|
||||
"access.form.dnsla_api_id.tooltip": "For more information, see <a href=\"https://www.dns.la/docs/ApiDoc\" target=\"_blank\">https://www.dns.la/docs/ApiDoc</a>",
|
||||
|
||||
@@ -120,6 +120,9 @@
|
||||
"access.form.cmcccloud_access_key_secret.label": "移动云 AccessKeySecret",
|
||||
"access.form.cmcccloud_access_key_secret.placeholder": "请输入移动云 AccessKeySecret",
|
||||
"access.form.cmcccloud_access_key_secret.tooltip": "这是什么?请参阅 <a href=\"https://ecloud.10086.cn/op-help-center/doc/article/49739\" target=\"_blank\">https://ecloud.10086.cn/op-help-center/doc/article/49739</a>",
|
||||
"access.form.desec_token.label": "deSEC Token",
|
||||
"access.form.desec_token.placeholder": "请输入 deSEC Token",
|
||||
"access.form.desec_token.tooltip": "这是什么?请参阅 <a href=\"https://desec.readthedocs.io/en/latest/auth/tokens.html#manage-tokens\" target=\"_blank\">https://desec.readthedocs.io/en/latest/auth/tokens.html</a>",
|
||||
"access.form.dnsla_api_id.label": "DNS.LA API ID",
|
||||
"access.form.dnsla_api_id.placeholder": "请输入 DNS.LA API ID",
|
||||
"access.form.dnsla_api_id.tooltip": "这是什么?请参阅 <a href=\"https://www.dns.la/docs/ApiDoc\" target=\"_blank\">https://www.dns.la/docs/ApiDoc</a>",
|
||||
|
||||
Reference in New Issue
Block a user