mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 01:30:21 +00:00
fix: harden connect auth flow and exec policy diagnostics
This commit is contained in:
66
src/gateway/protocol/connect-error-details.ts
Normal file
66
src/gateway/protocol/connect-error-details.ts
Normal file
@@ -0,0 +1,66 @@
|
||||
export const ConnectErrorDetailCodes = {
|
||||
AUTH_REQUIRED: "AUTH_REQUIRED",
|
||||
AUTH_UNAUTHORIZED: "AUTH_UNAUTHORIZED",
|
||||
AUTH_TOKEN_MISSING: "AUTH_TOKEN_MISSING",
|
||||
AUTH_TOKEN_MISMATCH: "AUTH_TOKEN_MISMATCH",
|
||||
AUTH_TOKEN_NOT_CONFIGURED: "AUTH_TOKEN_NOT_CONFIGURED",
|
||||
AUTH_PASSWORD_MISSING: "AUTH_PASSWORD_MISSING",
|
||||
AUTH_PASSWORD_MISMATCH: "AUTH_PASSWORD_MISMATCH",
|
||||
AUTH_PASSWORD_NOT_CONFIGURED: "AUTH_PASSWORD_NOT_CONFIGURED",
|
||||
AUTH_DEVICE_TOKEN_MISMATCH: "AUTH_DEVICE_TOKEN_MISMATCH",
|
||||
AUTH_RATE_LIMITED: "AUTH_RATE_LIMITED",
|
||||
AUTH_TAILSCALE_IDENTITY_MISSING: "AUTH_TAILSCALE_IDENTITY_MISSING",
|
||||
AUTH_TAILSCALE_PROXY_MISSING: "AUTH_TAILSCALE_PROXY_MISSING",
|
||||
AUTH_TAILSCALE_WHOIS_FAILED: "AUTH_TAILSCALE_WHOIS_FAILED",
|
||||
AUTH_TAILSCALE_IDENTITY_MISMATCH: "AUTH_TAILSCALE_IDENTITY_MISMATCH",
|
||||
CONTROL_UI_DEVICE_IDENTITY_REQUIRED: "CONTROL_UI_DEVICE_IDENTITY_REQUIRED",
|
||||
DEVICE_IDENTITY_REQUIRED: "DEVICE_IDENTITY_REQUIRED",
|
||||
DEVICE_AUTH_INVALID: "DEVICE_AUTH_INVALID",
|
||||
PAIRING_REQUIRED: "PAIRING_REQUIRED",
|
||||
} as const;
|
||||
|
||||
export type ConnectErrorDetailCode =
|
||||
(typeof ConnectErrorDetailCodes)[keyof typeof ConnectErrorDetailCodes];
|
||||
|
||||
export function resolveAuthConnectErrorDetailCode(
|
||||
reason: string | undefined,
|
||||
): ConnectErrorDetailCode {
|
||||
switch (reason) {
|
||||
case "token_missing":
|
||||
return ConnectErrorDetailCodes.AUTH_TOKEN_MISSING;
|
||||
case "token_mismatch":
|
||||
return ConnectErrorDetailCodes.AUTH_TOKEN_MISMATCH;
|
||||
case "token_missing_config":
|
||||
return ConnectErrorDetailCodes.AUTH_TOKEN_NOT_CONFIGURED;
|
||||
case "password_missing":
|
||||
return ConnectErrorDetailCodes.AUTH_PASSWORD_MISSING;
|
||||
case "password_mismatch":
|
||||
return ConnectErrorDetailCodes.AUTH_PASSWORD_MISMATCH;
|
||||
case "password_missing_config":
|
||||
return ConnectErrorDetailCodes.AUTH_PASSWORD_NOT_CONFIGURED;
|
||||
case "tailscale_user_missing":
|
||||
return ConnectErrorDetailCodes.AUTH_TAILSCALE_IDENTITY_MISSING;
|
||||
case "tailscale_proxy_missing":
|
||||
return ConnectErrorDetailCodes.AUTH_TAILSCALE_PROXY_MISSING;
|
||||
case "tailscale_whois_failed":
|
||||
return ConnectErrorDetailCodes.AUTH_TAILSCALE_WHOIS_FAILED;
|
||||
case "tailscale_user_mismatch":
|
||||
return ConnectErrorDetailCodes.AUTH_TAILSCALE_IDENTITY_MISMATCH;
|
||||
case "rate_limited":
|
||||
return ConnectErrorDetailCodes.AUTH_RATE_LIMITED;
|
||||
case "device_token_mismatch":
|
||||
return ConnectErrorDetailCodes.AUTH_DEVICE_TOKEN_MISMATCH;
|
||||
case undefined:
|
||||
return ConnectErrorDetailCodes.AUTH_REQUIRED;
|
||||
default:
|
||||
return ConnectErrorDetailCodes.AUTH_UNAUTHORIZED;
|
||||
}
|
||||
}
|
||||
|
||||
export function readConnectErrorDetailCode(details: unknown): string | null {
|
||||
if (!details || typeof details !== "object" || Array.isArray(details)) {
|
||||
return null;
|
||||
}
|
||||
const code = (details as { code?: unknown }).code;
|
||||
return typeof code === "string" && code.trim().length > 0 ? code : null;
|
||||
}
|
||||
Reference in New Issue
Block a user