mirror of
https://github.com/fosrl/pangolin.git
synced 2026-02-13 08:26:40 +00:00
119 lines
2.7 KiB
TypeScript
119 lines
2.7 KiB
TypeScript
import { sendToClient } from "#dynamic/routers/ws";
|
|
import { db, olms } from "@server/db";
|
|
import { SubnetProxyTarget } from "@server/lib/ip";
|
|
import { eq } from "drizzle-orm";
|
|
|
|
export async function addTargets(newtId: string, targets: SubnetProxyTarget[]) {
|
|
await sendToClient(newtId, {
|
|
type: `newt/wg/targets/add`,
|
|
data: targets
|
|
});
|
|
}
|
|
|
|
export async function removeTargets(
|
|
newtId: string,
|
|
targets: SubnetProxyTarget[]
|
|
) {
|
|
await sendToClient(newtId, {
|
|
type: `newt/wg/targets/remove`,
|
|
data: targets
|
|
});
|
|
}
|
|
|
|
export async function updateTargets(
|
|
newtId: string,
|
|
targets: {
|
|
oldTargets: SubnetProxyTarget[];
|
|
newTargets: SubnetProxyTarget[];
|
|
}
|
|
) {
|
|
await sendToClient(newtId, {
|
|
type: `newt/wg/targets/update`,
|
|
data: targets
|
|
});
|
|
}
|
|
|
|
export async function addRemoteSubnets(
|
|
clientId: number,
|
|
siteId: number,
|
|
remoteSubnets: string[],
|
|
olmId?: string
|
|
) {
|
|
if (!olmId) {
|
|
const [olm] = await db
|
|
.select()
|
|
.from(olms)
|
|
.where(eq(olms.clientId, clientId))
|
|
.limit(1);
|
|
if (!olm) {
|
|
throw new Error(`Olm with ID ${clientId} not found`);
|
|
}
|
|
olmId = olm.olmId;
|
|
}
|
|
|
|
await sendToClient(olmId, {
|
|
type: `olm/wg/peer/add-remote-subnets`,
|
|
data: {
|
|
siteId: siteId,
|
|
remoteSubnets: remoteSubnets
|
|
}
|
|
});
|
|
}
|
|
|
|
export async function removeRemoteSubnets(
|
|
clientId: number,
|
|
siteId: number,
|
|
remoteSubnets: string[],
|
|
olmId?: string
|
|
) {
|
|
if (!olmId) {
|
|
const [olm] = await db
|
|
.select()
|
|
.from(olms)
|
|
.where(eq(olms.clientId, clientId))
|
|
.limit(1);
|
|
if (!olm) {
|
|
throw new Error(`Olm with ID ${clientId} not found`);
|
|
}
|
|
olmId = olm.olmId;
|
|
}
|
|
|
|
await sendToClient(olmId, {
|
|
type: `olm/wg/peer/remove-remote-subnets`,
|
|
data: {
|
|
siteId: siteId,
|
|
remoteSubnets: remoteSubnets
|
|
}
|
|
});
|
|
}
|
|
|
|
export async function updateRemoteSubnets(
|
|
clientId: number,
|
|
siteId: number,
|
|
remoteSubnets: {
|
|
oldRemoteSubnets: string[],
|
|
newRemoteSubnets: string[]
|
|
},
|
|
olmId?: string
|
|
) {
|
|
if (!olmId) {
|
|
const [olm] = await db
|
|
.select()
|
|
.from(olms)
|
|
.where(eq(olms.clientId, clientId))
|
|
.limit(1);
|
|
if (!olm) {
|
|
throw new Error(`Olm with ID ${clientId} not found`);
|
|
}
|
|
olmId = olm.olmId;
|
|
}
|
|
|
|
await sendToClient(olmId, {
|
|
type: `olm/wg/peer/update-remote-subnets`,
|
|
data: {
|
|
siteId: siteId,
|
|
...remoteSubnets
|
|
}
|
|
});
|
|
}
|