🆙 More fixes 🆙

This commit is contained in:
Remco
2026-01-19 22:23:30 +01:00
parent 2b3c8790de
commit e0f7021693
2 changed files with 44 additions and 26 deletions
@@ -15,10 +15,12 @@ use Illuminate\Support\Str;
class InstallationMiddleware class InstallationMiddleware
{ {
public function handle(Request $request, Closure $next) public function handle(Request $request, Closure $next): \Symfony\Component\HttpFoundation\Response
{ {
if (Cache::get('app_installed')) { if (Cache::get('app_installed')) {
return $next($request); $response = $next($request);
assert($response instanceof \Symfony\Component\HttpFoundation\Response);
return $response;
} }
$this->ensureInstallationTableExists(); $this->ensureInstallationTableExists();
@@ -36,15 +38,19 @@ class InstallationMiddleware
return $this->redirectIfNotCompleted($installation); return $this->redirectIfNotCompleted($installation);
} }
return $next($request); $response = $next($request);
assert($response instanceof \Symfony\Component\HttpFoundation\Response);
return $response;
} }
private function ensureInstallationTableExists() private function ensureInstallationTableExists(): void
{ {
if (! Schema::hasTable('website_installation')) { $hasInstallTable = Schema::hasTable('website_installation');
if (! $hasInstallTable) {
Artisan::call('migrate', ['--path' => 'database/migrations/' . findMigration('website_installation')]); Artisan::call('migrate', ['--path' => 'database/migrations/' . findMigration('website_installation')]);
if (! Schema::hasTable('website_installation')) { $hasInstallTable = Schema::hasTable('website_installation');
if (! $hasInstallTable) {
throw new MigrationFailedException('website_installation'); throw new MigrationFailedException('website_installation');
} }
} }
@@ -54,7 +60,7 @@ class InstallationMiddleware
} }
} }
private function getInstallation() private function getInstallation(): WebsiteInstallation
{ {
try { try {
$installation = WebsiteInstallation::query()->first(); $installation = WebsiteInstallation::query()->first();
@@ -64,7 +70,7 @@ class InstallationMiddleware
'step' => 0, 'step' => 0,
'completed' => false, 'completed' => false,
'installation_key' => Str::uuid(), 'installation_key' => Str::uuid(),
'user_ip' => request()?->ip(), 'user_ip' => request()->ip(),
]); ]);
} }
@@ -75,7 +81,7 @@ class InstallationMiddleware
} }
} }
private function handleInstallationSteps(Request $request, WebsiteInstallation $installation) private function handleInstallationSteps(Request $request, WebsiteInstallation $installation): bool
{ {
if ($installation->completed) { if ($installation->completed) {
return true; return true;
@@ -100,54 +106,54 @@ class InstallationMiddleware
return ! $this->isMismatchedStep($request, $installation); return ! $this->isMismatchedStep($request, $installation);
} }
private function isWelcomeStep(Request $request, WebsiteInstallation $installation) private function isWelcomeStep(Request $request, WebsiteInstallation $installation): bool
{ {
return $installation->step === 0 && $request->getRequestUri() === '/installation'; return $installation->step === 0 && $request->getRequestUri() === '/installation';
} }
private function isRedirectToWelcome(Request $request, WebsiteInstallation $installation) private function isRedirectToWelcome(Request $request, WebsiteInstallation $installation): bool
{ {
return $installation->step === 0 && $request->getRequestUri() !== '/installation' && $request->method() !== 'POST'; return $installation->step === 0 && $request->getRequestUri() !== '/installation' && $request->method() !== 'POST';
} }
private function isInvalidAccess(Request $request, WebsiteInstallation $installation) private function isInvalidAccess(Request $request, WebsiteInstallation $installation): bool
{ {
return $installation->step > 0 && $request->ip() !== $installation->user_ip; return $installation->step > 0 && $request->ip() !== $installation->user_ip;
} }
private function isInvalidStep(Request $request) private function isInvalidStep(Request $request): bool
{ {
return ! $this->isValidStep($request) && $this->isNonPostRequest($request); return ! $this->isValidStep($request) && $this->isNonPostRequest($request);
} }
private function isMismatchedStep(Request $request, WebsiteInstallation $installation) private function isMismatchedStep(Request $request, WebsiteInstallation $installation): bool
{ {
return $this->getCurrentStep($request) !== $installation->step && $this->isNonPostRequest($request); return $this->getCurrentStep($request) !== $installation->step && $this->isNonPostRequest($request);
} }
private function isValidStep(Request $request) private function isValidStep(Request $request): bool
{ {
$step = $this->getCurrentStep($request); $step = $this->getCurrentStep($request);
return filter_var($step, FILTER_VALIDATE_INT) !== false; return filter_var($step, FILTER_VALIDATE_INT) !== false;
} }
private function isNonPostRequest(Request $request) private function isNonPostRequest(Request $request): bool
{ {
return $request->method() !== 'POST' || $request->is('restart-installation'); return $request->method() !== 'POST' || $request->is('restart-installation');
} }
private function getCurrentStep(Request $request) private function getCurrentStep(Request $request): int
{ {
return (int) Str::after($request->path(), 'step/'); return (int) Str::after($request->path(), 'step/');
} }
private function redirectToStep(int $step) private function redirectToStep(int $step): \Symfony\Component\HttpFoundation\Response
{ {
return to_route('installation.show-step', $step); return to_route('installation.show-step', $step);
} }
protected function redirectIfNotCompleted(WebsiteInstallation $installation) protected function redirectIfNotCompleted(WebsiteInstallation $installation): \Symfony\Component\HttpFoundation\Response
{ {
if ($installation->step === 0) { if ($installation->step === 0) {
@@ -16,7 +16,13 @@ class LocalizationMiddleware
{ {
// Controleer of de instellingen bestaan en of de taal al in de sessie staat // Controleer of de instellingen bestaan en of de taal al in de sessie staat
if (Schema::hasTable('website_settings') && Session::has('locale')) { if (Schema::hasTable('website_settings') && Session::has('locale')) {
App::setLocale((string) Session::get('locale')); $locale = Session::get('locale');
if (! is_string($locale)) {
$response = $next($request);
assert($response instanceof Response);
return $response;
}
App::setLocale($locale);
$response = $next($request); $response = $next($request);
assert($response instanceof Response); assert($response instanceof Response);
@@ -26,16 +32,20 @@ class LocalizationMiddleware
$countryCode = config('habbo.site.default_language'); $countryCode = config('habbo.site.default_language');
// GEWIJZIGD: isset() werkt niet op Request::server() in PHP 8. Gebruik null !== in plaats daarvan. // GEWIJZIGD: isset() werkt niet op Request::server() in PHP 8. Gebruik null !== in plaats daarvan.
if (null !== \Illuminate\Support\Facades\Request::server('HTTP_CF_IPCOUNTRY')) { $cfCountry = \Illuminate\Support\Facades\Request::server('HTTP_CF_IPCOUNTRY');
$countryCode = strtolower((string) \Illuminate\Support\Facades\Request::server('HTTP_CF_IPCOUNTRY')); if (is_string($cfCountry)) {
} $countryCode = strtolower($cfCountry);
elseif (null !== \Illuminate\Support\Facades\Request::server('HTTP_ACCEPT_LANGUAGE')) { } elseif (is_string(\Illuminate\Support\Facades\Request::server('HTTP_ACCEPT_LANGUAGE'))) {
$countryCode = strtolower(substr((string) \Illuminate\Support\Facades\Request::server('HTTP_ACCEPT_LANGUAGE'), 0, 2)); $acceptLanguage = \Illuminate\Support\Facades\Request::server('HTTP_ACCEPT_LANGUAGE');
$countryCode = strtolower(substr($acceptLanguage, 0, 2));
} }
// Als de taal niet in de database staat, gebruik de standaardtaal // Als de taal niet in de database staat, gebruik de standaardtaal
if (Schema::hasTable('website_languages') && WebsiteLanguage::where('country_code', '=', $countryCode)->doesntExist()) { if (Schema::hasTable('website_languages') && WebsiteLanguage::where('country_code', '=', $countryCode)->doesntExist()) {
$defaultCountry = config('habbo.site.default_language'); $defaultCountry = config('habbo.site.default_language');
if (! is_string($defaultCountry)) {
$defaultCountry = 'en';
}
App::setLocale($defaultCountry); App::setLocale($defaultCountry);
Session::put('locale', $defaultCountry); Session::put('locale', $defaultCountry);
@@ -46,7 +56,9 @@ class LocalizationMiddleware
} }
// Zet de gedetecteerde taal // Zet de gedetecteerde taal
App::setLocale($countryCode); if (is_string($countryCode)) {
App::setLocale($countryCode);
}
Session::put('locale', $countryCode); Session::put('locale', $countryCode);
$response = $next($request); $response = $next($request);