You've already forked Atomcms-edit
Initial commit
This commit is contained in:
+76
@@ -0,0 +1,76 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user