Files
Virtnet.bond/extensions/Others/Authentik/Middleware/ForceAuthentikOnly.php
2025-11-30 11:57:22 +01:00

59 lines
2.5 KiB
PHP

<?php
namespace Paymenter\Extensions\Others\Authentik\Middleware;
use Closure;
use Illuminate\Http\Request;
use App\Models\Extension;
class ForceAuthentikOnly
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
// Vérifier si l'extension Authentik est activée et configurée pour forcer l'utilisation uniquement
$extension = Extension::where('extension', 'Authentik')->first();
if ($extension && $extension->enabled) {
$settings = $extension->settings->pluck('value', 'key')->toArray();
// Si l'option "force_authentik_only" est activée
if (!empty($settings['force_authentik_only'])) {
// Éviter les boucles de redirection
$currentPath = $request->path();
$currentRoute = $request->route() ? $request->route()->getName() : null;
// Routes et chemins à exclure de la redirection
$excludedRoutes = ['oauth.authentik.redirect', 'oauth.authentik.callback'];
$excludedPaths = ['oauth/authentik', 'oauth/authentik/callback'];
// Vérifier si on est sur une route ou chemin exclu
$isExcludedRoute = in_array($currentRoute, $excludedRoutes);
$isExcludedPath = false;
foreach ($excludedPaths as $excludedPath) {
if (str_starts_with($currentPath, $excludedPath)) {
$isExcludedPath = true;
break;
}
}
// Ne pas rediriger si on est déjà sur une route Authentik ou si l'utilisateur est connecté
if (!$isExcludedRoute && !$isExcludedPath && !auth()->check()) {
// Vérifier que la configuration Authentik est complète avant de rediriger
if (!empty($settings['client_id']) && !empty($settings['client_secret']) && !empty($settings['base_url'])) {
return redirect()->route('oauth.authentik.redirect');
}
}
}
}
return $next($request);
}
}