From a18b571ae758711836d893201badf3de185e4b7a Mon Sep 17 00:00:00 2001 From: isaacclad Date: Wed, 1 Jul 2026 21:35:21 +0000 Subject: [PATCH] Fix platform session ping loop and harden meeting detail timezone display. Defer inconclusive auth ping 401s instead of clearing SSO sessions; add client keepalive and safe timezone fallback on room pages. Co-authored-by: Cursor --- app/Http/Middleware/EnsurePlatformSession.php | 19 +++++++++++------ app/Models/Room.php | 13 ++++++++++++ .../views/components/app-layout.blade.php | 1 + .../views/meet/conferences/show.blade.php | 2 +- resources/views/meet/rooms/show.blade.php | 2 +- resources/views/meet/webinars/show.blade.php | 2 +- .../views/partials/sso-keepalive.blade.php | 21 +++++++++++++++++++ 7 files changed, 51 insertions(+), 9 deletions(-) create mode 100644 resources/views/partials/sso-keepalive.blade.php diff --git a/app/Http/Middleware/EnsurePlatformSession.php b/app/Http/Middleware/EnsurePlatformSession.php index 7912de2..c2c01a8 100644 --- a/app/Http/Middleware/EnsurePlatformSession.php +++ b/app/Http/Middleware/EnsurePlatformSession.php @@ -35,12 +35,12 @@ class EnsurePlatformSession return $next($request); } - $cookieHeader = (string) $request->headers->get('Cookie', ''); - if ($cookieHeader === '') { - return $this->clearAppSession($request); - } - try { + $cookieHeader = (string) $request->headers->get('Cookie', ''); + if ($cookieHeader === '') { + return $this->deferPlatformCheck($request, $next); + } + $response = Http::withHeaders(['Cookie' => $cookieHeader]) ->timeout(3) ->connectTimeout(2) @@ -50,7 +50,7 @@ class EnsurePlatformSession } if ($response->status() === 401) { - return $this->clearAppSession($request); + return $this->deferPlatformCheck($request, $next); } if ($response->successful()) { @@ -60,6 +60,13 @@ class EnsurePlatformSession return $next($request); } + private function deferPlatformCheck(Request $request, Closure $next): Response + { + $request->session()->put('platform_session_verified_at', time()); + + return $next($request); + } + private function clearAppSession(Request $request): Response { Auth::logout(); diff --git a/app/Models/Room.php b/app/Models/Room.php index 45918bf..fb11c71 100644 --- a/app/Models/Room.php +++ b/app/Models/Room.php @@ -151,6 +151,19 @@ class Room extends Model return data_get($this->settings, $key, data_get(config('meet.default_settings'), $key, $default)); } + public function safeTimezone(): string + { + $timezone = (string) ($this->timezone ?: 'UTC'); + + try { + new \DateTimeZone($timezone); + + return $timezone; + } catch (\Throwable) { + return 'UTC'; + } + } + public function isLive(): bool { return $this->status === 'live'; diff --git a/resources/views/components/app-layout.blade.php b/resources/views/components/app-layout.blade.php index 8b18427..64ac22c 100644 --- a/resources/views/components/app-layout.blade.php +++ b/resources/views/components/app-layout.blade.php @@ -57,5 +57,6 @@ @endauth @include('partials.wallet-topup-modal', ['openOnLoad' => (bool) session('topup_required')]) @include('partials.afia') + @include('partials.sso-keepalive') diff --git a/resources/views/meet/conferences/show.blade.php b/resources/views/meet/conferences/show.blade.php index 5f8c74f..f990545 100644 --- a/resources/views/meet/conferences/show.blade.php +++ b/resources/views/meet/conferences/show.blade.php @@ -47,7 +47,7 @@ @if ($room->scheduled_at)

- Scheduled: {{ $room->scheduled_at->timezone($room->timezone)->format('M j, Y g:i A T') }} + Scheduled: {{ $room->scheduled_at->timezone($room->safeTimezone())->format('M j, Y g:i A T') }}

@endif diff --git a/resources/views/meet/rooms/show.blade.php b/resources/views/meet/rooms/show.blade.php index f845321..5077643 100644 --- a/resources/views/meet/rooms/show.blade.php +++ b/resources/views/meet/rooms/show.blade.php @@ -50,7 +50,7 @@ @if ($room->scheduled_at)

- Scheduled: {{ $room->scheduled_at->timezone($room->timezone)->format('M j, Y g:i A T') }} + Scheduled: {{ $room->scheduled_at->timezone($room->safeTimezone())->format('M j, Y g:i A T') }}

@endif diff --git a/resources/views/meet/webinars/show.blade.php b/resources/views/meet/webinars/show.blade.php index 7266dfc..3d2c7b1 100644 --- a/resources/views/meet/webinars/show.blade.php +++ b/resources/views/meet/webinars/show.blade.php @@ -66,7 +66,7 @@ @if ($room->scheduled_at)

- Scheduled: {{ $room->scheduled_at->timezone($room->timezone)->format('M j, Y g:i A T') }} + Scheduled: {{ $room->scheduled_at->timezone($room->safeTimezone())->format('M j, Y g:i A T') }}

@endif diff --git a/resources/views/partials/sso-keepalive.blade.php b/resources/views/partials/sso-keepalive.blade.php new file mode 100644 index 0000000..2d297c5 --- /dev/null +++ b/resources/views/partials/sso-keepalive.blade.php @@ -0,0 +1,21 @@ +@if (auth()->check()) + @php + $authPing = 'https://'.config('app.auth_domain').'/sso/ping'; + $platformSignedOutUrl = route('sso.platform-signed-out', ['redirect' => url()->current()]); + @endphp + +@endif