93 lines
No EOL
2.5 KiB
TypeScript
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}`);
|
|
}
|
|
} |