spb/trouve-ka Public
Trouve-KA — moteur de recherche web indépendant, Québec-first. Crawler distribué, index OpenSearch, ranking bilingue, galerie d'images. En prod : www.trouve-ka.com
Python 76.8%
TypeScript 15.7%
SQL 3.9%
Shell 1.4%
CSS 1.3%
Dockerfile 0.7%
1/**2 * Trouve-KA — page admin (porte à jeton + dashboard)3 * Author: Simon-Pierre Boucher4 * Contact: contact@spboucher.ai5 */67"use client";89import { useCallback, useEffect, useState } from "react";10import { AdminDashboard } from "@/components/admin/dashboard";11import { TokenForm } from "@/components/admin/token-form";12import { ADMIN_TOKEN_KEY } from "@/lib/admin";1314export default function AdminPage() {15 // undefined = lecture de sessionStorage en cours; null = pas de jeton.16 const [token, setToken] = useState<string | null | undefined>(undefined);17 const [expired, setExpired] = useState(false);1819 useEffect(() => {20 setToken(sessionStorage.getItem(ADMIN_TOKEN_KEY));21 }, []);2223 const handleUnauthorized = useCallback(() => {24 sessionStorage.removeItem(ADMIN_TOKEN_KEY);25 setExpired(true);26 setToken(null);27 }, []);2829 const handleToken = useCallback((value: string) => {30 sessionStorage.setItem(ADMIN_TOKEN_KEY, value);31 setExpired(false);32 setToken(value);33 }, []);3435 const handleLogout = useCallback(() => {36 sessionStorage.removeItem(ADMIN_TOKEN_KEY);37 setExpired(false);38 setToken(null);39 }, []);4041 if (token === undefined) {42 return null;43 }4445 if (!token) {46 return <TokenForm onSubmit={handleToken} expired={expired} />;47 }4849 return (50 <AdminDashboard51 token={token}52 onUnauthorized={handleUnauthorized}53 onLogout={handleLogout}54 />55 );56}57