mirror of
https://github.com/fosrl/pangolin.git
synced 2026-03-06 18:56:39 +00:00
Move exit node comms to new file
This commit is contained in:
@@ -1,6 +1,3 @@
|
||||
import next from "next";
|
||||
import express from "express";
|
||||
import { parse } from "url";
|
||||
import logger from "@server/logger";
|
||||
import config from "@server/lib/config";
|
||||
import { createWebSocketClient } from "./routers/ws/client";
|
||||
@@ -9,6 +6,7 @@ import { db, exitNodes } from "./db";
|
||||
import { TraefikConfigManager } from "./lib/remoteTraefikConfig";
|
||||
import { tokenManager } from "./lib/tokenManager";
|
||||
import { APP_VERSION } from "./lib/consts";
|
||||
import axios from "axios";
|
||||
|
||||
export async function createHybridClientServer() {
|
||||
logger.info("Starting hybrid client server...");
|
||||
@@ -34,7 +32,7 @@ export async function createHybridClientServer() {
|
||||
);
|
||||
|
||||
// Register message handlers
|
||||
client.registerHandler("remote/peers/add", async (message) => {
|
||||
client.registerHandler("remoteExitNode/peers/add", async (message) => {
|
||||
const { pubKey, allowedIps } = message.data;
|
||||
|
||||
// TODO: we are getting the exit node twice here
|
||||
@@ -46,7 +44,7 @@ export async function createHybridClientServer() {
|
||||
});
|
||||
});
|
||||
|
||||
client.registerHandler("remote/peers/remove", async (message) => {
|
||||
client.registerHandler("remoteExitNode/peers/remove", async (message) => {
|
||||
const { pubKey } = message.data;
|
||||
|
||||
// TODO: we are getting the exit node twice here
|
||||
@@ -55,7 +53,69 @@ export async function createHybridClientServer() {
|
||||
await deletePeer(exitNode.exitNodeId, pubKey);
|
||||
});
|
||||
|
||||
client.registerHandler("remote/traefik/reload", async (message) => {
|
||||
// /update-proxy-mapping
|
||||
client.registerHandler("remoteExitNode/update-proxy-mapping", async (message) => {
|
||||
try {
|
||||
const [exitNode] = await db.select().from(exitNodes).limit(1);
|
||||
if (!exitNode) {
|
||||
logger.error("No exit node found for proxy mapping update");
|
||||
return;
|
||||
}
|
||||
|
||||
const response = await axios.post(`${exitNode.endpoint}/update-proxy-mapping`, message.data);
|
||||
logger.info(`Successfully updated proxy mapping: ${response.status}`);
|
||||
} catch (error) {
|
||||
// Extract useful information from axios error without circular references
|
||||
if (error && typeof error === 'object' && 'response' in error) {
|
||||
const axiosError = error as any;
|
||||
logger.error("Failed to update proxy mapping:", {
|
||||
status: axiosError.response?.status,
|
||||
statusText: axiosError.response?.statusText,
|
||||
data: axiosError.response?.data,
|
||||
message: axiosError.message,
|
||||
url: axiosError.config?.url
|
||||
});
|
||||
} else {
|
||||
logger.error("Failed to update proxy mapping:", {
|
||||
message: error instanceof Error ? error.message : String(error),
|
||||
stack: error instanceof Error ? error.stack : undefined
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// /update-destinations
|
||||
client.registerHandler("remoteExitNode/update-destinations", async (message) => {
|
||||
try {
|
||||
const [exitNode] = await db.select().from(exitNodes).limit(1);
|
||||
if (!exitNode) {
|
||||
logger.error("No exit node found for destinations update");
|
||||
return;
|
||||
}
|
||||
|
||||
const response = await axios.post(`${exitNode.endpoint}/update-destinations`, message.data);
|
||||
logger.info(`Successfully updated destinations: ${response.status}`);
|
||||
} catch (error) {
|
||||
// Extract useful information from axios error without circular references
|
||||
if (error && typeof error === 'object' && 'response' in error) {
|
||||
const axiosError = error as any;
|
||||
logger.error("Failed to update destinations:", {
|
||||
status: axiosError.response?.status,
|
||||
statusText: axiosError.response?.statusText,
|
||||
data: axiosError.response?.data,
|
||||
message: axiosError.message,
|
||||
url: axiosError.config?.url
|
||||
});
|
||||
} else {
|
||||
logger.error("Failed to update proxy mapping:", {
|
||||
message: error instanceof Error ? error.message : String(error),
|
||||
stack: error instanceof Error ? error.stack : undefined
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
client.registerHandler("remoteExitNode/traefik/reload", async (message) => {
|
||||
await monitor.HandleTraefikConfig();
|
||||
});
|
||||
|
||||
@@ -72,7 +132,9 @@ export async function createHybridClientServer() {
|
||||
});
|
||||
|
||||
client.on("message", (message) => {
|
||||
logger.info(`Received message: ${message.type} ${JSON.stringify(message.data)}`);
|
||||
logger.info(
|
||||
`Received message: ${message.type} ${JSON.stringify(message.data)}`
|
||||
);
|
||||
});
|
||||
|
||||
// Connect to the server
|
||||
|
||||
Reference in New Issue
Block a user