73 lines
2.1 KiB
TypeScript
73 lines
2.1 KiB
TypeScript
import { db, newts } from "@server/db";
|
|
import { MessageHandler } from "../ws";
|
|
import { exitNodes, Newt, resources, sites, Target, targets } from "@server/db";
|
|
import { eq, and, sql, inArray } from "drizzle-orm";
|
|
import logger from "@server/logger";
|
|
import { applyBlueprint } from "@server/lib/blueprints/applyBlueprint";
|
|
|
|
export const handleApplyBlueprintMessage: MessageHandler = async (context) => {
|
|
const { message, client, sendToClient } = context;
|
|
const newt = client as Newt;
|
|
|
|
logger.debug("Handling apply blueprint message!");
|
|
|
|
if (!newt) {
|
|
logger.warn("Newt not found");
|
|
return;
|
|
}
|
|
|
|
if (!newt.siteId) {
|
|
logger.warn("Newt has no site!"); // TODO: Maybe we create the site here?
|
|
return;
|
|
}
|
|
|
|
// get the site
|
|
const [site] = await db
|
|
.select()
|
|
.from(sites)
|
|
.where(eq(sites.siteId, newt.siteId));
|
|
|
|
if (!site) {
|
|
logger.warn("Site not found for newt");
|
|
return;
|
|
}
|
|
|
|
const { blueprint } = message.data;
|
|
if (!blueprint) {
|
|
logger.warn("No blueprint provided");
|
|
return;
|
|
}
|
|
|
|
logger.debug(`Received blueprint: ${blueprint}`);
|
|
|
|
try {
|
|
const blueprintParsed = JSON.parse(blueprint);
|
|
// Update the blueprint in the database
|
|
await applyBlueprint(site.orgId, blueprintParsed, site.siteId);
|
|
} catch (error) {
|
|
logger.error(`Failed to update database from config: ${error}`);
|
|
return {
|
|
message: {
|
|
type: "newt/blueprint/results",
|
|
data: {
|
|
success: false,
|
|
message: `Failed to update database from config: ${error}`
|
|
}
|
|
},
|
|
broadcast: false, // Send to all clients
|
|
excludeSender: false // Include sender in broadcast
|
|
};
|
|
}
|
|
|
|
return {
|
|
message: {
|
|
type: "newt/blueprint/results",
|
|
data: {
|
|
success: true,
|
|
message: "Config updated successfully"
|
|
}
|
|
},
|
|
broadcast: false, // Send to all clients
|
|
excludeSender: false // Include sender in broadcast
|
|
};
|
|
};
|