diff --git a/Changes.md b/Changes.md index 974c46a..97d6330 100644 --- a/Changes.md +++ b/Changes.md @@ -1,5 +1,13 @@ # Änderungen +## Bargeld-Tool: Adresse mit `/api/v1` (19.08.2026) + +Der Verbindungstest scheiterte mit „Das Bargeld-Tool kennt die Schnittstelle nicht +(HTTP 404)“, wenn die hinterlegte Adresse den Schnittstellenpfad schon enthielt – der +Finanzmanager hängt ihn selbst an und fragte dann unter `/api/v1/api/v1/status` an. Ein +abschließendes `/api` bzw. `/api/v1` kürzt er jetzt beim Speichern weg; bereits +gespeicherte Adressen räumt Migration 017 auf. + ## Abgleich mit dem Bargeld-Tool (19.08.2026) Bargeldausgaben werden in einem zweiten Programm erfasst; im Finanzmanager kommen sie als diff --git a/docs/buchungen.md b/docs/buchungen.md index 33a047d..0e64fc7 100644 --- a/docs/buchungen.md +++ b/docs/buchungen.md @@ -262,3 +262,8 @@ nicht (404), prüft der Verbindungstest über eine Suchabfrage. Der Betrag geht vorzeichenbehaftet über die Leitung, so wie er im Finanzmanager steht: Ausgaben negativ. Führt das Bargeld-Tool seine Beträge positiv, muss es umrechnen. + +`{adresse}` ist die Basisadresse **ohne** Schnittstellenpfad. Steht am Ende der eingetragenen +Adresse trotzdem `/api` oder `/api/v1`, kürzt der Finanzmanager sie beim Speichern – die +Adresse aus der Browserzeile zu kopieren ist der naheliegende Weg und führte sonst zu +`/api/v1/api/v1/status` und einem 404 im Verbindungstest. diff --git a/migrations/017_bargeld_url_ohne_pfad.sql b/migrations/017_bargeld_url_ohne_pfad.sql new file mode 100644 index 0000000..e7222fd --- /dev/null +++ b/migrations/017_bargeld_url_ohne_pfad.sql @@ -0,0 +1,14 @@ +-- Die Adresse des Bargeld-Tools ohne den Schnittstellenpfad. +-- +-- Der Finanzmanager hängt `/api/v1/...` selbst an die hinterlegte Adresse. +-- Wer sie aus dem Browser kopiert hat, trug den Pfad mit ein – dann fragte +-- der Verbindungstest unter `/api/v1/api/v1/status` an und bekam ein 404. +-- Neue Eingaben kürzt der Finanzmanager beim Speichern; bereits gespeicherte +-- Adressen räumt diese Migration auf. +-- +-- Idempotent: Auf einer bereits gekürzten Adresse ändert der Ausdruck nichts. + +UPDATE einstellungen + SET wert = REGEXP_REPLACE(TRIM(wert), '/+api(/+v[0-9]+)?/*$', '') + WHERE schluessel = 'bargeld_url' + AND wert REGEXP '/+api(/+v[0-9]+)?/*$'; diff --git a/src/Controllers/VerwaltungController.php b/src/Controllers/VerwaltungController.php index f142a80..4341f1b 100644 --- a/src/Controllers/VerwaltungController.php +++ b/src/Controllers/VerwaltungController.php @@ -232,7 +232,9 @@ class VerwaltungController extends BaseController return; } - Einstellung::set('bargeld_url', rtrim($url, '/'), 'bargeld'); + // Ein mitkopiertes „/api/v1“ am Ende fliegt raus – sonst hinge der + // Schnittstellenpfad ein zweites Mal dran. + Einstellung::set('bargeld_url', $url === '' ? '' : BargeldTool::basisadresse($url), 'bargeld'); Einstellung::set('bargeld_benutzer', trim($this->post('bargeld_benutzer')), 'bargeld'); // Wie bei der FinTS-PIN: Ein leeres Feld heißt „unverändert“, sonst diff --git a/src/Services/BargeldTool.php b/src/Services/BargeldTool.php index 46dc40d..e199bd6 100644 --- a/src/Services/BargeldTool.php +++ b/src/Services/BargeldTool.php @@ -41,11 +41,26 @@ class BargeldTool /** Höchstzahl der Treffer, die die Gegenstelle liefern soll. */ private const GRENZE = 20; + private string $basisUrl; + public function __construct( - private string $basisUrl, + string $basisUrl, private string $benutzer = '', private string $passwort = '' ) { + $this->basisUrl = self::basisadresse($basisUrl); + } + + /** + * Die Basisadresse ohne den Schnittstellenpfad. Wer die Adresse aus dem + * Browser kopiert, hat `/api/v1` schon dabei – ohne diese Kürzung fragte + * der Finanzmanager unter `/api/v1/api/v1/status` an und bekam ein 404. + */ + public static function basisadresse(string $url): string + { + $url = rtrim(trim($url), '/'); + + return (string)preg_replace('#/api(?:/v\\d+)?$#i', '', $url); } /** diff --git a/src/Views/verwaltung/bargeld.php b/src/Views/verwaltung/bargeld.php index 8a26bee..d295403 100644 --- a/src/Views/verwaltung/bargeld.php +++ b/src/Views/verwaltung/bargeld.php @@ -55,7 +55,8 @@ include __DIR__ . '/../layout/kopf.php'; placeholder="https://…" inputmode="url">
Die Basisadresse des Bargeld-Tools ohne Pfad; der Finanzmanager hängt
- /api/v1/buchungen selbst an. Leer lassen schaltet den Abgleich ab –
+ /api/v1/buchungen selbst an. Ein mitkopiertes /api/v1
+ am Ende entfernt er beim Speichern. Leer lassen schaltet den Abgleich ab –
das Kontoblatt zeigt dann überall den grauen Kreis.