v1.2.0: Umbenennung, zweizeiliger Erfolgstext, Umlaute

This commit is contained in:
2026-09-21 20:28:05 +02:00
parent bda785662d
commit c9338b18c6
@@ -14,12 +14,12 @@ use JTL\Plugin\PluginInterface;
* *
* Warum V1 statt der aktuellen ALTCHA-Widget-Version (v3)? * Warum V1 statt der aktuellen ALTCHA-Widget-Version (v3)?
* Das offizielle JS-Widget v3 nutzt ein neueres, komplexeres Protokoll (PBKDF2/Argon2id/Scrypt mit * Das offizielle JS-Widget v3 nutzt ein neueres, komplexeres Protokoll (PBKDF2/Argon2id/Scrypt mit
* Key-Prefix-Matching), fuer das es keine einfache, robust dokumentierte "Challenge direkt einbetten"- * Key-Prefix-Matching), für das es keine einfache, robust dokumentierte "Challenge direkt einbetten"-
* Variante ohne zusaetzlichen Netzwerk-Endpunkt gibt. Das klassische V1-Protokoll (SHA-256 Hashcash: * Variante ohne zusätzlichen Netzwerk-Endpunkt gibt. Das klassische V1-Protokoll (SHA-256 Hashcash:
* Client sucht per Brute-Force eine Zahl n, fuer die SHA256(salt+n) == challenge gilt) ist dagegen * Client sucht per Brute-Force eine Zahl n, für die SHA256(salt+n) == challenge gilt) ist dagegen
* vollstaendig dokumentiert, einfach zu pruefen und wird hier zusammen mit einem kleinen eigenen * vollständig dokumentiert, einfach zu prüfen und wird hier zusammen mit einem kleinen eigenen
* JS-Loeser (assets/fp-altcha.js) eingesetzt. Serverseitig kommt weiterhin der offizielle, * JS-Löser (assets/fp-altcha.js) eingesetzt. Serverseitig kommt weiterhin der offizielle,
* unveraenderte ALTCHA-Code zum Einsatz (siehe src/Vendor/AltchaOrg/Altcha/V1). * unveränderte ALTCHA-Code zum Einsatz (siehe src/Vendor/AltchaOrg/Altcha/V1).
*/ */
class AltchaService class AltchaService
{ {
@@ -28,8 +28,8 @@ class AltchaService
private Altcha $altcha; private Altcha $altcha;
/** /**
* @param string $pluginDir Basisverzeichnis des Plugins (__DIR__ aus Bootstrap.php), fuer die * @param string $pluginDir Basisverzeichnis des Plugins (__DIR__ aus Bootstrap.php), für die
* automatische Erzeugung des HMAC-Geheimschluessels (siehe getHmacSecret()). * automatische Erzeugung des HMAC-Geheimschlüssels (siehe getHmacSecret()).
*/ */
public function __construct(PluginInterface $plugin, string $pluginDir) public function __construct(PluginInterface $plugin, string $pluginDir)
{ {
@@ -64,7 +64,7 @@ class AltchaService
} }
/** /**
* Erzeugt eine neue Pruefung und liefert sie als Array, das 1:1 als JSON in die Seite * Erzeugt eine neue Prüfung und liefert sie als Array, das 1:1 als JSON in die Seite
* eingebettet werden kann (siehe TemplateHandler). * eingebettet werden kann (siehe TemplateHandler).
* *
* @return array<string, string|int> * @return array<string, string|int>
@@ -99,7 +99,7 @@ class AltchaService
} }
/** /**
* Prueft das per POST["altcha"] gesendete, base64-kodierte Loesungs-Payload. * Prüft das per POST["altcha"] gesendete, base64-kodierte Lösungs-Payload.
*/ */
public function verifyPost(): bool public function verifyPost(): bool
{ {
@@ -114,23 +114,23 @@ class AltchaService
if (!$this->isConfigured()) { if (!$this->isConfigured()) {
// Kein HMAC-Secret hinterlegt -> Plugin ist nicht korrekt eingerichtet. // Kein HMAC-Secret hinterlegt -> Plugin ist nicht korrekt eingerichtet.
// Sicherheitshalber ablehnen statt durchzulassen. // Sicherheitshalber ablehnen statt durchzulassen.
$this->log('kein HMAC-Secret konfiguriert, Pruefung wird abgelehnt'); $this->log('kein HMAC-Secret konfiguriert, Prüfung wird abgelehnt');
return false; return false;
} }
$verified = $this->altcha->verifySolution($field, true); $verified = $this->altcha->verifySolution($field, true);
$this->log('Pruefungsergebnis: ' . ($verified ? 'erfolgreich' : 'fehlgeschlagen')); $this->log('Prüfungsergebnis: ' . ($verified ? 'erfolgreich' : 'fehlgeschlagen'));
return $verified; return $verified;
} }
/** /**
* Liefert den HMAC-Geheimschluessel. Wurde im Plugin-Einstellungsfeld manuell ein Wert * Liefert den HMAC-Geheimschlüssel. Wurde im Plugin-Einstellungsfeld manuell ein Wert
* eingetragen, hat dieser Vorrang (z. B. um denselben Schluessel bewusst auf mehreren * eingetragen, hat dieser Vorrang (z. B. um denselben Schlüssel bewusst auf mehreren
* Installationen zu verwenden). Andernfalls wird beim allerersten Aufruf automatisch ein * Installationen zu verwenden). Andernfalls wird beim allerersten Aufruf automatisch ein
* zufaelliger Schluessel erzeugt und in einer eigenen Datei im Plugin-Verzeichnis gespeichert, * zufälliger Schlüssel erzeugt und in einer eigenen Datei im Plugin-Verzeichnis gespeichert,
* sodass keine manuelle Einrichtung noetig ist. * sodass keine manuelle Einrichtung nötig ist.
*/ */
private function getHmacSecret(): string private function getHmacSecret(): string
{ {
@@ -162,17 +162,17 @@ class AltchaService
$written = @\file_put_contents( $written = @\file_put_contents(
$file, $file,
"<?php\n\n// Automatisch erzeugter HMAC-Geheimschluessel -- nicht manuell bearbeiten.\n" "<?php\n\n// Automatisch erzeugter HMAC-Geheimschlüssel -- nicht manuell bearbeiten.\n"
. 'return ' . \var_export($secret, true) . ";\n" . 'return ' . \var_export($secret, true) . ";\n"
); );
if ($written === false) { if ($written === false) {
// Verzeichnis nicht beschreibbar o. Ae. -- sicherheitshalber "nicht konfiguriert" // Verzeichnis nicht beschreibbar o. Ä. -- sicherheitshalber "nicht konfiguriert"
// melden (siehe isConfigured()/verifyPost()), statt bei jedem Aufruf einen neuen, // melden (siehe isConfigured()/verifyPost()), statt bei jedem Aufruf einen neuen,
// nicht dauerhaften Schluessel zu verwenden. // nicht dauerhaften Schlüssel zu verwenden.
$this->log( $this->log(
'Konnte HMAC-Geheimschluessel nicht automatisch speichern (' . $file . '). ' 'Konnte HMAC-Geheimschlüssel nicht automatisch speichern (' . $file . '). '
. 'Bitte Schreibrechte pruefen oder Schluessel manuell in den Einstellungen setzen.' . 'Bitte Schreibrechte prüfen oder Schlüssel manuell in den Einstellungen setzen.'
); );
return ''; return '';