✨ feat(sécurité): Implémente le verrouillage de l'intranet avec une page d'erreur personnalisée.
This commit is contained in:
1
.env
1
.env
@@ -96,3 +96,4 @@ ESY_SEARCH_KEY=b09d9a708b427d495c39fe6e8fc5361fe33fee57a0435f3e1bf3ed8155f2a277
|
||||
###> stripe/stripe-php ###
|
||||
STRIPE_SECRET_KEY=sk_test_***
|
||||
###< stripe/stripe-php ###
|
||||
INTRANET_LOCK=true
|
||||
|
||||
2
assets/error.js
Normal file
2
assets/error.js
Normal file
@@ -0,0 +1,2 @@
|
||||
import './error.scss'
|
||||
console.log("loaded")
|
||||
1
assets/error.scss
Normal file
1
assets/error.scss
Normal file
@@ -0,0 +1 @@
|
||||
@import "tailwindcss";
|
||||
29
src/Security/IntranetLocked.php
Normal file
29
src/Security/IntranetLocked.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace App\Security;
|
||||
|
||||
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpKernel\Event\RequestEvent;
|
||||
use Twig\Environment;
|
||||
|
||||
#[AsEventListener(RequestEvent::class,method: 'onLocked')]
|
||||
class IntranetLocked
|
||||
{
|
||||
public function __construct(private readonly Environment $environment)
|
||||
{
|
||||
}
|
||||
|
||||
public function onLocked(RequestEvent $requestEvent)
|
||||
{
|
||||
if($_ENV['INTRANET_LOCK'] == "true" &&
|
||||
!str_contains( $requestEvent->getRequest()->getPathInfo(),"_wdt") &&
|
||||
!str_contains( $requestEvent->getRequest()->getPathInfo(),"_profiler")
|
||||
) {
|
||||
$response = new Response($this->environment->render('security/locked.twig'));
|
||||
$response->setStatusCode(Response::HTTP_FORBIDDEN);
|
||||
$requestEvent->setResponse($response);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
74
templates/security/locked.twig
Normal file
74
templates/security/locked.twig
Normal file
@@ -0,0 +1,74 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Accès Restreint - Siteconseil</title>
|
||||
{{ vite_asset('error.js') }}
|
||||
</head>
|
||||
<body class="bg-[#0f172a] text-slate-200 font-sans min-h-screen flex items-center justify-center overflow-hidden">
|
||||
|
||||
<div class="absolute inset-0 overflow-hidden pointer-events-none">
|
||||
<div class="absolute -top-[10%] -left-[10%] w-[50%] h-[50%] bg-blue-600/10 rounded-full blur-[120px]"></div>
|
||||
<div class="absolute -bottom-[10%] -right-[10%] w-[50%] h-[50%] bg-indigo-600/10 rounded-full blur-[120px]"></div>
|
||||
</div>
|
||||
|
||||
<div class="relative z-10 w-full max-w-lg p-6 mx-auto">
|
||||
<div class="backdrop-blur-3xl bg-slate-900/60 border border-white/10 rounded-[3rem] p-10 shadow-2xl">
|
||||
|
||||
<div class="flex justify-center mb-8">
|
||||
<div class="p-6 bg-amber-500/10 rounded-3xl border border-amber-500/20">
|
||||
<svg class="w-12 h-12 text-amber-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z"/>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-center mb-10">
|
||||
<h1 class="text-3xl font-black text-white mb-4 tracking-tight uppercase">
|
||||
Accès <span class="text-blue-500">Restreint</span>
|
||||
</h1>
|
||||
<p class="text-slate-400 text-sm leading-relaxed">
|
||||
L'accès à votre espace intranet est actuellement restreint.
|
||||
Pour obtenir plus d'informations, veuillez contacter notre service client.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="bg-white/5 border border-white/5 rounded-2xl p-6 mb-8 space-y-4">
|
||||
<p class="text-[10px] text-blue-400 font-black uppercase tracking-[0.2em] text-center mb-2">Service Client Siteconseil</p>
|
||||
|
||||
<a href="mailto:s.com@siteconseil.fr" class="flex items-center space-x-4 p-3 rounded-xl hover:bg-white/5 transition-colors group">
|
||||
<div class="w-10 h-10 rounded-lg bg-blue-600/20 flex items-center justify-center text-blue-500 group-hover:bg-blue-600 group-hover:text-white transition-all">
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-[9px] text-slate-500 font-bold uppercase tracking-wider">Email</p>
|
||||
<p class="text-sm font-semibold text-white">s.com@siteconseil.fr</p>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<a href="tel:0323056243" class="flex items-center space-x-4 p-3 rounded-xl hover:bg-white/5 transition-colors group">
|
||||
<div class="w-10 h-10 rounded-lg bg-green-600/20 flex items-center justify-center text-green-500 group-hover:bg-green-600 group-hover:text-white transition-all">
|
||||
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z"/>
|
||||
</svg>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-[9px] text-slate-500 font-bold uppercase tracking-wider">Téléphone</p>
|
||||
<p class="text-sm font-semibold text-white">03 23 05 62 43</p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="text-center">
|
||||
<p class="text-[9px] text-slate-600 uppercase tracking-[0.3em] font-black italic">
|
||||
Siteconseil © 2026
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -43,6 +43,7 @@ export default defineConfig({
|
||||
input: {
|
||||
app: resolve(__dirname, 'assets/app.js'),
|
||||
admin: resolve(__dirname, 'assets/admin.js'),
|
||||
error: resolve(__dirname, 'assets/error.js'),
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user