diff --git a/server/routers/client/targets.ts b/server/routers/client/targets.ts index 29380010..c94cb680 100644 --- a/server/routers/client/targets.ts +++ b/server/routers/client/targets.ts @@ -86,3 +86,33 @@ export async function removeRemoteSubnets( } }); } + +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 + } + }); +} diff --git a/server/routers/siteResource/updateSiteResource.ts b/server/routers/siteResource/updateSiteResource.ts index 70f0d712..2e2c1592 100644 --- a/server/routers/siteResource/updateSiteResource.ts +++ b/server/routers/siteResource/updateSiteResource.ts @@ -18,11 +18,13 @@ import { fromError } from "zod-validation-error"; import logger from "@server/logger"; import { OpenAPITags, registry } from "@server/openApi"; import { - addRemoteSubnets, - removeRemoteSubnets, + updateRemoteSubnets, updateTargets } from "@server/routers/client/targets"; -import { generateRemoteSubnets, generateSubnetProxyTargets } from "@server/lib/ip"; +import { + generateRemoteSubnets, + generateSubnetProxyTargets +} from "@server/lib/ip"; import { getClientSiteResourceAccess, rebuildClientAssociations @@ -261,19 +263,20 @@ export async function updateSiteResource( }); let olmJobs: Promise[] = []; - for (const client of mergedAllClients) { // we also need to update the remote subnets on the olms for each client that has access to this site + for (const client of mergedAllClients) { + // we also need to update the remote subnets on the olms for each client that has access to this site olmJobs.push( - removeRemoteSubnets( + updateRemoteSubnets( client.clientId, updatedSiteResource.siteId, - generateRemoteSubnets([existingSiteResource]) - ) - ); - olmJobs.push( - addRemoteSubnets( - client.clientId, - updatedSiteResource.siteId, - generateRemoteSubnets([updatedSiteResource]) + { + oldRemoteSubnets: generateRemoteSubnets([ + existingSiteResource + ]), + newRemoteSubnets: generateRemoteSubnets([ + updatedSiteResource + ]) + } ) ); }