mirror of
https://github.com/fosrl/pangolin.git
synced 2026-07-06 12:19:50 +00:00
include exit node endpoint in tcp/udp resources
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
import { formatEndpoint, parseEndpoint } from "@server/lib/ip";
|
||||||
|
|
||||||
export type SiteResourceDestinationInput = {
|
export type SiteResourceDestinationInput = {
|
||||||
mode: "host" | "cidr" | "http" | "ssh";
|
mode: "host" | "cidr" | "http" | "ssh";
|
||||||
destination: string | null;
|
destination: string | null;
|
||||||
@@ -40,6 +42,7 @@ export type PublicResourceAccessInput = {
|
|||||||
ssl: boolean;
|
ssl: boolean;
|
||||||
proxyPort: number | null;
|
proxyPort: number | null;
|
||||||
wildcard: boolean;
|
wildcard: boolean;
|
||||||
|
exitNodeEndpoint?: string | null;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type SiteResourceAccessInput = {
|
export type SiteResourceAccessInput = {
|
||||||
@@ -59,12 +62,20 @@ export type LauncherAccessFields = {
|
|||||||
accessUrl: string | null;
|
accessUrl: string | null;
|
||||||
};
|
};
|
||||||
|
|
||||||
export function formatPublicResourceAccess(
|
function formatTcpUdpResourceAccess(
|
||||||
resource: PublicResourceAccessInput
|
exitNodeEndpoint: string | null | undefined,
|
||||||
|
proxyPort: number | null
|
||||||
): LauncherAccessFields {
|
): LauncherAccessFields {
|
||||||
const browserModes = ["http", "ssh", "rdp", "vnc"];
|
if (proxyPort == null) {
|
||||||
if (!browserModes.includes(resource.mode)) {
|
return {
|
||||||
const port = resource.proxyPort?.toString() ?? "";
|
accessDisplay: "",
|
||||||
|
accessCopyValue: "",
|
||||||
|
accessUrl: null
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!exitNodeEndpoint?.trim()) {
|
||||||
|
const port = proxyPort.toString();
|
||||||
return {
|
return {
|
||||||
accessDisplay: port,
|
accessDisplay: port,
|
||||||
accessCopyValue: 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) {
|
if (!resource.fullDomain) {
|
||||||
return {
|
return {
|
||||||
accessDisplay: "",
|
accessDisplay: "",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { db } from "@server/db";
|
import { db } from "@server/db";
|
||||||
import {
|
import {
|
||||||
|
exitNodes,
|
||||||
labels,
|
labels,
|
||||||
launcherViews,
|
launcherViews,
|
||||||
resourceLabels,
|
resourceLabels,
|
||||||
@@ -860,11 +861,13 @@ async function mapPublicResources(
|
|||||||
siteId: sites.siteId,
|
siteId: sites.siteId,
|
||||||
siteName: sites.name,
|
siteName: sites.name,
|
||||||
siteType: sites.type,
|
siteType: sites.type,
|
||||||
siteOnline: sites.online
|
siteOnline: sites.online,
|
||||||
|
exitNodeEndpoint: exitNodes.endpoint
|
||||||
})
|
})
|
||||||
.from(resources)
|
.from(resources)
|
||||||
.leftJoin(targets, eq(targets.resourceId, resources.resourceId))
|
.leftJoin(targets, eq(targets.resourceId, resources.resourceId))
|
||||||
.leftJoin(sites, eq(targets.siteId, sites.siteId))
|
.leftJoin(sites, eq(targets.siteId, sites.siteId))
|
||||||
|
.leftJoin(exitNodes, eq(sites.exitNodeId, exitNodes.exitNodeId))
|
||||||
.where(
|
.where(
|
||||||
and(
|
and(
|
||||||
inArray(resources.resourceId, resourceIds),
|
inArray(resources.resourceId, resourceIds),
|
||||||
@@ -891,7 +894,8 @@ async function mapPublicResources(
|
|||||||
fullDomain: row.fullDomain,
|
fullDomain: row.fullDomain,
|
||||||
ssl: row.ssl,
|
ssl: row.ssl,
|
||||||
proxyPort: row.proxyPort,
|
proxyPort: row.proxyPort,
|
||||||
wildcard: row.wildcard
|
wildcard: row.wildcard,
|
||||||
|
exitNodeEndpoint: row.exitNodeEndpoint
|
||||||
});
|
});
|
||||||
|
|
||||||
result.push({
|
result.push({
|
||||||
|
|||||||
Reference in New Issue
Block a user