Spaces:
Running
Running
File size: 2,728 Bytes
808332c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
import { useState, useEffect } from 'react';
import Topbar from './components/Topbar';
import TokenBar from './components/TokenBar';
import Scenario1Tab from './tabs/Scenario1Tab';
import Scenario2Tab from './tabs/Scenario2Tab';
import ApiTab from './tabs/ApiTab';
import AdminTab from './tabs/AdminTab';
import IntelTab from './tabs/IntelTab';
import { getToken, clearToken } from './api';
const TABS = [
{ id: 'scenario1', label: '🔬 Scenario 1: Behavior' },
{ id: 'scenario2', label: '🚨 Scenario 2: Attacks' },
{ id: 'api', label: '🔧 API Testing' },
{ id: 'admin', label: '🛡️ Admin Dashboard' },
{ id: 'intel', label: '🧠 Intelligence' },
];
export default function App() {
const [activeTab, setActiveTab] = useState('scenario1');
const [token, setToken] = useState(getToken);
const [serverStatus, setServerStatus] = useState('checking');
const refreshToken = () => setToken(getToken());
const handleClear = () => { clearToken(); setToken(''); };
const ping = async () => {
setServerStatus('checking');
try {
const r = await fetch('/health');
setServerStatus(r.ok ? 'online' : 'error');
} catch {
setServerStatus('offline');
}
};
useEffect(() => { ping(); }, []);
return (
<div className="app">
<Topbar serverStatus={serverStatus} onRefresh={ping} />
<div className="container">
<div className="hero">
<h1>Adaptive Authentication <span>Framework</span></h1>
<p>
Production-ready risk-based auth — JWT • 2FA •
Behavioral Analysis • Anomaly Detection
</p>
</div>
<TokenBar token={token} onRefresh={refreshToken} onClear={handleClear} />
<nav className="main-tabs" role="tablist">
{TABS.map(t => (
<button
key={t.id}
role="tab"
aria-selected={activeTab === t.id}
className={activeTab === t.id ? 'active' : ''}
onClick={() => setActiveTab(t.id)}
>
{t.label}
</button>
))}
</nav>
<div role="tabpanel">
{activeTab === 'scenario1' && <Scenario1Tab onTokenSave={refreshToken} />}
{activeTab === 'scenario2' && <Scenario2Tab onTokenSave={refreshToken} />}
{activeTab === 'api' && <ApiTab onTokenSave={refreshToken} />}
{activeTab === 'admin' && <AdminTab onTokenSave={refreshToken} />}
{activeTab === 'intel' && <IntelTab onTokenSave={refreshToken} />}
</div>
</div>
</div>
);
}
|