From d599de197b4263d6d84ab7bfd842c2eb990c8c6d Mon Sep 17 00:00:00 2001 From: Owen Date: Wed, 21 Oct 2026 10:38:02 -0400 Subject: [PATCH] Fix credential regeneration --- .../[remoteExitNodeId]/credentials/page.tsx | 86 ++++++++++--------- .../remote-exit-nodes/create/page.tsx | 8 +- 2 files changed, 51 insertions(+), 43 deletions(-) diff --git a/src/app/[orgId]/settings/(private)/remote-exit-nodes/[remoteExitNodeId]/credentials/page.tsx b/src/app/[orgId]/settings/(private)/remote-exit-nodes/[remoteExitNodeId]/credentials/page.tsx index 24efde738..00cf4e775 100644 --- a/src/app/[orgId]/settings/(private)/remote-exit-nodes/[remoteExitNodeId]/credentials/page.tsx +++ b/src/app/[orgId]/settings/(private)/remote-exit-nodes/[remoteExitNodeId]/credentials/page.tsx @@ -17,10 +17,7 @@ import { toast } from "@app/hooks/useToast"; import { useParams, useRouter } from "next/navigation"; import { AxiosResponse } from "axios"; import { useTranslations } from "next-intl"; -import { - PickRemoteExitNodeDefaultsResponse, - QuickStartRemoteExitNodeResponse -} from "@server/routers/remoteExitNode/types"; +import { PickRemoteExitNodeDefaultsResponse } from "@server/routers/remoteExitNode/types"; import { useRemoteExitNodeContext } from "@app/hooks/useRemoteExitNodeContext"; import ConfirmDeleteDialog from "@app/components/ConfirmDeleteDialog"; import { @@ -30,8 +27,10 @@ import { InfoSectionTitle } from "@app/components/InfoSection"; import CopyToClipboard from "@app/components/CopyToClipboard"; +import CopyTextBox from "@app/components/CopyTextBox"; import { Alert, AlertDescription, AlertTitle } from "@app/components/ui/alert"; import { InfoIcon } from "lucide-react"; +import { build } from "@server/build"; export default function CredentialsPage() { const { env } = useEnvContext(); @@ -42,11 +41,6 @@ export default function CredentialsPage() { const { remoteExitNode } = useRemoteExitNodeContext(); const [modalOpen, setModalOpen] = useState(false); - const [credentials, setCredentials] = - useState(null); - const [currentRemoteExitNodeId, setCurrentRemoteExitNodeId] = useState< - string | null - >(remoteExitNode.remoteExitNodeId); const [regeneratedSecret, setRegeneratedSecret] = useState( null ); @@ -60,28 +54,19 @@ export default function CredentialsPage() { >(`/org/${orgId}/pick-remote-exit-node-defaults`); const data = response.data.data; - setCredentials(data); - const rekeyRes = await api.put< - AxiosResponse - >(`/re-key/${orgId}/regenerate-remote-exit-node-secret`, { - remoteExitNodeId: remoteExitNode.remoteExitNodeId, - secret: data.secret, - disconnect: shouldDisconnect - }); - - if (rekeyRes && rekeyRes.status === 200) { - const rekeyData = rekeyRes.data.data; - if (rekeyData && rekeyData.remoteExitNodeId) { - setCurrentRemoteExitNodeId(rekeyData.remoteExitNodeId); - setRegeneratedSecret(data.secret); - setCredentials({ - ...data, - remoteExitNodeId: rekeyData.remoteExitNodeId - }); - setShowCredentialsAlert(true); + // Only the secret is rotated; the node keeps its existing ID + await api.put( + `/re-key/${orgId}/regenerate-remote-exit-node-secret`, + { + remoteExitNodeId: remoteExitNode.remoteExitNodeId, + secret: data.secret, + disconnect: shouldDisconnect } - } + ); + + setRegeneratedSecret(data.secret); + setShowCredentialsAlert(true); toast({ title: t("credentialsSaved"), @@ -107,9 +92,9 @@ export default function CredentialsPage() { ); }; - const displayRemoteExitNodeId = - currentRemoteExitNodeId || remoteExitNode?.remoteExitNodeId || null; + const displayRemoteExitNodeId = remoteExitNode?.remoteExitNodeId || null; const displaySecret = regeneratedSecret || null; + const showEndpoint = build !== "saas"; return ( <> @@ -124,17 +109,19 @@ export default function CredentialsPage() { - - - - {t("endpoint")} - - - - - + + {showEndpoint && ( + + + {t("endpoint")} + + + + + + )} {t("remoteExitNodeId")} @@ -165,6 +152,21 @@ export default function CredentialsPage() { + {displaySecret && ( +
+ +
+ )} + {showCredentialsAlert && displaySecret && ( diff --git a/src/app/[orgId]/settings/(private)/remote-exit-nodes/create/page.tsx b/src/app/[orgId]/settings/(private)/remote-exit-nodes/create/page.tsx index 13c62a3e7..00c6add4b 100644 --- a/src/app/[orgId]/settings/(private)/remote-exit-nodes/create/page.tsx +++ b/src/app/[orgId]/settings/(private)/remote-exit-nodes/create/page.tsx @@ -37,6 +37,7 @@ import { useParams, useRouter, useSearchParams } from "next/navigation"; import { useTranslations } from "next-intl"; import HeaderTitle from "@app/components/SettingsSectionTitle"; import { StrategySelect } from "@app/components/StrategySelect"; +import { build } from "@server/build"; export default function CreateRemoteExitNodePage() { const { env } = useEnvContext(); @@ -315,7 +316,12 @@ export default function CreateRemoteExitNodePage() {