"use client"; import Shell from "@/components/Shell"; import { apiFetch, getCsrfFromCookie } from "@/lib/api"; import { useEffect, useState } from "react"; export default function AdminPage() { const [routers, setRouters] = useState([]); const [err, setErr] = useState(null); // add router const [name, setName] = useState("r1"); const [host, setHost] = useState("192.168.88.1"); const [verify, setVerify] = useState(false); // add credential const [routerId, setRouterId] = useState(1); const [method, setMethod] = useState("rest"); const [username, setUsername] = useState("admin"); const [secret, setSecret] = useState(""); async function load() { setErr(null); try { const r = await apiFetch("/api/routers"); setRouters(r); if (r?.length) setRouterId(r[0].id); } catch (e:any) { setErr(e.message || "error"); } } useEffect(() => { load(); }, []); async function createRouter() { setErr(null); try { const csrf = getCsrfFromCookie(); await apiFetch("/api/routers", { method: "POST", headers: { "X-CSRF-Token": csrf || "" }, body: JSON.stringify({ name, host, verify_ssl: verify, preferred_method: "auto", port_rest: 443, port_ssh: 22, port_api: 8728, tags: "" }) }); await load(); } catch (e:any) { setErr(e.message || "error"); } } async function addCred() { setErr(null); try { const csrf = getCsrfFromCookie(); await apiFetch(`/api/routers/${routerId}/credentials`, { method: "POST", headers: { "X-CSRF-Token": csrf || "" }, body: JSON.stringify({ method, username, secret, extra_json: { scheme: "https" } }) }); setSecret(""); await load(); } catch (e:any) { setErr(e.message || "error"); } } return (
Admin
Routery i poświadczenia (wymaga roli admin)
{err &&
{err}
}
Add router
setName(e.target.value)} placeholder="name" /> setHost(e.target.value)} placeholder="host/ip" />
Add credentials
setUsername(e.target.value)} placeholder="username" /> setSecret(e.target.value)} placeholder="password/token" />
REST: ustaw scheme w extra_json (domyślnie https). SSH/API to szkielety.
Routers
{routers.map(r => (
{r.name}
{r.host} • pref: {r.preferred_method}
id: {r.id}
))}
); }