import { IconAlertTriangle } from "@tabler/icons-react"; import { useQueryClient } from "@tanstack/react-query"; import EasyModal, { type InnerModalProps } from "ez-modal-react"; import { Form, Formik } from "formik"; import { type ReactNode, useState } from "react"; import { Alert } from "react-bootstrap"; import Modal from "react-bootstrap/Modal"; import { createCertificate, testHttpCertificate } from "src/api/backend"; import { Button, DomainNamesField } from "src/components"; import { T } from "src/locale"; import { showObjectSuccess } from "src/notifications"; const showHTTPCertificateModal = () => { EasyModal.show(HTTPCertificateModal); }; const HTTPCertificateModal = EasyModal.create(({ visible, remove }: InnerModalProps) => { const queryClient = useQueryClient(); const [errorMsg, setErrorMsg] = useState(null); const [isSubmitting, setIsSubmitting] = useState(false); const [domains, setDomains] = useState([] as string[]); const [isTesting, setIsTesting] = useState(false); const [testResults, setTestResults] = useState(null as Record | null); const onSubmit = async (values: any, { setSubmitting }: any) => { if (isSubmitting) return; setIsSubmitting(true); setErrorMsg(null); try { await createCertificate(values); showObjectSuccess("certificate", "saved"); remove(); } catch (err: any) { setErrorMsg(); } queryClient.invalidateQueries({ queryKey: ["certificates"] }); setIsSubmitting(false); setSubmitting(false); }; const handleTest = async () => { setIsTesting(true); setErrorMsg(null); setTestResults(null); try { const result = await testHttpCertificate(domains); setTestResults(result); } catch (err: any) { setErrorMsg(); } setIsTesting(false); }; const parseTestResults = () => { const elms = []; for (const domain in testResults) { const status = testResults[domain]; if (status === "ok") { elms.push(

{domain}:

, ); } else { if (status === "no-host") { elms.push(

{domain}:

, ); } else if (status === "failed") { elms.push(

{domain}:

, ); } else if (status === "404") { elms.push(

{domain}:

, ); } else if (status === "wrong-data") { elms.push(

{domain}:

, ); } else if (status.startsWith("other:")) { const code = status.substring(6); elms.push(

{domain}:

, ); } else { // This should never happen elms.push(

{domain}: ?

, ); } } } return <>{elms}; }; return ( {() => (
setErrorMsg(null)} dismissible> {errorMsg}

{ setDomains(doms); setTestResults(null); }} />
{testResults ? (
{parseTestResults()}
) : null}
)}
); }); export { showHTTPCertificateModal };