mirror of
https://github.com/fosrl/pangolin.git
synced 2025-07-29 07:04:39 +02:00
Handle port correctly
This commit is contained in:
parent
a57d32d05d
commit
757d628bc8
3 changed files with 30 additions and 1 deletions
|
@ -32,6 +32,11 @@ gerbil:
|
||||||
site_block_size: 30
|
site_block_size: 30
|
||||||
subnet_group: 100.89.137.0/20
|
subnet_group: 100.89.137.0/20
|
||||||
|
|
||||||
|
wg_site:
|
||||||
|
start_port: 51820
|
||||||
|
block_size: 24
|
||||||
|
subnet_group: 100.89.137.0/20
|
||||||
|
|
||||||
rate_limits:
|
rate_limits:
|
||||||
global:
|
global:
|
||||||
window_minutes: 1
|
window_minutes: 1
|
||||||
|
|
|
@ -12,6 +12,7 @@ import {
|
||||||
} from "@server/lib/consts";
|
} from "@server/lib/consts";
|
||||||
import { passwordSchema } from "@server/auth/passwordSchema";
|
import { passwordSchema } from "@server/auth/passwordSchema";
|
||||||
import stoi from "./stoi";
|
import stoi from "./stoi";
|
||||||
|
import { start } from "repl";
|
||||||
|
|
||||||
const portSchema = z.number().positive().gt(0).lte(65535);
|
const portSchema = z.number().positive().gt(0).lte(65535);
|
||||||
const hostnameSchema = z
|
const hostnameSchema = z
|
||||||
|
@ -112,6 +113,7 @@ const configSchema = z.object({
|
||||||
wg_site: z.object({
|
wg_site: z.object({
|
||||||
block_size: z.number().positive().gt(0),
|
block_size: z.number().positive().gt(0),
|
||||||
subnet_group: z.string(),
|
subnet_group: z.string(),
|
||||||
|
start_port: portSchema
|
||||||
}),
|
}),
|
||||||
rate_limits: z.object({
|
rate_limits: z.object({
|
||||||
global: z.object({
|
global: z.object({
|
||||||
|
|
|
@ -41,7 +41,7 @@ export const handleGetConfigMessage: MessageHandler = async (context) => {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { publicKey, endpoint, listenPort } = message.data as Input;
|
const { publicKey, endpoint } = message.data as Input;
|
||||||
|
|
||||||
const siteId = newt.siteId;
|
const siteId = newt.siteId;
|
||||||
|
|
||||||
|
@ -58,6 +58,7 @@ export const handleGetConfigMessage: MessageHandler = async (context) => {
|
||||||
let site: Site | undefined;
|
let site: Site | undefined;
|
||||||
if (!site) {
|
if (!site) {
|
||||||
const address = await getNextAvailableSubnet();
|
const address = await getNextAvailableSubnet();
|
||||||
|
const listenPort = await getNextAvailablePort();
|
||||||
|
|
||||||
// create a new exit node
|
// create a new exit node
|
||||||
const [updateRes] = await db
|
const [updateRes] = await db
|
||||||
|
@ -146,3 +147,24 @@ async function getNextAvailableSubnet(): Promise<string> {
|
||||||
subnet.split("/")[1];
|
subnet.split("/")[1];
|
||||||
return subnet;
|
return subnet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function getNextAvailablePort(): Promise<number> {
|
||||||
|
// Get all existing ports from exitNodes table
|
||||||
|
const existingPorts = await db.select({
|
||||||
|
listenPort: sites.listenPort,
|
||||||
|
}).from(sites);
|
||||||
|
|
||||||
|
// Find the first available port between 1024 and 65535
|
||||||
|
let nextPort = config.getRawConfig().wg_site.start_port;
|
||||||
|
for (const port of existingPorts) {
|
||||||
|
if (port.listenPort && port.listenPort > nextPort) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
nextPort++;
|
||||||
|
if (nextPort > 65535) {
|
||||||
|
throw new Error('No available ports remaining in space');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nextPort;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue