Files
Compagnon-du-Lagon---Marama/app/page.tsx
syoul 429eb07291 Amélioration de la détection APK client vs admin
- Détection basée sur Capacitor Android + adminPassword
- APK client (sans adminPassword) → redirige vers /accueil
- APK admin (avec adminPassword) → redirige vers /admin/login
- Web avec /admin → admin
- Sinon → client
2025-11-23 17:21:22 +01:00

122 lines
3.9 KiB
TypeScript

"use client";
import { useEffect, useState } from "react";
import { useRouter } from "next/navigation";
export default function Home() {
const router = useRouter();
const [checked, setChecked] = useState(false);
useEffect(() => {
// Détecter si on est dans l'app admin
let isAdminApp = false;
if (typeof window !== "undefined") {
const Capacitor = (window as any).Capacitor;
// Méthode 1: Vérifier l'appId de Capacitor via le package name Android
if (Capacitor) {
try {
const platform = Capacitor.getPlatform();
if (platform === "android") {
// En Android, on peut récupérer le package name via Capacitor.getApp()
// APK admin: com.pensionmarama.admin
// APK client: com.pensionmarama.app
const App = Capacitor.Plugins?.App;
if (App) {
App.getInfo().then((info: any) => {
// Le package name est dans info.id ou info.appId
const appId = info.id || info.appId || "";
if (appId.includes("admin")) {
isAdminApp = true;
}
}).catch(() => {
// Fallback si getInfo() échoue
});
}
// Fallback: Vérifier le localStorage (si adminPassword existe, c'est admin)
const hasAdminPassword = localStorage.getItem("adminPassword") !== null;
if (hasAdminPassword) {
isAdminApp = true;
}
} else {
// Pour web, vérifier le localStorage
const hasAdminPassword = localStorage.getItem("adminPassword") !== null;
if (hasAdminPassword) {
isAdminApp = true;
}
}
} catch (e) {
// En cas d'erreur, fallback sur les autres méthodes
console.warn("Erreur lors de la détection Capacitor:", e);
}
}
// Méthode 2: Vérifier le path ou query string (pour web)
if (!isAdminApp && (
window.location.pathname.startsWith("/admin") ||
window.location.search.includes("admin=true")
)) {
isAdminApp = true;
}
// Méthode 3: Si on est dans Capacitor Android sans adminPassword,
// on considère que c'est l'app client (redirige vers /accueil)
// Sauf si le pathname commence par /admin
}
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]);
if (!checked) {
return (
<div className="flex items-center justify-center min-h-screen bg-background dark:bg-background-dark">
<div className="text-center">
<p className="text-gray-600 dark:text-gray-400">Chargement...</p>
</div>
</div>
);
}
return null;
}