Include get hostname, filter sites fix gerbil conf

This commit is contained in:
Owen 2025-08-17 11:23:43 -07:00
parent 8355d3664e
commit 3b8d1f40a7
No known key found for this signature in database
GPG key ID: 8271FDFFD9E0CCBD
8 changed files with 68 additions and 16 deletions

4
.gitignore vendored
View file

@ -34,6 +34,10 @@ bin
.secrets
test_event.json
.idea/
public/branding
server/db/index.ts
config/openapi.yaml
server/build.ts
postgres/
dynamic/
certificates/

View file

@ -22,8 +22,7 @@ services:
command:
- --reachableAt=http://gerbil:3003
- --generateAndSaveKeyTo=/var/config/key
- --remoteConfig=http://pangolin:3001/api/v1/gerbil/get-config
- --reportBandwidthTo=http://pangolin:3001/api/v1/gerbil/receive-bandwidth
- --remoteConfig=http://pangolin:3001/api/v1/
volumes:
- ./config/:/var/config
cap_add:

View file

@ -22,8 +22,7 @@ services:
command:
- --reachableAt=http://gerbil:3003
- --generateAndSaveKeyTo=/var/config/key
- --remoteConfig=http://pangolin:3001/api/v1/gerbil/get-config
- --reportBandwidthTo=http://pangolin:3001/api/v1/gerbil/receive-bandwidth
- --remoteConfig=http://pangolin:3001/api/v1/
volumes:
- ./config/:/var/config
cap_add:

View file

@ -1,7 +1,7 @@
import { db, exitNodes } from "@server/db";
import logger from "@server/logger";
import { ExitNodePingResult } from "@server/routers/newt";
import { eq, and, or } from "drizzle-orm";
import { eq } from "drizzle-orm";
export async function verifyExitNodeOrgAccess(
exitNodeId: number,
@ -30,7 +30,7 @@ export async function listExitNodes(orgId: string, filterOnline = false) {
maxConnections: exitNodes.maxConnections,
online: exitNodes.online,
lastPing: exitNodes.lastPing,
type: exitNodes.type,
type: exitNodes.type
})
.from(exitNodes);
@ -54,9 +54,6 @@ export function selectBestExitNode(
return pingResults[0];
}
export async function checkExitNodeOrg(
exitNodeId: number,
orgId: string
) {
export async function checkExitNodeOrg(exitNodeId: number, orgId: string) {
return false;
}

View file

@ -0,0 +1,46 @@
import { Request, Response, NextFunction } from "express";
import { z } from "zod";
import HttpCode from "@server/types/HttpCode";
import createHttpError from "http-errors";
import logger from "@server/logger";
import { fromError } from "zod-validation-error";
// Define Zod schema for request validation
const getResolvedHostnameSchema = z.object({
hostname: z.string(),
publicKey: z.string()
});
export async function getResolvedHostname(
req: Request,
res: Response,
next: NextFunction
): Promise<any> {
try {
// Validate request parameters
const parsedParams = getResolvedHostnameSchema.safeParse(
req.body
);
if (!parsedParams.success) {
return next(
createHttpError(
HttpCode.BAD_REQUEST,
fromError(parsedParams.error).toString()
)
);
}
// return the endpoints
return res.status(HttpCode.OK).send({
endpoints: [] // ALWAYS ROUTE LOCALLY
});
} catch (error) {
logger.error(error);
return next(
createHttpError(
HttpCode.INTERNAL_SERVER_ERROR,
"An error occurred..."
)
);
}
}

View file

@ -2,3 +2,4 @@ export * from "./getConfig";
export * from "./receiveBandwidth";
export * from "./updateHolePunch";
export * from "./getAllRelays";
export * from "./getResolvedHostname";

View file

@ -66,6 +66,10 @@ if (config.isHybridMode()) {
proxyToRemote(req, res, next, "hybrid/gerbil/get-all-relays")
);
gerbilRouter.post("/get-resolved-hostname", (req, res, next) =>
proxyToRemote(req, res, next, `hybrid/gerbil/get-resolved-hostname`)
);
// GET CONFIG IS HANDLED IN THE ORIGINAL HANDLER
// SO IT CAN REGISTER THE LOCAL EXIT NODE
} else {
@ -73,6 +77,7 @@ if (config.isHybridMode()) {
gerbilRouter.post("/receive-bandwidth", gerbil.receiveBandwidth);
gerbilRouter.post("/update-hole-punch", gerbil.updateHolePunch);
gerbilRouter.post("/get-all-relays", gerbil.getAllRelays);
gerbilRouter.post("/get-resolved-hostname", gerbil.getResolvedHostname);
}
// WE HANDLE THE PROXY INSIDE OF THIS FUNCTION

View file

@ -45,7 +45,7 @@ export async function traefikConfigProvider(
}
}
let traefikConfig = await getTraefikConfig(currentExitNodeId);
let traefikConfig = await getTraefikConfig(currentExitNodeId, ["newt", "local", "wireguard"]);
traefikConfig.http.middlewares[badgerMiddlewareName] = {
plugin: {
@ -80,7 +80,7 @@ export async function traefikConfigProvider(
}
}
export async function getTraefikConfig(exitNodeId: number): Promise<any> {
export async function getTraefikConfig(exitNodeId: number, siteTypes: string[]): Promise<any> {
// Define extended target type with site information
type TargetWithSite = Target & {
site: {
@ -135,6 +135,7 @@ export async function getTraefikConfig(exitNodeId: number): Promise<any> {
eq(sites.exitNodeId, exitNodeId),
isNull(sites.exitNodeId)
),
inArray(sites.type, siteTypes),
)
);