mirror of
https://github.com/fosrl/pangolin.git
synced 2026-07-24 14:24:40 +02:00
76 lines
1.8 KiB
TypeScript
76 lines
1.8 KiB
TypeScript
import { sendToClient } from "#dynamic/routers/ws";
|
|
import logger from "@server/logger";
|
|
import {
|
|
canCompress,
|
|
supportsCertReferences
|
|
} from "@server/lib/clientVersionChecks";
|
|
import { CertRef } from "@server/lib/ip";
|
|
|
|
/**
|
|
* Pushes an incremental set of certs to a newt client outside of a full
|
|
* newt/sync or newt/wg/receive-config, e.g. after a certificate renewal so
|
|
* that every target referencing it (by tlsCertId) picks up the new material
|
|
* without waiting for the next full resync.
|
|
*/
|
|
export async function sendCertsAdd(
|
|
newtId: string,
|
|
certs: CertRef[],
|
|
version?: string | null
|
|
) {
|
|
if (certs.length === 0) {
|
|
return;
|
|
}
|
|
|
|
if (!supportsCertReferences(version)) {
|
|
logger.debug(
|
|
`Newt ${newtId} (version ${version}) does not support cert references, skipping certs/add`
|
|
);
|
|
return;
|
|
}
|
|
|
|
await sendToClient(
|
|
newtId,
|
|
{
|
|
type: "newt/certs/add",
|
|
data: certs
|
|
},
|
|
{
|
|
incrementConfigVersion: true,
|
|
compress: canCompress(version, "newt")
|
|
}
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Tells a newt client to drop the given cert IDs, e.g. once the server knows
|
|
* no target references them anymore.
|
|
*/
|
|
export async function sendCertsRemove(
|
|
newtId: string,
|
|
certIds: string[],
|
|
version?: string | null
|
|
) {
|
|
if (certIds.length === 0) {
|
|
return;
|
|
}
|
|
|
|
if (!supportsCertReferences(version)) {
|
|
logger.debug(
|
|
`Newt ${newtId} (version ${version}) does not support cert references, skipping certs/remove`
|
|
);
|
|
return;
|
|
}
|
|
|
|
await sendToClient(
|
|
newtId,
|
|
{
|
|
type: "newt/certs/remove",
|
|
data: { ids: certIds }
|
|
},
|
|
{
|
|
incrementConfigVersion: true,
|
|
compress: canCompress(version, "newt")
|
|
}
|
|
);
|
|
}
|