fix auto plugins not working if someone was allowed in through purgatory

This commit is contained in:
KingKDot
2026-03-29 14:03:05 -05:00
parent ecf84d8a27
commit a55c3193e0
2 changed files with 35 additions and 3 deletions
+21 -2
View File
@@ -17,7 +17,7 @@ import { metrics } from "./metrics";
import { ensureDataDir } from "./paths"; import { ensureDataDir } from "./paths";
import { handleAuthRoutes } from "./server/routes/auth-routes"; import { handleAuthRoutes } from "./server/routes/auth-routes";
import { handleAutoScriptsRoutes } from "./server/routes/auto-scripts-routes"; import { handleAutoScriptsRoutes } from "./server/routes/auto-scripts-routes";
import { handleEnrollmentRoutes } from "./server/routes/enrollment-routes"; import { handleEnrollmentRoutes, setPostApproveHook } from "./server/routes/enrollment-routes";
import { handleBuildRoutes } from "./server/routes/build-routes"; import { handleBuildRoutes } from "./server/routes/build-routes";
import { handleAssetsRoutes } from "./server/routes/assets-routes"; import { handleAssetsRoutes } from "./server/routes/assets-routes";
import { handleDeployRoutes } from "./server/routes/deploy-routes"; import { handleDeployRoutes } from "./server/routes/deploy-routes";
@@ -297,6 +297,23 @@ const pendingCommandReplies = new Map<string, PendingCommandReply>();
async function startServer() { async function startServer() {
await loadPluginState(); await loadPluginState();
setPostApproveHook((clientId: string) => {
const client = clientManager.getClient(clientId);
if (!client) return;
dispatchAutoLoadPlugins(
client,
pluginState,
notificationPluginHandlers.isPluginLoaded,
notificationPluginHandlers.isPluginLoading,
notificationPluginHandlers.markPluginLoading,
notificationPluginHandlers.enqueuePluginEvent,
loadPluginBundle,
).catch((err) => {
logger.warn(`[enrollment] failed to dispatch auto-load plugins for ${clientId}: ${(err as Error).message}`);
});
});
await cleanupFileTransferTempFiles(DATA_DIR); await cleanupFileTransferTempFiles(DATA_DIR);
logger.info("[filebrowser] cleaned stale transfer temp files on startup"); logger.info("[filebrowser] cleaned stale transfer temp files on startup");
let tls: let tls:
@@ -468,7 +485,9 @@ async function startServer() {
notificationPluginHandlers.markPluginLoading, notificationPluginHandlers.markPluginLoading,
notificationPluginHandlers.enqueuePluginEvent, notificationPluginHandlers.enqueuePluginEvent,
loadPluginBundle, loadPluginBundle,
); ).catch((err) => {
logger.warn(`[plugin-autoload] dispatch error for ${info.id}: ${(err as Error).message}`);
});
}, },
takePendingNotificationScreenshot: takePendingNotificationScreenshotForClient, takePendingNotificationScreenshot: takePendingNotificationScreenshotForClient,
storeNotificationScreenshot: storeNotificationScreenshotForPending, storeNotificationScreenshot: storeNotificationScreenshotForPending,
@@ -15,6 +15,12 @@ import { logAudit, AuditAction } from "../../auditLog";
import * as clientManager from "../../clientManager"; import * as clientManager from "../../clientManager";
import { setOnlineState } from "../../db"; import { setOnlineState } from "../../db";
let _postApproveHook: ((clientId: string) => void) | undefined;
export function setPostApproveHook(hook: (clientId: string) => void): void {
_postApproveHook = hook;
}
export async function handleEnrollmentRoutes( export async function handleEnrollmentRoutes(
req: Request, req: Request,
url: URL, url: URL,
@@ -62,6 +68,8 @@ export async function handleEnrollmentRoutes(
setClientEnrollmentStatus(clientId, "approved", user.username); setClientEnrollmentStatus(clientId, "approved", user.username);
_postApproveHook?.(clientId);
logAudit({ logAudit({
timestamp: Date.now(), timestamp: Date.now(),
username: user.username, username: user.username,
@@ -175,7 +183,12 @@ export async function handleEnrollmentRoutes(
status as "approved" | "denied" | "pending", status as "approved" | "denied" | "pending",
action === "approve" ? user.username : undefined, action === "approve" ? user.username : undefined,
); );
if (ok) updated++; if (ok) {
updated++;
if (action === "approve") {
_postApproveHook?.(id);
}
}
} }
logAudit({ logAudit({