From 0114d4bacac64331bb24ee047adc59fa209ef2d2 Mon Sep 17 00:00:00 2001 From: Simon Hamp Date: Fri, 23 Oct 2026 00:36:09 +0100 Subject: [PATCH] Only upgrade insecure requests outside local The upgrade-insecure-requests CSP meta made the browser fetch every asset over https. On a Herd site that hasn't been secured those requests fail, Alpine never loads, and the x-cloak on keeps the page blank. Leave the meta out when APP_ENV is local so a fresh clone or worktree can be previewed over plain http. Other environments still get it. Co-Authored-By: Claude Opus 5.5 --- resources/views/components/layout.blade.php | 11 ++-- .../views/components/layouts/auth.blade.php | 5 +- .../components/layouts/dashboard.blade.php | 11 ++-- tests/Feature/UpgradeInsecureRequestsTest.php | 63 +++++++++++++++++++ 4 files changed, 81 insertions(+), 9 deletions(-) create mode 100644 tests/Feature/UpgradeInsecureRequestsTest.php diff --git a/resources/views/components/layout.blade.php b/resources/views/components/layout.blade.php index 599808331..42dab2a66 100644 --- a/resources/views/components/layout.blade.php +++ b/resources/views/components/layout.blade.php @@ -32,10 +32,13 @@ x-bind:class="{ 'dark': isDark === true }" > - + {{-- Skipped locally so the site can be served over plain http --}} + @unless (app()->isLocal()) + + @endunless - + {{-- Skipped locally so the site can be served over plain http --}} + @unless (app()->isLocal()) + + @endunless diff --git a/resources/views/components/layouts/dashboard.blade.php b/resources/views/components/layouts/dashboard.blade.php index ae2f5548b..54dd23668 100644 --- a/resources/views/components/layouts/dashboard.blade.php +++ b/resources/views/components/layouts/dashboard.blade.php @@ -32,10 +32,13 @@ x-bind:class="{ 'dark': isDark === true }" > - + {{-- Skipped locally so the site can be served over plain http --}} + @unless (app()->isLocal()) + + @endunless ['/docs/mobile/3/getting-started/introduction', false], + 'auth layout' => ['/login', false], + 'dashboard layout' => ['/dashboard', true], + ]; + } + + #[Test] + #[DataProvider('pages')] + public function pages_upgrade_insecure_requests_outside_local(string $uri, bool $signedIn): void + { + $this->app['env'] = 'production'; + + $this->getPage($uri, $signedIn) + ->assertStatus(200) + ->assertSee('content="upgrade-insecure-requests"', false); + } + + #[Test] + #[DataProvider('pages')] + public function pages_do_not_upgrade_insecure_requests_locally(string $uri, bool $signedIn): void + { + $this->app['env'] = 'local'; + + $this->getPage($uri, $signedIn) + ->assertStatus(200) + ->assertDontSee('upgrade-insecure-requests', false); + } + + private function getPage(string $uri, bool $signedIn) + { + if ($signedIn) { + $this->actingAs(User::factory()->create()); + } + + return $this->withoutVite()->get($uri); + } +}