feat: check guacd availability before RDP/VNC connection

This commit is contained in:
ZacharyZcR
2026-05-13 18:15:40 +08:00
committed by ZacharyZcR
parent ebed4a6d2e
commit a1a442281b
2 changed files with 21 additions and 3 deletions
+14 -3
View File
@@ -1,7 +1,7 @@
import React, { useState, useEffect, useCallback } from "react"; import React, { useState, useEffect, useCallback } from "react";
import { GuacamoleDisplay } from "@/features/guacamole/GuacamoleDisplay.tsx"; import { GuacamoleDisplay } from "@/features/guacamole/GuacamoleDisplay.tsx";
import { FullScreenAppWrapper } from "@/features/FullScreenAppWrapper.tsx"; import { FullScreenAppWrapper } from "@/features/FullScreenAppWrapper.tsx";
import { getGuacamoleTokenFromHost } from "@/main-axios.ts"; import { getGuacamoleTokenFromHost, getGuacdStatus } from "@/main-axios.ts";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { AlertCircle, RefreshCw } from "lucide-react"; import { AlertCircle, RefreshCw } from "lucide-react";
import { Button } from "@/components/button.tsx"; import { Button } from "@/components/button.tsx";
@@ -75,8 +75,19 @@ const GuacamoleAppInner: React.FC<GuacamoleAppInnerProps> = ({
useEffect(() => { useEffect(() => {
setToken(null); setToken(null);
setError(null); setError(null);
getGuacamoleTokenFromHost(hostId) getGuacdStatus()
.then((result) => setToken(result.token)) .then((status) => {
if (status.guacd.status !== "connected") {
setError(
"Remote desktop service (guacd) is not available. Please ensure guacd is running and accessible.",
);
return;
}
return getGuacamoleTokenFromHost(hostId);
})
.then((result) => {
if (result) setToken(result.token);
})
.catch((err) => setError(err?.message || t("guacamole.failedToConnect"))); .catch((err) => setError(err?.message || t("guacamole.failedToConnect")));
}, [hostId, retryCount]); }, [hostId, retryCount]);
+7
View File
@@ -4501,6 +4501,13 @@ export async function getGuacamoleTokenFromHost(
} }
} }
export async function getGuacdStatus(): Promise<{
guacd: { status: string };
}> {
const response = await authApi.get("/guacamole/status");
return response.data;
}
// ============================================================================ // ============================================================================
// RBAC MANAGEMENT // RBAC MANAGEMENT
// ============================================================================ // ============================================================================