From 627caccdaf6aa29a7cdde8dfe125355afc94ccf8 Mon Sep 17 00:00:00 2001 From: Sven Ullmann Date: Mon, 16 Mar 2026 18:06:14 +0100 Subject: [PATCH] initiatione --- .gitignore | 6 ++ README.md | 98 ++++++++++++++++++++++ composer.json | 23 +++++ src/DevOps/AppUrlNormalizer.php | 57 +++++++++++++ src/Resources/config/config.xml | 62 ++++++++++++++ src/Resources/config/plugin.png | Bin 0 -> 65866 bytes src/Resources/config/services.xml | 16 ++++ src/Subscriber/SystemConfigSubscriber.php | 39 +++++++++ src/SumediaStage.php | 45 ++++++++++ 9 files changed, 346 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 composer.json create mode 100644 src/DevOps/AppUrlNormalizer.php create mode 100644 src/Resources/config/config.xml create mode 100644 src/Resources/config/plugin.png create mode 100644 src/Resources/config/services.xml create mode 100644 src/Subscriber/SystemConfigSubscriber.php create mode 100644 src/SumediaStage.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..089f7c0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +/vendor/ +/node_modules/ +/.idea/ +/.vscode/ +/var/ +*.log diff --git a/README.md b/README.md new file mode 100644 index 0000000..925b09c --- /dev/null +++ b/README.md @@ -0,0 +1,98 @@ +# SumediaStage + +Shopware 6 Plugin zur Nutzung einer lizenzierten Installation unter einem URL-Unterverzeichnis (z. B. `/stage/`, `/local/`), ohne dass Plugin-Lizenzprüfungen oder die interne Shop-Identifikation fehlschlagen. + +## Hintergrund + +Shopware speichert die `APP_URL` zusammen mit der Shop-ID (`core.app.shopId`) in der Systemkonfiguration. Bei jedem Request vergleicht `ShopIdProvider` die aktuelle `APP_URL` mit dem gespeicherten Wert. Weichen Live (`https://example.com`) und Stage (`https://example.com/stage/`) ab, wirft Shopware eine `AppUrlChangeDetectedException` – Plugins melden daraufhin fehlende Lizenzen. + +Das Plugin registriert einen `EnvironmentHelperTransformer`, der bei jedem internen `APP_URL`-Lesezugriff den Pfad-Anteil automatisch entfernt: + +``` +https://www.example.com/stage/ → https://www.example.com +https://www.example.com/local/ → https://www.example.com +https://www.example.com → https://www.example.com (no-op) +``` + +## Installation auf dem Stage-System + +### Voraussetzungen + +- Shopware 6.6.x +- SSH-Zugang zum Stage-Server +- `APP_ENV` muss `dev` oder `staging` sein – **nicht** `prod` +- `APP_URL` in `.env.local` ist auf das Unterverzeichnis gesetzt, z. B.: + ``` + APP_URL=https://www.example.com/stage/ + ``` + +> **Wichtig:** Das Plugin lässt sich in `APP_ENV=prod` nicht aktivieren und registriert den Transformer auch dann nicht, falls es doch installiert sein sollte. Es ist ausschliesslich fuer Staging- und lokale Umgebungen gedacht. + +### 1. Plugin übertragen + +Plugin-Verzeichnis auf den Stage-Server kopieren (z. B. per rsync oder git): + +```bash +rsync -av custom/plugins/SumediaStage/ user@stage-server:/var/www/shopware/custom/plugins/SumediaStage/ +``` + +Oder per git, wenn das Stage-System dasselbe Repository nutzt – dann ist das Plugin bereits vorhanden. + +### 2. Plugin installieren und aktivieren + +```bash +php bin/console plugin:refresh +php bin/console plugin:install --activate SumediaStage +php bin/console cache:clear +``` + +### 3. Konfiguration prüfen + +Im Shopware-Admin unter **Einstellungen → Erweiterungen → SumediaStage**: + +| Einstellung | Empfohlener Wert | +|---|---| +| Normalize APP_URL | aktiv (true) | +| Base URL override | leer lassen | + +### 4. Verifizieren + +Nach der Installation sollte der Admin-Login funktionieren und keine Plugin-Lizenzfehler mehr erscheinen. Zur Kontrolle: + +```bash +php bin/console system:config:get core.app.shopId +``` + +Der gespeicherte `app_url`-Wert sollte nun ohne den Unterverzeichnis-Pfad gespeichert werden. + +## Deinstallation + +```bash +php bin/console plugin:uninstall SumediaStage +php bin/console cache:clear +``` + +## Konfigurationsoptionen + +**Admin (Einstellungen → Erweiterungen → SumediaStage):** + +| Schlüssel | Typ | Default | Beschreibung | +|---|---|---|---| +| `normalizeAppUrl` | bool | `true` | Transformer aktiv/inaktiv | +| `baseUrl` | string | leer | Explizite Basis-URL statt Auto-Erkennung (z. B. hinter Proxy mit falschem Host-Header) | + +**Umgebungsvariablen (`.env.local`):** + +| Variable | Wert | Beschreibung | +|---|---|---| +| `SUMEDIA_STAGE_ENABLED` | `0` | Transformer deaktivieren, ohne das Plugin zu deinstallieren | +| `APP_ENV` | `prod` | Transformer wird automatisch blockiert, Aktivierung wird verweigert | + +Beispiel `.env.local` um das Plugin temporaer zu deaktivieren: +``` +SUMEDIA_STAGE_ENABLED=0 +``` + +## Hinweis + +Das Plugin muss auf **allen** Instanzen (live, stage, local) installiert und aktiviert sein. Auf Live-Instanzen, bei denen `APP_URL` keinen Pfad-Anteil enthält, ist der Transformer ein No-Op. diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..7eb7877 --- /dev/null +++ b/composer.json @@ -0,0 +1,23 @@ +{ + "name": "sumedia-webdesign/sumedia-stage", + "description": "Normalizes APP_URL for staging environments served under a subdirectory", + "type": "shopware-platform-plugin", + "version": "1.0.0", + "license": "MIT", + "require": { + "shopware/core": "~6.6.0" + }, + "extra": { + "shopware-plugin-class": "SumediaStage\\SumediaStage", + "plugin-icon": "src/Resources/config/plugin.png", + "label": { + "de-DE": "Sumedia Stage", + "en-GB": "Sumedia Stage" + } + }, + "autoload": { + "psr-4": { + "SumediaStage\\": "src/" + } + } +} diff --git a/src/DevOps/AppUrlNormalizer.php b/src/DevOps/AppUrlNormalizer.php new file mode 100644 index 0000000..075969b --- /dev/null +++ b/src/DevOps/AppUrlNormalizer.php @@ -0,0 +1,57 @@ +getKey() !== 'APP_URL' || !self::$enabled) { + return; + } + + if (self::$baseUrl !== null) { + $data->setValue(rtrim(self::$baseUrl, '/')); + return; + } + + $url = $data->getValue(); + if (!\is_string($url)) { + return; + } + + $parsed = parse_url($url); + if ($parsed === false || empty($parsed['host'])) { + return; + } + + $normalized = ($parsed['scheme'] ?? 'https') . '://' . $parsed['host']; + if (isset($parsed['port'])) { + $normalized .= ':' . $parsed['port']; + } + + $data->setValue($normalized); + } +} diff --git a/src/Resources/config/config.xml b/src/Resources/config/config.xml new file mode 100644 index 0000000..6bd58ae --- /dev/null +++ b/src/Resources/config/config.xml @@ -0,0 +1,62 @@ + + + + + + Sumedia Stage + Sumedia Stage + + + normalizeAppUrl + + + + TECHNICAL BACKGROUND: Shopware stores APP_URL alongside the Shop ID (core.app.shopId) and compares it on every request via ShopIdProvider. If live uses "https://example.com" but stage uses "https://example.com/stage/", Shopware throws AppUrlChangeDetectedException and plugins report license errors. + + HOW IT WORKS: This plugin registers an EnvironmentHelperTransformer that intercepts every internal APP_URL read and strips the path component before Shopware sees it. Both live and stage then present the same base URL to Shopware. + + Example: https://example.com/stage/ becomes https://example.com + + Safe to enable on live instances – if APP_URL has no path, the transformer is a no-op. + + Changes take effect after cache:clear. + + + TECHNISCHER HINTERGRUND: Shopware speichert APP_URL zusammen mit der Shop-ID (core.app.shopId) und vergleicht sie bei jedem Request via ShopIdProvider. Weichen Live ("https://example.com") und Stage ("https://example.com/stage/") ab, wirft Shopware eine AppUrlChangeDetectedException und Plugins melden Lizenzfehler. + + FUNKTIONSWEISE: Das Plugin registriert einen EnvironmentHelperTransformer, der jeden internen APP_URL-Lesezugriff abfängt und den Pfad-Anteil entfernt, bevor Shopware ihn verarbeitet. Damit sehen Live und Stage dieselbe Basis-URL. + + Beispiel: https://example.com/stage/ wird zu https://example.com + + Auf Live-Instanzen ohne Pfad ist der Transformer wirkungslos. + + Aenderungen greifen nach cache:clear. + + true + + + + baseUrl + + + + Leave empty for automatic detection – the transformer extracts scheme and host from APP_URL automatically. + + Set this only if auto-detection produces a wrong result, e.g. behind a reverse proxy that alters the Host header. + + Format: https://www.example.com (no trailing slash) + + + Leer lassen fuer automatische Erkennung – der Transformer extrahiert Scheme und Host automatisch aus APP_URL. + + Nur setzen, wenn die automatische Erkennung ein falsches Ergebnis liefert, z. B. hinter einem Reverse-Proxy, der den Host-Header veraendert. + + Format: https://www.example.com (kein abschliessender Slash) + + + + + + + diff --git a/src/Resources/config/plugin.png b/src/Resources/config/plugin.png new file mode 100644 index 0000000000000000000000000000000000000000..f433073f2f8d1105ff9d885d420928a1eaf89f3a GIT binary patch literal 65866 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ƇS`ud3jI-Y0zOc1ydSOIT|2A(8z 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

