From 3657442f676dcfc936f99b676cdc29bce5c846eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Gangloff?= Date: Tue, 25 Feb 2025 22:29:22 +0100 Subject: [PATCH] feat: update EPP form --- assets/utils/api/connectors.ts | 17 ++- .../providers/forms/EppConnectorForm.tsx | 101 ++++++++++++++---- src/Dto/Connector/EppClientProviderDto.php | 6 -- src/Service/Connector/EppClientProvider.php | 1 - 4 files changed, 94 insertions(+), 31 deletions(-) diff --git a/assets/utils/api/connectors.ts b/assets/utils/api/connectors.ts index df3e7cf..dd47edd 100644 --- a/assets/utils/api/connectors.ts +++ b/assets/utils/api/connectors.ts @@ -12,7 +12,10 @@ export enum ConnectorProvider { export interface Connector { provider: ConnectorProvider - authData: object + authData: Record>, + + objURI?: { key: string, value: string }[], + extURI?: { key: string, value: string }[] } interface ConnectorResponse { @@ -28,6 +31,18 @@ export async function getConnectors(): Promise { } export async function postConnector(connector: Connector) { + + for (const key of ['objURI', 'extURI'] as (keyof Connector)[]) { + if (key in connector) { + const obj = connector[key] as { key: string, value: string }[] + connector.authData[key] = obj.reduce((acc: { [key: string]: string }, x) => ({ + ...acc, + [x.key]: x.value + }), {}) + delete connector[key] + } + } + const response = await request({ method: 'POST', url: 'connectors', diff --git a/assets/utils/providers/forms/EppConnectorForm.tsx b/assets/utils/providers/forms/EppConnectorForm.tsx index 04eba53..3c548ac 100644 --- a/assets/utils/providers/forms/EppConnectorForm.tsx +++ b/assets/utils/providers/forms/EppConnectorForm.tsx @@ -1,12 +1,62 @@ import React from "react" import {t} from "ttag" -import {Alert, Card, Col, Form, Input, InputNumber, Row, Select, Switch} from "antd" +import {Alert, Card, Col, Form, Input, InputNumber, Row, Select, Space, Switch} from "antd" +import { + CloseOutlined, + DatabaseOutlined, + DollarOutlined, + FieldTimeOutlined, + IdcardOutlined, + KeyOutlined, + LockOutlined, + PlusOutlined, + SignatureOutlined, + ToolOutlined, + UserOutlined +} from "@ant-design/icons" + +const DynamicKeyValueList = ({name, label, initialValue, keyPlaceholder, valuePlaceholder}: { + name: string[], + label: string, + initialValue: { [key: string]: string }[], + keyPlaceholder: string, + valuePlaceholder: string +}) => + + {(subFields, subOpt) => ( + <> + {subFields.map((subField, index) => ( + + + + + + + + + + + + + + subOpt.remove(subField.name)} + /> + {index === subFields.length - 1 && subOpt.add()}/>} + + + + ))} + + )} + + export default function EppConnectorForm() { return <> @@ -45,7 +95,7 @@ export default function EppConnectorForm() { name={['authData', 'hostname']} hasFeedback rules={[{required: true, message: t`Required`}]}> - } addonAfter={ - + } placeholder={t`Username`} autoComplete='off' required/> @@ -78,7 +128,7 @@ export default function EppConnectorForm() { hasFeedback rules={[{required: true, message: t`Required`}]} > - + } placeholder={t`Password`} autoComplete='off' required/> @@ -89,15 +139,7 @@ export default function EppConnectorForm() { - value.trim().startsWith('-----BEGIN CERTIFICATE-----') && value.trim().endsWith('-----END CERTIFICATE-----') ? - Promise.resolve() : - Promise.reject(new Error(t`The private key format is invalid`)) - }]} - > + name={['authData', 'certificate_pem']}> @@ -105,12 +147,13 @@ export default function EppConnectorForm() { - +-----END ENCRYPTED PRIVATE KEY-----`}/> - + } placeholder={t`Private key passphrase (optional)`} + autoComplete='off'/> @@ -161,7 +204,7 @@ export default function EppConnectorForm() { }]} name={['authData', 'domain', 'period']} > - } addonAfter={ + } required/> @@ -188,27 +231,39 @@ export default function EppConnectorForm() { required rules={[{required: true, message: t`Required`}]} name={['authData', 'domain', 'registrant']}> - + } placeholder={t`Registrant`} required/> - + } placeholder={t`Administrative`}/> - + } placeholder={t`Technical`}/> - + } placeholder={t`Billing`}/> + + + + + + } \ No newline at end of file diff --git a/src/Dto/Connector/EppClientProviderDto.php b/src/Dto/Connector/EppClientProviderDto.php index c385523..294a75d 100644 --- a/src/Dto/Connector/EppClientProviderDto.php +++ b/src/Dto/Connector/EppClientProviderDto.php @@ -26,12 +26,6 @@ final class EppClientProviderDto extends DefaultProviderDto #[Assert\NotBlank] public EppClientProviderDomainDto $domain; - #[Assert\All([ - new Assert\NotBlank(), - new Assert\Type('string'), - ])] - public array $xPathURI = []; - #[Assert\All([ new Assert\NotBlank(), new Assert\Type('string'), diff --git a/src/Service/Connector/EppClientProvider.php b/src/Service/Connector/EppClientProvider.php index bdff0cf..ec6f800 100644 --- a/src/Service/Connector/EppClientProvider.php +++ b/src/Service/Connector/EppClientProvider.php @@ -155,7 +155,6 @@ class EppClientProvider extends AbstractProvider implements CheckDomainProviderI $conn->setSslContext(stream_context_create(['ssl' => $this->authData['auth']['ssl']])); } - $conn->setXpathExtensions($this->authData['xPathURI']); $conn->setExtensions($this->authData['extURI']); $conn->setServices($this->authData['objURI']);