chahinebrini 4b4b9fc63b feat(magic-win): ReBreak Magic Windows-App (Tauri) + CI-Build
Tauri 2 DoH-Schutz für Windows: PowerShell-DoH-Takeover, Tamper-Service
(SYSTEM, windows-service), Browser-Policies (Chromium built-in-DNS + eigenes
DoH aus → OS-Resolver), 24h-Cooldown via bestehende magic/*-Endpoints.
GitHub-Actions baut den x64-NSIS-Installer auf windows-latest.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-07 13:39:52 +02:00

50 lines
1.3 KiB
TypeScript

import { useCallback, useEffect, useState } from "react";
import { getState, UiState } from "./lib/ipc";
import LoginView from "./views/LoginView";
import HubView from "./views/HubView";
export default function App() {
const [state, setState] = useState<UiState | null>(null);
const [loadError, setLoadError] = useState<string | null>(null);
const refresh = useCallback(async () => {
try {
setState(await getState());
setLoadError(null);
} catch (e) {
setLoadError(String(e));
}
}, []);
useEffect(() => {
refresh();
// Periodischer Refresh: spiegelt Server-State (z.B. Release durch Cron)
const id = setInterval(refresh, 60_000);
return () => clearInterval(id);
}, [refresh]);
if (!state) {
return (
<div className="app">
<div className="center-fill">
{loadError ? <p className="error">{loadError}</p> : <div className="spin" />}
</div>
</div>
);
}
return (
<div className="app">
{state.loggedIn ? (
<HubView state={state} onState={setState} />
) : (
<LoginView onState={setState} />
)}
<div className="footer">
<span>ReBreak Magic für Windows</span>
<span>{state.hostname}</span>
</div>
</div>
);
}