include exit node endpoint in tcp/udp resources

This commit is contained in:
miloschwartz
2026-06-30 21:54:27 -04:00
parent 376dd465b3
commit f4854a3a74
2 changed files with 44 additions and 7 deletions

View File

@@ -1,3 +1,5 @@
import { formatEndpoint, parseEndpoint } from "@server/lib/ip";
export type SiteResourceDestinationInput = {
mode: "host" | "cidr" | "http" | "ssh";
destination: string | null;
@@ -40,6 +42,7 @@ export type PublicResourceAccessInput = {
ssl: boolean;
proxyPort: number | null;
wildcard: boolean;
exitNodeEndpoint?: string | null;
};
export type SiteResourceAccessInput = {
@@ -59,12 +62,20 @@ export type LauncherAccessFields = {
accessUrl: string | null;
};
export function formatPublicResourceAccess(
resource: PublicResourceAccessInput
function formatTcpUdpResourceAccess(
exitNodeEndpoint: string | null | undefined,
proxyPort: number | null
): LauncherAccessFields {
const browserModes = ["http", "ssh", "rdp", "vnc"];
if (!browserModes.includes(resource.mode)) {
const port = resource.proxyPort?.toString() ?? "";
if (proxyPort == null) {
return {
accessDisplay: "",
accessCopyValue: "",
accessUrl: null
};
}
if (!exitNodeEndpoint?.trim()) {
const port = proxyPort.toString();
return {
accessDisplay: port,
accessCopyValue: port,
@@ -72,6 +83,28 @@ export function formatPublicResourceAccess(
};
}
const parsed = parseEndpoint(exitNodeEndpoint);
const host = parsed?.ip ?? exitNodeEndpoint.trim();
const access = formatEndpoint(host, proxyPort);
return {
accessDisplay: access,
accessCopyValue: access,
accessUrl: null
};
}
export function formatPublicResourceAccess(
resource: PublicResourceAccessInput
): LauncherAccessFields {
const browserModes = ["http", "ssh", "rdp", "vnc"];
if (!browserModes.includes(resource.mode)) {
return formatTcpUdpResourceAccess(
resource.exitNodeEndpoint,
resource.proxyPort
);
}
if (!resource.fullDomain) {
return {
accessDisplay: "",

View File

@@ -1,5 +1,6 @@
import { db } from "@server/db";
import {
exitNodes,
labels,
launcherViews,
resourceLabels,
@@ -860,11 +861,13 @@ async function mapPublicResources(
siteId: sites.siteId,
siteName: sites.name,
siteType: sites.type,
siteOnline: sites.online
siteOnline: sites.online,
exitNodeEndpoint: exitNodes.endpoint
})
.from(resources)
.leftJoin(targets, eq(targets.resourceId, resources.resourceId))
.leftJoin(sites, eq(targets.siteId, sites.siteId))
.leftJoin(exitNodes, eq(sites.exitNodeId, exitNodes.exitNodeId))
.where(
and(
inArray(resources.resourceId, resourceIds),
@@ -891,7 +894,8 @@ async function mapPublicResources(
fullDomain: row.fullDomain,
ssl: row.ssl,
proxyPort: row.proxyPort,
wildcard: row.wildcard
wildcard: row.wildcard,
exitNodeEndpoint: row.exitNodeEndpoint
});
result.push({