Release v0.2.0 - Security and integrity features

- Add REST API response signing using HMAC-SHA256
- Add SHA256 hash validation for version file uploads
- Add ResponseSigner class for automatic API response signing
- Add file_hash column to database schema
- Remove external URL support from version uploads
- Update translations with all fuzzy strings resolved

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-22 16:57:54 +01:00
parent 8420734f37
commit 23bbc24c5f
14 changed files with 789 additions and 75 deletions

View File

@@ -3,7 +3,7 @@
# This file is distributed under the GPL-2.0-or-later.
msgid ""
msgstr ""
"Project-Id-Version: WC Licensed Product 0.1.0\n"
"Project-Id-Version: WC Licensed Product 0.2.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-01-22 11:52+0100\n"
"PO-Revision-Date: 2026-01-21T00:00:00+00:00\n"
@@ -44,18 +44,16 @@ msgid "Overview"
msgstr "Übersicht"
#: src/Admin/AdminController.php:138
#, fuzzy
msgid "No licenses found"
msgstr "Keine Lizenzen gefunden."
msgstr "Keine Lizenzen gefunden"
#: src/Admin/AdminController.php:139
msgid "Searching..."
msgstr "Suche..."
#: src/Admin/AdminController.php:140
#, fuzzy
msgid "Search failed"
msgstr "Speichern fehlgeschlagen"
msgstr "Suche fehlgeschlagen"
#: src/Admin/AdminController.php:141 src/Admin/OrderLicenseController.php:285
msgid "Saving..."
@@ -249,11 +247,11 @@ msgid "Attention:"
msgstr "Achtung:"
#: src/Admin/AdminController.php:910
#, fuzzy, php-format
#, php-format
msgid "%d license is expiring within the next 30 days."
msgid_plural "%d licenses are expiring within the next 30 days."
msgstr[0] "läuft innerhalb der nächsten 30 Tage ab."
msgstr[1] "läuft innerhalb der nächsten 30 Tage ab."
msgstr[0] "%d Lizenz läuft innerhalb der nächsten 30 Tage ab."
msgstr[1] "%d Lizenzen laufen innerhalb der nächsten 30 Tage ab."
#: src/Admin/AdminController.php:918
msgid "View Licenses"
@@ -657,25 +655,21 @@ msgid "No domain specified"
msgstr "Keine Domain angegeben"
#: src/Admin/OrderLicenseController.php:56
#, fuzzy
msgid "Product Licenses"
msgstr "Top-Produkte nach Lizenzen"
msgstr "Produktlizenzen"
#: src/Admin/OrderLicenseController.php:77
#: src/Admin/OrderLicenseController.php:313
#, fuzzy
msgid "Order not found."
msgstr "Version nicht gefunden."
msgstr "Bestellung nicht gefunden."
#: src/Admin/OrderLicenseController.php:92
#, fuzzy
msgid "This order does not contain licensed products."
msgstr "Version stimmt nicht mit Ihrem lizensierten Produkt überein."
msgstr "Diese Bestellung enthält keine lizensierten Produkte."
#: src/Admin/OrderLicenseController.php:106
#, fuzzy
msgid "Order Domain"
msgstr "Neue Domain"
msgstr "Bestellungs-Domain"
#: src/Admin/OrderLicenseController.php:108
msgid ""
@@ -706,22 +700,25 @@ msgstr ""
#: src/Admin/OrderLicenseController.php:137
msgid "Licenses will be generated when the order is marked as paid/completed."
msgstr "Lizenzen werden generiert, sobald die Bestellung als bezahlt/abgeschlossen markiert wird."
msgstr ""
"Lizenzen werden generiert, sobald die Bestellung als bezahlt/abgeschlossen "
"markiert wird."
#: src/Admin/OrderLicenseController.php:178
msgid "Edit domain"
msgstr "Domain bearbeiten"
#: src/Admin/OrderLicenseController.php:208
#, fuzzy
msgid "View in Licenses"
msgstr "Lizenzen anzeigen"
msgstr "In Lizenzen anzeigen"
#. translators: %s: Link to licenses page
#: src/Admin/OrderLicenseController.php:221
#, php-format
msgid "For more actions (revoke, extend, delete), go to the %s page."
msgstr "Für weitere Aktionen (widerrufen, verlängern, löschen), gehen Sie zur Seite %s."
msgstr ""
"Für weitere Aktionen (widerrufen, verlängern, löschen), gehen Sie zur Seite "
"%s."
#: src/Admin/OrderLicenseController.php:286
msgid "Saved!"
@@ -738,20 +735,17 @@ msgid "Please enter a valid domain."
msgstr "Bitte geben Sie eine gültige Domain ein."
#: src/Admin/OrderLicenseController.php:308
#, fuzzy
msgid "Invalid order ID."
msgstr "Ungültige Lizenz-ID."
msgstr "Ungültige Bestellungs-ID."
#: src/Admin/OrderLicenseController.php:319
#: src/Admin/OrderLicenseController.php:357
#, fuzzy
msgid "Invalid domain format."
msgstr "Ungültiges Datumsformat."
msgstr "Ungültiges Domain-Format."
#: src/Admin/OrderLicenseController.php:327
#, fuzzy
msgid "Order domain updated."
msgstr "%d aktualisiert."
msgstr "Bestellungs-Domain aktualisiert."
#: src/Admin/OrderLicenseController.php:363
#: src/Frontend/AccountController.php:351
@@ -760,9 +754,8 @@ msgid "License not found."
msgstr "Lizenz nicht gefunden."
#: src/Admin/OrderLicenseController.php:371
#, fuzzy
msgid "License domain updated."
msgstr "Lizenz-Domain"
msgstr "Lizenz-Domain aktualisiert."
#: src/Admin/OrderLicenseController.php:375
msgid "Failed to update license domain."
@@ -973,14 +966,12 @@ msgid "This version already exists."
msgstr "Diese Version existiert bereits."
#: src/Admin/VersionAdminController.php:266
#, fuzzy
msgid "Product not found."
msgstr "Version nicht gefunden."
msgstr "Produkt nicht gefunden."
#: src/Admin/VersionAdminController.php:270
#, fuzzy
msgid "This product is not a licensed product."
msgstr "Version stimmt nicht mit Ihrem lizensierten Produkt überein."
msgstr "Dieses Produkt ist kein lizensiertes Produkt."
#: src/Admin/VersionAdminController.php:283
msgid "Failed to create version."
@@ -1077,12 +1068,10 @@ msgid "License Domain:"
msgstr "Lizenz-Domain:"
#: src/Checkout/CheckoutBlocksIntegration.php:105
#, fuzzy
msgid "Please enter a valid domain for your license activation."
msgstr "Bitte geben Sie eine Domain für Ihre Lizenz-Aktivierung ein."
msgstr "Bitte geben Sie eine gültige Domain für Ihre Lizenz-Aktivierung ein."
#: src/Checkout/StoreApiExtension.php:85
#, fuzzy
msgid "Domain for license activation"
msgstr "Domain für Lizenz-Aktivierung"
@@ -1332,9 +1321,8 @@ msgid "The new domain is the same as the current domain."
msgstr "Die neue Domain ist dieselbe wie die aktuelle Domain."
#: src/Frontend/AccountController.php:381
#, fuzzy
msgid "Failed to transfer license. Please try again."
msgstr "Übertragung fehlgeschlagen. Bitte versuchen Sie es erneut."
msgstr "Lizenzübertragung fehlgeschlagen. Bitte versuchen Sie es erneut."
#: src/Frontend/DownloadController.php:65
#: src/Frontend/DownloadController.php:89
@@ -1468,6 +1456,32 @@ msgstr "Ja"
msgid "No"
msgstr "Nein"
#: src/Admin/VersionAdminController.php:101
msgid "SHA256 Hash"
msgstr "SHA256 Prüfsumme"
#: src/Admin/VersionAdminController.php:103
msgid "Enter SHA256 checksum..."
msgstr "SHA256 Prüfsumme eingeben..."
#: src/Admin/VersionAdminController.php:104
msgid ""
"SHA256 checksum of the uploaded file (optional but recommended for integrity "
"verification)."
msgstr ""
"SHA256 Prüfsumme der hochgeladenen Datei (optional, aber empfohlen zur "
"Integritätsprüfung)."
#: src/Product/VersionManager.php:67
msgid "Attachment file not found."
msgstr "Anhangs-Datei nicht gefunden."
#. translators: 1: provided hash, 2: calculated hash
#: src/Product/VersionManager.php:73
#, php-format
msgid "File checksum does not match. Expected: %1$s, Got: %2$s"
msgstr "Datei-Prüfsumme stimmt nicht überein. Erwartet: %1$s, Erhalten: %2$s"
#~ msgid "Maximum number of domain activations per license. Default: 1"
#~ msgstr "Maximale Anzahl der Domain-Aktivierungen pro Lizenz. Standard: 1"