From e6cb35b7c2dc45349a9cf0819aa21228aea03e26 Mon Sep 17 00:00:00 2001 From: Meier Lukas Date: Sun, 15 Jun 2025 21:42:25 +0200 Subject: [PATCH] feat(integrations): add support for self-signed-cert-in-chain request error (#3399) --- .../test-connection-certificate.tsx | 17 ++++++++++++----- .../integration/map-test-connection-error.ts | 2 ++ .../common/src/errors/http/request-error.ts | 7 ++++++- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/apps/nextjs/src/app/[locale]/manage/integrations/_components/test-connection/test-connection-certificate.tsx b/apps/nextjs/src/app/[locale]/manage/integrations/_components/test-connection/test-connection-certificate.tsx index a84302b55..1a9de69a6 100644 --- a/apps/nextjs/src/app/[locale]/manage/integrations/_components/test-connection/test-connection-certificate.tsx +++ b/apps/nextjs/src/app/[locale]/manage/integrations/_components/test-connection/test-connection-certificate.tsx @@ -30,6 +30,8 @@ export const CertificateErrorDetails = ({ error, url }: CertificateErrorDetailsP const { mutateAsync: trustHostnameAsync } = clientApi.certificates.trustHostnameMismatch.useMutation(); const { mutateAsync: addCertificateAsync } = clientApi.certificates.addCertificate.useMutation(); + const rootCertificate = getHeighestCertificate(error.data.certificate); + const handleTrustHostname = () => { const { hostname } = new URL(url); openConfirmModal({ @@ -72,7 +74,7 @@ export const CertificateErrorDetails = ({ error, url }: CertificateErrorDetailsP const formData = new FormData(); formData.append( "file", - new File([error.data.certificate.pem], `${hostname}-${createId()}.crt`, { + new File([rootCertificate.pem], `${hostname}-${createId()}.crt`, { type: "application/x-x509-ca-cert", }), ); @@ -110,11 +112,11 @@ export const CertificateErrorDetails = ({ error, url }: CertificateErrorDetailsP <> {description} - + {error.data.reason === "hostnameMismatch" && } - {!error.data.certificate.isSelfSigned && error.data.reason === "untrusted" && } + {!rootCertificate.isSelfSigned && error.data.reason === "untrusted" && } {showRetryButton && (