59 lines
2.5 KiB
PHP
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);
|
|
}
|
|
}
|