76 lines
2.0 KiB
PHP
76 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use Closure;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Artisan;
|
|
|
|
class CheckInstallation
|
|
{
|
|
/**
|
|
* Handle an incoming request.
|
|
*/
|
|
public function handle(Request $request, Closure $next)
|
|
{
|
|
// Skip check for installer routes, API routes, and static assets
|
|
if (
|
|
$request->is('install/*') ||
|
|
$request->is('update/*') ||
|
|
$request->is('css/*') ||
|
|
$request->is('js/*') ||
|
|
$request->is('images/*') ||
|
|
$request->is('installer/*')
|
|
) {
|
|
return $next($request);
|
|
}
|
|
|
|
// Check only on dashboard, login, register routes
|
|
if (!$request->is('/*') && !$request->is('dashboard*') && !$request->is('login') && !$request->is('register')) {
|
|
return $next($request);
|
|
}
|
|
|
|
// If not installed, redirect to /install
|
|
if (!$this->isInstalled()) {
|
|
return redirect('/install');
|
|
}
|
|
|
|
// If logged in as superadmin and migrations needed, redirect to /update
|
|
if (isSaas()) {
|
|
if (auth()->check() && auth()->user()->hasRole('superadmin') && $this->needsMigration()) {
|
|
return redirect('/update');
|
|
}
|
|
} else {
|
|
if (auth()->check() && auth()->user()->hasRole('company') && $this->needsMigration()) {
|
|
return redirect('/update');
|
|
}
|
|
|
|
}
|
|
|
|
|
|
return $next($request);
|
|
}
|
|
|
|
/**
|
|
* Check if application is installed
|
|
*/
|
|
private function isInstalled(): bool
|
|
{
|
|
return file_exists(storage_path('installed'));
|
|
}
|
|
|
|
/**
|
|
* Check if migrations are needed
|
|
*/
|
|
private function needsMigration(): bool
|
|
{
|
|
try {
|
|
Artisan::call('migrate:status');
|
|
$output = Artisan::output();
|
|
return strpos($output, 'Pending') !== false;
|
|
} catch (\Exception $e) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|