You've already forked Atomcms-edit
77 lines
2.0 KiB
PHP
Executable File
77 lines
2.0 KiB
PHP
Executable File
<?php
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use Closure;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Symfony\Component\HttpFoundation\Response;
|
|
use Throwable;
|
|
|
|
class MaintenanceMiddleware
|
|
{
|
|
public function handle(Request $request, Closure $next): Response
|
|
{
|
|
$isPostRequest = $request->method() === 'POST';
|
|
$isMaintenanceRequest = $request->is('maintenance');
|
|
$maintenanceEnabled = $this->getMaintenanceEnabled();
|
|
$isPreview = $request->query('preview') === '1';
|
|
$minRank = $this->getMinMaintenanceRank();
|
|
|
|
$fortify2faRoutes = [
|
|
'two-factor.login',
|
|
'two-factor.confirm',
|
|
];
|
|
|
|
if ($maintenanceEnabled && $isPostRequest && ! Auth::check()) {
|
|
return $next($request);
|
|
}
|
|
|
|
$route = $request->route();
|
|
$routeName = $route?->getName();
|
|
$isFortify2faRoute = in_array($routeName, $fortify2faRoutes, true);
|
|
|
|
if ($maintenanceEnabled && $isFortify2faRoute) {
|
|
return $next($request);
|
|
}
|
|
|
|
$isStaff = Auth::check() && Auth::user()->rank >= $minRank;
|
|
|
|
if ($isStaff) {
|
|
if ($isMaintenanceRequest && ! $isPreview) {
|
|
return to_route('me.show');
|
|
}
|
|
|
|
return $next($request);
|
|
}
|
|
|
|
if ($maintenanceEnabled && ! $isMaintenanceRequest && ! $isPostRequest) {
|
|
return to_route('maintenance.show');
|
|
}
|
|
|
|
if (! $maintenanceEnabled && $isMaintenanceRequest && ! $isPostRequest && ! $isPreview) {
|
|
return to_route('welcome');
|
|
}
|
|
|
|
return $next($request);
|
|
}
|
|
|
|
private function getMaintenanceEnabled(): bool
|
|
{
|
|
try {
|
|
return (bool) setting('maintenance_enabled');
|
|
} catch (Throwable) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private function getMinMaintenanceRank(): int
|
|
{
|
|
try {
|
|
return (int) setting('min_maintenance_login_rank', 1);
|
|
} catch (Throwable) {
|
|
return 1;
|
|
}
|
|
}
|
|
}
|