feat: new acme dns-01 provider: netlify

This commit is contained in:
Fu Diwei
2025-05-15 22:22:18 +08:00
parent 9e08cfd1d1
commit 70bd2f0581
13 changed files with 136 additions and 1 deletions

View File

@@ -0,0 +1,57 @@
import { useTranslation } from "react-i18next";
import { Form, type FormInstance, Input } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { type AccessConfigForNetlify } from "@/domain/access";
type AccessFormNetlifyConfigFieldValues = Nullish<AccessConfigForNetlify>;
export type AccessFormNetlifyConfigProps = {
form: FormInstance;
formName: string;
disabled?: boolean;
initialValues?: AccessFormNetlifyConfigFieldValues;
onValuesChange?: (values: AccessFormNetlifyConfigFieldValues) => void;
};
const initFormModel = (): AccessFormNetlifyConfigFieldValues => {
return {
apiToken: "",
};
};
const AccessFormNetlifyConfig = ({ form: formInst, formName, disabled, initialValues, onValuesChange }: AccessFormNetlifyConfigProps) => {
const { t } = useTranslation();
const formSchema = z.object({
apiToken: z.string().nonempty(t("access.form.netlify_api_token.placeholder")).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="apiToken"
label={t("access.form.netlify_api_token.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.netlify_api_token.tooltip") }}></span>}
>
<Input.Password autoComplete="new-password" placeholder={t("access.form.netlify_api_token.placeholder")} />
</Form.Item>
</Form>
);
};
export default AccessFormNetlifyConfig;