fix: Incorrect desktop user agent and build issues
This commit is contained in:
@@ -267,15 +267,6 @@ class AuthManager {
|
||||
.limit(1);
|
||||
|
||||
if (sessionRecords.length === 0) {
|
||||
databaseLogger.warn(
|
||||
"JWT token has no matching session in database",
|
||||
{
|
||||
operation: "jwt_verify_failed",
|
||||
reason: "session_not_found",
|
||||
sessionId: payload.sessionId,
|
||||
userId: payload.userId,
|
||||
},
|
||||
);
|
||||
return null;
|
||||
}
|
||||
} catch (dbError) {
|
||||
|
||||
@@ -14,7 +14,7 @@ export function detectPlatform(req: Request): DeviceType {
|
||||
const userAgent = req.headers["user-agent"] || "";
|
||||
const electronHeader = req.headers["x-electron-app"];
|
||||
|
||||
if (electronHeader === "true") {
|
||||
if (electronHeader === "true" || userAgent.includes("Termix-Desktop")) {
|
||||
return "desktop";
|
||||
}
|
||||
|
||||
@@ -44,22 +44,30 @@ function parseElectronUserAgent(userAgent: string): DeviceInfo {
|
||||
let os = "Unknown OS";
|
||||
let version = "Unknown";
|
||||
|
||||
if (userAgent.includes("Windows")) {
|
||||
os = parseWindowsVersion(userAgent);
|
||||
} else if (userAgent.includes("Mac OS X")) {
|
||||
os = parseMacVersion(userAgent);
|
||||
} else if (userAgent.includes("Linux")) {
|
||||
os = "Linux";
|
||||
}
|
||||
const termixMatch = userAgent.match(/Termix-Desktop\/([\d.]+) \(([^;]+);/);
|
||||
if (termixMatch) {
|
||||
version = termixMatch[1];
|
||||
os = termixMatch[2];
|
||||
} else {
|
||||
if (userAgent.includes("Windows")) {
|
||||
os = parseWindowsVersion(userAgent);
|
||||
} else if (userAgent.includes("Mac OS X")) {
|
||||
os = parseMacVersion(userAgent);
|
||||
} else if (userAgent.includes("macOS")) {
|
||||
os = "macOS";
|
||||
} else if (userAgent.includes("Linux")) {
|
||||
os = "Linux";
|
||||
}
|
||||
|
||||
const electronMatch = userAgent.match(/Electron\/([\d.]+)/);
|
||||
if (electronMatch) {
|
||||
version = electronMatch[1];
|
||||
const electronMatch = userAgent.match(/Electron\/([\d.]+)/);
|
||||
if (electronMatch) {
|
||||
version = electronMatch[1];
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
type: "desktop",
|
||||
browser: "Electron",
|
||||
browser: "Termix Desktop",
|
||||
version,
|
||||
os,
|
||||
deviceInfo: `Termix Desktop on ${os}`,
|
||||
|
||||
@@ -23,6 +23,7 @@ export function ElectronLoginForm({
|
||||
const iframeRef = useRef<HTMLIFrameElement>(null);
|
||||
const hasAuthenticatedRef = useRef(false);
|
||||
const [currentUrl, setCurrentUrl] = useState(serverUrl);
|
||||
const hasLoadedOnce = useRef(false);
|
||||
|
||||
useEffect(() => {
|
||||
const handleMessage = async (event: MessageEvent) => {
|
||||
@@ -52,7 +53,7 @@ export function ElectronLoginForm({
|
||||
throw new Error("Failed to save JWT to localStorage");
|
||||
}
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 200));
|
||||
await new Promise((resolve) => setTimeout(resolve, 500));
|
||||
|
||||
onAuthSuccess();
|
||||
} catch (err) {
|
||||
@@ -81,6 +82,8 @@ export function ElectronLoginForm({
|
||||
|
||||
const handleLoad = () => {
|
||||
setLoading(false);
|
||||
hasLoadedOnce.current = true;
|
||||
setError(null);
|
||||
|
||||
try {
|
||||
if (iframe.contentWindow) {
|
||||
@@ -200,7 +203,9 @@ export function ElectronLoginForm({
|
||||
|
||||
const handleError = () => {
|
||||
setLoading(false);
|
||||
setError(t("errors.failedToLoadServer"));
|
||||
if (hasLoadedOnce.current) {
|
||||
setError(t("errors.failedToLoadServer"));
|
||||
}
|
||||
};
|
||||
|
||||
iframe.addEventListener("load", handleLoad);
|
||||
|
||||
Reference in New Issue
Block a user