🆙 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
{
public function handle(Request $request, Closure $next)
public function handle(Request $request, Closure $next): \Symfony\Component\HttpFoundation\Response
{
if (Cache::get('app_installed')) {
return $next($request);
$response = $next($request);
assert($response instanceof \Symfony\Component\HttpFoundation\Response);
return $response;
}
$this->ensureInstallationTableExists();
@@ -36,15 +38,19 @@ class InstallationMiddleware
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')]);
if (! Schema::hasTable('website_installation')) {
$hasInstallTable = Schema::hasTable('website_installation');
if (! $hasInstallTable) {
throw new MigrationFailedException('website_installation');
}
}
@@ -54,7 +60,7 @@ class InstallationMiddleware
}
}
private function getInstallation()
private function getInstallation(): WebsiteInstallation
{
try {
$installation = WebsiteInstallation::query()->first();
@@ -64,7 +70,7 @@ class InstallationMiddleware
'step' => 0,
'completed' => false,
'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) {
return true;
@@ -100,54 +106,54 @@ class InstallationMiddleware
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';
}
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';
}
private function isInvalidAccess(Request $request, WebsiteInstallation $installation)
private function isInvalidAccess(Request $request, WebsiteInstallation $installation): bool
{
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);
}
private function isMismatchedStep(Request $request, WebsiteInstallation $installation)
private function isMismatchedStep(Request $request, WebsiteInstallation $installation): bool
{
return $this->getCurrentStep($request) !== $installation->step && $this->isNonPostRequest($request);
}
private function isValidStep(Request $request)
private function isValidStep(Request $request): bool
{
$step = $this->getCurrentStep($request);
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');
}
private function getCurrentStep(Request $request)
private function getCurrentStep(Request $request): int
{
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);
}
protected function redirectIfNotCompleted(WebsiteInstallation $installation)
protected function redirectIfNotCompleted(WebsiteInstallation $installation): \Symfony\Component\HttpFoundation\Response
{
if ($installation->step === 0) {
@@ -16,7 +16,13 @@ class LocalizationMiddleware
{
// Controleer of de instellingen bestaan en of de taal al in de sessie staat
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);
assert($response instanceof Response);
@@ -26,16 +32,20 @@ class LocalizationMiddleware
$countryCode = config('habbo.site.default_language');
// 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')) {
$countryCode = strtolower((string) \Illuminate\Support\Facades\Request::server('HTTP_CF_IPCOUNTRY'));
}
elseif (null !== \Illuminate\Support\Facades\Request::server('HTTP_ACCEPT_LANGUAGE')) {
$countryCode = strtolower(substr((string) \Illuminate\Support\Facades\Request::server('HTTP_ACCEPT_LANGUAGE'), 0, 2));
$cfCountry = \Illuminate\Support\Facades\Request::server('HTTP_CF_IPCOUNTRY');
if (is_string($cfCountry)) {
$countryCode = strtolower($cfCountry);
} elseif (is_string(\Illuminate\Support\Facades\Request::server('HTTP_ACCEPT_LANGUAGE'))) {
$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
if (Schema::hasTable('website_languages') && WebsiteLanguage::where('country_code', '=', $countryCode)->doesntExist()) {
$defaultCountry = config('habbo.site.default_language');
if (! is_string($defaultCountry)) {
$defaultCountry = 'en';
}
App::setLocale($defaultCountry);
Session::put('locale', $defaultCountry);
@@ -46,7 +56,9 @@ class LocalizationMiddleware
}
// Zet de gedetecteerde taal
App::setLocale($countryCode);
if (is_string($countryCode)) {
App::setLocale($countryCode);
}
Session::put('locale', $countryCode);
$response = $next($request);