espace-paie-odentas/lib/demo-detector.ts
2025-10-12 17:05:46 +02:00

93 lines
No EOL
2.5 KiB
TypeScript

// lib/demo-detector.ts
import { NextRequest } from "next/server";
/**
* Détecte si l'application doit fonctionner en mode démo
*
* Méthodes de détection (par ordre de priorité) :
* 1. Variable d'environnement DEMO_MODE=true
* 2. Sous-domaine demo.* (ex: demo.votresite.com)
* 3. Header x-demo-mode=true (pour tests et API)
*/
export function detectDemoMode(req?: NextRequest): boolean {
// 1. Variable d'environnement (priorité haute)
if (process.env.DEMO_MODE === 'true') {
return true;
}
// 2. Si on a une requête, vérifier le sous-domaine
if (req) {
const hostname = req.nextUrl.hostname;
// Détection spécifique pour demo.odentas.fr
if (hostname === 'demo.odentas.fr' || hostname.startsWith('demo.')) {
return true;
}
// 3. Header spécial pour tests
const demoHeader = req.headers.get('x-demo-mode');
if (demoHeader === 'true') {
return true;
}
}
return false;
}
/**
* Version côté serveur pour les API routes
* Utilise les headers de la requête pour détecter le mode démo
*/
export function detectDemoModeFromHeaders(headers: Headers): boolean {
// 1. Variable d'environnement
if (process.env.DEMO_MODE === 'true') {
return true;
}
// 2. Header spécial
const demoHeader = headers.get('x-demo-mode');
if (demoHeader === 'true') {
return true;
}
// 3. Header host pour sous-domaine
const host = headers.get('host');
if (host && (host === 'demo.odentas.fr' || host.startsWith('demo.'))) {
return true;
}
return false;
}
/**
* Version côté client pour React
* Utilise window.location pour détecter le mode démo
*/
export function detectDemoModeClient(): boolean {
// 1. Variable d'environnement publique
if (process.env.NEXT_PUBLIC_DEMO_MODE === 'true') {
return true;
}
// 2. Côté client, vérifier le hostname
if (typeof window !== 'undefined') {
const hostname = window.location.hostname;
if (hostname === 'demo.odentas.fr' || hostname.startsWith('demo.')) {
return true;
}
}
return false;
}
/**
* Utilitaire pour logger l'état du mode démo
*/
export function logDemoMode(isDemo: boolean, context: string = '', req?: NextRequest) {
if (isDemo) {
const hostname = req?.nextUrl.hostname || (typeof window !== 'undefined' ? window.location.hostname : 'unknown');
const path = req?.nextUrl.pathname || (typeof window !== 'undefined' ? window.location.pathname : 'unknown');
console.log(`🎭 [DEMO ${context}] Mode démo actif - Host: ${hostname}, Path: ${path}`);
}
}