Vg 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

C*OQ0KGM0-Z6!XUU&_v7(ww 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 nAh0C6eHtIO5NScLx{p*MMQ literal 0 HcmV?d00001 diff --git a/src/Resources/config/services.xml b/src/Resources/config/services.xml new file mode 100644 index 0000000..51c0f1b --- /dev/null +++ b/src/Resources/config/services.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + diff --git a/src/Subscriber/SystemConfigSubscriber.php b/src/Subscriber/SystemConfigSubscriber.php new file mode 100644 index 0000000..d40c790 --- /dev/null +++ b/src/Subscriber/SystemConfigSubscriber.php @@ -0,0 +1,39 @@ + ['onKernelRequest', 512], + ]; + } + + public function onKernelRequest(RequestEvent $event): void + { + if ($this->configured) { + return; + } + + $this->configured = true; + + $enabled = (bool) ($this->systemConfigService->get('SumediaStage.config.normalizeAppUrl') ?? true); + $baseUrl = (string) ($this->systemConfigService->get('SumediaStage.config.baseUrl') ?? ''); + + AppUrlNormalizer::configure($enabled, $baseUrl ?: null); + } +} diff --git a/src/SumediaStage.php b/src/SumediaStage.php new file mode 100644 index 0000000..168262c --- /dev/null +++ b/src/SumediaStage.php @@ -0,0 +1,45 @@ +isAllowed()) { + return; + } + + EnvironmentHelper::addTransformer(AppUrlNormalizer::class); + } + + public function activate(ActivateContext $activateContext): void + { + if ((string) EnvironmentHelper::getVariable('APP_ENV') === 'prod') { + throw new \RuntimeException( + 'SumediaStage must not be activated in production (APP_ENV=prod). ' + . 'This plugin is intended for staging and local environments only.' + ); + } + } + + private function isAllowed(): bool + { + if ((string) EnvironmentHelper::getVariable('APP_ENV') === 'prod') { + return false; + } + + if ((string) EnvironmentHelper::getVariable('SUMEDIA_STAGE_ENABLED', '1') === '0') { + return false; + } + + return true; + } +}