feat(updater): disable the in-app updater in containerized installs

The Docker image already injects CONTAINERIZED=true; consume it via config('invoiceshelf.containerized'), expose it on /app/version, block the update endpoints + console command, and show a 'docker compose pull' panel instead of the updater. Adds missing i18n keys.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Darko Gjorgjijoski
2026-06-14 23:42:11 +02:00
parent c04b84e5b5
commit 9e496102d4
10 changed files with 146 additions and 15 deletions

View File

@@ -0,0 +1,28 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
/**
* Blocks the in-app updater when running inside the official Docker image.
*
* Containers are upgraded with `docker compose pull`, not by copying release
* files over the image filesystem (which is ephemeral and reset on recreate).
* The CONTAINERIZED flag is injected into .env by docker/production/inject.sh.
*/
class EnsureNotContainerized
{
public function handle(Request $request, Closure $next): Response
{
abort_if(
(bool) config('invoiceshelf.containerized'),
403,
'The in-app updater is disabled in containerized installs. Upgrade with `docker compose pull`.'
);
return $next($request);
}
}