From 371292104831b2a9eda802fc3aff51fc7f0cf3fe Mon Sep 17 00:00:00 2001 From: TiltedTeapot Date: Tue, 6 Oct 2026 18:07:27 -0600 Subject: [PATCH] Propogated Changes. listen port is now accessed from db instead of config --- server/lib/exitNodes/exitNodes.ts | 1 + server/lib/rebuildClientAssociations.ts | 9 +++++---- server/private/routers/gerbil/createExitNode.ts | 2 ++ .../remoteExitNode/createRemoteExitNode.ts | 6 ++---- server/routers/newt/buildConfiguration.ts | 6 +++++- server/routers/olm/buildConfiguration.ts | 4 +--- server/routers/olm/getOlmToken.ts | 5 ++--- server/routers/olm/handleOlmRelayMessage.ts | 15 ++++++++------- .../olm/handleOlmServerInitAddPeerHandshake.ts | 1 + server/routers/olm/peers.ts | 8 ++++---- server/routers/olm/sync.ts | 3 +-- server/setup/copyInConfig.ts | 7 ++++++- 12 files changed, 38 insertions(+), 29 deletions(-) diff --git a/server/lib/exitNodes/exitNodes.ts b/server/lib/exitNodes/exitNodes.ts index 12947c1d5..cd0afbf7a 100644 --- a/server/lib/exitNodes/exitNodes.ts +++ b/server/lib/exitNodes/exitNodes.ts @@ -36,6 +36,7 @@ export async function listExitNodes( endpoint: exitNodes.endpoint, publicKey: exitNodes.publicKey, listenPort: exitNodes.listenPort, + relayPort: exitNodes.relayPort, reachableAt: exitNodes.reachableAt, maxConnections: exitNodes.maxConnections, online: exitNodes.online, diff --git a/server/lib/rebuildClientAssociations.ts b/server/lib/rebuildClientAssociations.ts index 02b84c993..b5a164c51 100644 --- a/server/lib/rebuildClientAssociations.ts +++ b/server/lib/rebuildClientAssociations.ts @@ -34,7 +34,6 @@ import { import { sendToExitNode } from "#dynamic/lib/exitNodes"; import { sendToClientsBatch } from "#dynamic/routers/ws"; import { canCompress } from "@server/lib/clientVersionChecks"; -import config from "@server/lib/config"; import logger from "@server/logger"; import { generateAliasConfig, @@ -816,6 +815,7 @@ async function handleMessagesForSiteClients( siteId: number; exitNode: { publicKey: string; + relayPort: number; endpoint: string; }; }; @@ -961,6 +961,7 @@ async function handleMessagesForSiteClients( siteId, exitNode: { publicKey: exitNode.publicKey, + relayPort: exitNode.relayPort, endpoint: exitNode.endpoint } }, @@ -1238,8 +1239,6 @@ async function syncClientExitNodeConnections( .map((r) => [r.clientId as number, r]) ); - const relayPort = config.getRawConfig().gerbil.clients_start_port; - const connectPayloads: { clientId: string; message: { type: string; data: any }; @@ -1278,7 +1277,7 @@ async function syncClientExitNodeConnections( data: { connect: true, endpoint: `${exitNode.endpoint}:${exitNode.listenPort}`, - relayPort, + relayPort: exitNode.relayPort, publicKey: exitNode.publicKey, serverIP: exitNode.address.split("/")[0], tunnelIP: client.exitNodeSubnet.split("/")[0], @@ -2451,6 +2450,7 @@ async function handleMessagesForClientSites( siteId: number; exitNode: { publicKey: string; + relayPort: number; endpoint: string; }; }; @@ -2550,6 +2550,7 @@ async function handleMessagesForClientSites( siteId: site.siteId, exitNode: { publicKey: exitNode.publicKey, + relayPort: exitNode.relayPort, endpoint: exitNode.endpoint } }, diff --git a/server/private/routers/gerbil/createExitNode.ts b/server/private/routers/gerbil/createExitNode.ts index c2ad1d517..f0cdb54d4 100644 --- a/server/private/routers/gerbil/createExitNode.ts +++ b/server/private/routers/gerbil/createExitNode.ts @@ -34,6 +34,7 @@ export async function createExitNode( // TODO: eventually we will want to get the next available port so that we can multiple exit nodes // const listenPort = await getNextAvailablePort(); const listenPort = config.getRawConfig().gerbil.start_port; + const relayPort = config.getRawConfig().gerbil.clients_start_port; const exitNodeName = config.getRawConfig().gerbil.exit_node_name || @@ -49,6 +50,7 @@ export async function createExitNode( privateConfig.getRawPrivateConfig().app.region || null, address, listenPort, + relayPort, online: true, reachableAt, name: exitNodeName diff --git a/server/private/routers/remoteExitNode/createRemoteExitNode.ts b/server/private/routers/remoteExitNode/createRemoteExitNode.ts index 3462e13ff..96d8262e6 100644 --- a/server/private/routers/remoteExitNode/createRemoteExitNode.ts +++ b/server/private/routers/remoteExitNode/createRemoteExitNode.ts @@ -201,10 +201,7 @@ export async function createRemoteExitNode( let releaseSubnetLock: (() => Promise) | null = null; let newExitNodeAddress: string | null = null; if (!existingExitNode) { - const { value, release } = await getNextAvailableSubnet( - db, - orgId - ); + const { value, release } = await getNextAvailableSubnet(db, orgId); newExitNodeAddress = value; releaseSubnetLock = release; } @@ -220,6 +217,7 @@ export async function createRemoteExitNode( endpoint: "", publicKey: "", listenPort: 0, + relayPort: 0, online: false, type: "remoteExitNode" }) diff --git a/server/routers/newt/buildConfiguration.ts b/server/routers/newt/buildConfiguration.ts index 6dece5dfa..7c3b13207 100644 --- a/server/routers/newt/buildConfiguration.ts +++ b/server/routers/newt/buildConfiguration.ts @@ -96,7 +96,10 @@ export async function buildClientConfigurationForNewtClient( await updatePeer(client.clients.clientId, { siteId: site.siteId, endpoint: site.endpoint!, - relayEndpoint: formatEndpoint(exitNode.endpoint, config.getRawConfig().gerbil.clients_start_port), + relayEndpoint: formatEndpoint( + exitNode.endpoint, + exitNode.relayPort + ), publicKey: site.publicKey!, serverIP: site.address, serverPort: site.listenPort @@ -121,6 +124,7 @@ export async function buildClientConfigurationForNewtClient( siteId, exitNode: { publicKey: exitNode.publicKey, + relayPort: exitNode.relayPort, endpoint: exitNode.endpoint } } diff --git a/server/routers/olm/buildConfiguration.ts b/server/routers/olm/buildConfiguration.ts index bd82e43ad..79f2fc248 100644 --- a/server/routers/olm/buildConfiguration.ts +++ b/server/routers/olm/buildConfiguration.ts @@ -18,7 +18,6 @@ import { import logger from "@server/logger"; import { and, eq, inArray } from "drizzle-orm"; import { addPeer, deletePeer } from "../newt/peers"; -import config from "@server/lib/config"; import { SiR } from "react-icons/si"; export async function buildSiteConfigurationForOlmClient( @@ -129,7 +128,6 @@ export async function buildSiteConfigurationForOlmClient( } } - const clientsStartPort = config.getRawConfig().gerbil.clients_start_port; const peerOps: Promise[] = []; // Process each site @@ -216,7 +214,7 @@ export async function buildSiteConfigurationForOlmClient( logger.warn(`Exit node not found for site ${site.siteId}`); continue; } - relayEndpoint = `${exitNode.endpoint}:${clientsStartPort}`; + relayEndpoint = `${exitNode.endpoint}:${exitNode.relayPort}`; } // Add site configuration to the array diff --git a/server/routers/olm/getOlmToken.ts b/server/routers/olm/getOlmToken.ts index 7808b558b..4cfdb1b56 100644 --- a/server/routers/olm/getOlmToken.ts +++ b/server/routers/olm/getOlmToken.ts @@ -289,7 +289,7 @@ export async function getOlmToken( let exitNodesHpData = allExitNodes.map((exitNode: ExitNode) => { return { publicKey: exitNode.publicKey, - relayPort: config.getRawConfig().gerbil.clients_start_port, + relayPort: exitNode.relayPort, endpoint: exitNode.endpoint, siteIds: exitNodeIdToSiteIds[exitNode.exitNodeId] ?? [] }; @@ -347,8 +347,7 @@ export async function getOlmToken( exitNodesHpData = [ { publicKey: best.publicKey, - relayPort: - config.getRawConfig().gerbil.clients_start_port, + relayPort: best.relayPort, endpoint: best.endpoint, siteIds: [] // it should still HP without the site ids but it will get stuck in the client diff --git a/server/routers/olm/handleOlmRelayMessage.ts b/server/routers/olm/handleOlmRelayMessage.ts index 1cd27912b..ce71ac2fd 100644 --- a/server/routers/olm/handleOlmRelayMessage.ts +++ b/server/routers/olm/handleOlmRelayMessage.ts @@ -4,7 +4,6 @@ import { clients, clientSitesAssociationsCache, Olm } from "@server/db"; import { and, eq, inArray } from "drizzle-orm"; import { updatePeersBatch } from "../newt/peers"; import logger from "@server/logger"; -import config from "@server/lib/config"; import { parseSiteChainBatch, resolveNewtIdsBySite } from "./batchUtils"; export const handleOlmRelayMessage: MessageHandler = async (context) => { @@ -77,6 +76,7 @@ export const handleOlmRelayMessage: MessageHandler = async (context) => { siteId: number; chainId?: string; relayEndpoint: string; + relayPort: number; }[] = []; for (let i = 0; i < siteIds.length; i++) { @@ -97,7 +97,8 @@ export const handleOlmRelayMessage: MessageHandler = async (context) => { valid.push({ siteId, chainId: chainIds[i], - relayEndpoint: exitNode.endpoint + relayEndpoint: exitNode.endpoint, + relayPort: exitNode.relayPort }); } @@ -121,7 +122,9 @@ export const handleOlmRelayMessage: MessageHandler = async (context) => { ); // Only ack sites we can actually tell their newt to relay for - const newtIdBySiteId = await resolveNewtIdsBySite(valid.map((v) => v.siteId)); + const newtIdBySiteId = await resolveNewtIdsBySite( + valid.map((v) => v.siteId) + ); const pushable = valid.filter((v) => { if (!newtIdBySiteId.has(v.siteId)) { logger.warn(`Newt not found for site ${v.siteId}`); @@ -144,8 +147,6 @@ export const handleOlmRelayMessage: MessageHandler = async (context) => { })) ); - const relayPort = config.getRawConfig().gerbil.clients_start_port; - if (isBatch) { return { message: { @@ -153,7 +154,7 @@ export const handleOlmRelayMessage: MessageHandler = async (context) => { data: { siteIds: pushable.map((v) => v.siteId), relayEndpoints: pushable.map((v) => v.relayEndpoint), - relayPort, + relayPort: pushable.map((v) => v.relayPort), chainIds: pushable.map((v) => v.chainId) } }, @@ -169,7 +170,7 @@ export const handleOlmRelayMessage: MessageHandler = async (context) => { data: { siteId: single.siteId, relayEndpoint: single.relayEndpoint, - relayPort, + relayPort: single.relayPort, chainId: single.chainId } }, diff --git a/server/routers/olm/handleOlmServerInitAddPeerHandshake.ts b/server/routers/olm/handleOlmServerInitAddPeerHandshake.ts index 6bad5b89b..2ede875b2 100644 --- a/server/routers/olm/handleOlmServerInitAddPeerHandshake.ts +++ b/server/routers/olm/handleOlmServerInitAddPeerHandshake.ts @@ -216,6 +216,7 @@ export const handleOlmServerInitAddPeerHandshake: MessageHandler = async ( siteId: site.siteId, exitNode: { publicKey: exitNode.publicKey, + relayPort: exitNode.relayPort, endpoint: exitNode.endpoint } }, diff --git a/server/routers/olm/peers.ts b/server/routers/olm/peers.ts index 960c6ad23..2a8e7b12a 100644 --- a/server/routers/olm/peers.ts +++ b/server/routers/olm/peers.ts @@ -1,7 +1,6 @@ import { sendToClient, sendToClientsBatch } from "#dynamic/routers/ws"; import { clientSitesAssociationsCache, db, olms } from "@server/db"; import { canCompress } from "@server/lib/clientVersionChecks"; -import config from "@server/lib/config"; import logger from "@server/logger"; import { and, eq, inArray } from "drizzle-orm"; import { Alias } from "yaml"; @@ -155,6 +154,7 @@ export async function initPeerAddHandshake( siteId: number; exitNode: { publicKey: string; + relayPort: number; endpoint: string; }; }, @@ -181,7 +181,7 @@ export async function initPeerAddHandshake( siteId: peer.siteId, exitNode: { publicKey: peer.exitNode.publicKey, - relayPort: config.getRawConfig().gerbil.clients_start_port, + relayPort: peer.exitNode.relayPort, endpoint: peer.exitNode.endpoint }, chainId @@ -297,6 +297,7 @@ export async function initPeerAddHandshakeBatch( siteId: number; exitNode: { publicKey: string; + relayPort: number; endpoint: string; }; }; @@ -317,8 +318,7 @@ export async function initPeerAddHandshakeBatch( siteId: item.peer.siteId, exitNode: { publicKey: item.peer.exitNode.publicKey, - relayPort: - config.getRawConfig().gerbil.clients_start_port, + relayPort: item.peer.exitNode.relayPort, endpoint: item.peer.exitNode.endpoint }, chainId: item.chainId diff --git a/server/routers/olm/sync.ts b/server/routers/olm/sync.ts index 5a681fef7..1d060b02b 100644 --- a/server/routers/olm/sync.ts +++ b/server/routers/olm/sync.ts @@ -12,7 +12,6 @@ import { buildSiteConfigurationForOlmClient } from "./buildConfiguration"; import { sendToClient } from "#dynamic/routers/ws"; import logger from "@server/logger"; import { count, eq, inArray } from "drizzle-orm"; -import config from "@server/lib/config"; import { canCompress } from "@server/lib/clientVersionChecks"; import { build } from "@server/build"; @@ -125,7 +124,7 @@ export async function sendOlmSyncMessage(olm: Olm, client: Client) { exitNodesData = allExitNodes.map((exitNode) => { return { publicKey: exitNode.publicKey, - relayPort: config.getRawConfig().gerbil.clients_start_port, + relayPort: exitNode.relayPort, endpoint: exitNode.endpoint, siteIds: exitNodeIdToSiteIds[exitNode.exitNodeId] ?? [] }; diff --git a/server/setup/copyInConfig.ts b/server/setup/copyInConfig.ts index be3768179..fb75417de 100644 --- a/server/setup/copyInConfig.ts +++ b/server/setup/copyInConfig.ts @@ -11,6 +11,7 @@ export async function copyInConfig() { const endpoint = config.getRawConfig().gerbil.base_endpoint; const listenPort = config.getRawConfig().gerbil.start_port; + const relayPort = config.getRawConfig().gerbil.clients_start_port; if ( !config.getRawConfig().flags?.disable_config_managed_domains && @@ -23,7 +24,7 @@ export async function copyInConfig() { if (exitNodeName) { await db .update(exitNodes) - .set({ endpoint, listenPort }) + .set({ endpoint, listenPort, relayPort }) .where(eq(exitNodes.name, exitNodeName)); } else { await db @@ -34,6 +35,10 @@ export async function copyInConfig() { .update(exitNodes) .set({ listenPort }) .where(ne(exitNodes.listenPort, listenPort)); + await db + .update(exitNodes) + .set({ relayPort }) + .where(ne(exitNodes.relayPort, relayPort)); } }