diff --git a/app/admin/login/page.tsx b/app/admin/login/page.tsx index 6f9443a..2d63f69 100644 --- a/app/admin/login/page.tsx +++ b/app/admin/login/page.tsx @@ -31,13 +31,20 @@ export default function AdminLoginPage() { if (response.ok) { router.push("/admin"); + } else if (response.status === 404) { + // API non disponible (mode statique/APK) - accepter quand même + // Le mot de passe sera vérifié côté serveur lors des vraies requêtes + router.push("/admin"); } else { setError("Mot de passe incorrect"); localStorage.removeItem("adminPassword"); } } catch (err) { - setError("Erreur de connexion"); - localStorage.removeItem("adminPassword"); + // Erreur réseau (API non disponible en mode statique/APK) + // Accepter quand même et rediriger + // Le mot de passe sera vérifié côté serveur lors des vraies requêtes + console.warn("API non disponible (mode statique), connexion acceptée localement"); + router.push("/admin"); } finally { setLoading(false); } diff --git a/app/admin/page.tsx b/app/admin/page.tsx index 2be6b23..e25ab0d 100644 --- a/app/admin/page.tsx +++ b/app/admin/page.tsx @@ -20,7 +20,31 @@ export default function AdminPage() { const adminPassword = localStorage.getItem("adminPassword"); if (!adminPassword) { router.push("/admin/login"); + return; } + + // Tester la connexion avec l'API (si disponible) + // Si l'API n'est pas disponible (APK statique), on continue quand même + fetch("/api/admin/clients", { + headers: { + Authorization: `Bearer ${adminPassword}`, + }, + }) + .then((res) => { + if (!res.ok && res.status !== 404) { + // Si erreur autre que 404 (API non disponible), déconnecter + if (res.status === 401 || res.status === 403) { + localStorage.removeItem("adminPassword"); + router.push("/admin/login"); + } + } + // Si 404, c'est normal en mode statique (API non disponible) + // On continue l'affichage + }) + .catch(() => { + // Erreur réseau (API non disponible en mode statique) + // C'est normal pour l'APK, on continue + }); }, [router]); const handleNewClient = () => { diff --git a/app/page.tsx b/app/page.tsx index 8b0f874..62ff5c3 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,21 +1,78 @@ "use client"; -import { useEffect } from "react"; +import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; export default function Home() { const router = useRouter(); + const [checked, setChecked] = useState(false); useEffect(() => { - router.replace("/accueil"); + // Détecter si on est dans l'app admin + // Méthode 1: Vérifier si Capacitor est disponible (APK) + const isCapacitor = typeof window !== "undefined" && (window as any).Capacitor; + + // Méthode 2: Vérifier le user agent ou l'URL + const isAdminPath = typeof window !== "undefined" && + (window.location.pathname.startsWith("/admin") || + window.location.search.includes("admin=true")); + + // Méthode 3: Vérifier si on a un mot de passe admin en localStorage + const hasAdminPassword = typeof window !== "undefined" && + localStorage.getItem("adminPassword") !== null; + + // Si on est dans Capacitor OU qu'on a un mot de passe admin, c'est l'app admin + const isAdminApp = isCapacitor || isAdminPath || hasAdminPassword; + + if (isAdminApp) { + // Vérifier si l'admin est connecté + const adminPassword = typeof window !== "undefined" ? + localStorage.getItem("adminPassword") : null; + + if (adminPassword) { + // Tester la connexion (si API disponible) + fetch("/api/admin/clients", { + headers: { + Authorization: `Bearer ${adminPassword}`, + }, + }) + .then((res) => { + if (res.ok) { + router.replace("/admin"); + } else if (res.status === 404) { + // API non disponible (mode statique) - accepter quand même + router.replace("/admin"); + } else { + localStorage.removeItem("adminPassword"); + router.replace("/admin/login"); + } + }) + .catch(() => { + // Erreur réseau (API non disponible en mode statique) + // Accepter quand même et rediriger vers /admin + router.replace("/admin"); + }); + } else { + // Pas de mot de passe, rediriger vers login + router.replace("/admin/login"); + } + } else { + // App client normale + router.replace("/accueil"); + } + setChecked(true); }, [router]); - return ( -
Redirection...
+ if (!checked) { + return ( +Chargement...
+