Nennt die Bank bei der TAN-Abfrage einen Startcode für den TAN-Generator, geht er im Fließtext leicht unter. StartcodeErkennung erkennt ihn über einen pro Bankverbindung konfigurierbaren Beispielsatz (Ziffernfolge = Platzhalter für den Code) und zeigt den Fund fett, zentriert und in eigener Zeile. BankFreitext löst dafür die bisherige Klartext-Aufbereitung aus FinTsUeberweisung::vopHinweis() heraus, damit TAN-Anfrage und VoP-Rückmeldung dieselbe HTML-zu-Klartext-Umwandlung nutzen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
97 lines
3.8 KiB
PHP
97 lines
3.8 KiB
PHP
<?php
|
||
|
||
use Finanzmanager\View;
|
||
|
||
/**
|
||
* Die TAN-Maske. Sie steht zwischen zwei Requests: Der Dialog mit der Bank ist
|
||
* offen und liegt so lange in der Sitzung, bis die Freigabe da ist oder der
|
||
* Abruf abgebrochen wird.
|
||
*
|
||
* @var array<string,mixed> $tan
|
||
* @var string $meldung
|
||
* @var list<string> $protokoll
|
||
* @var array{nummer: int, gesamt: int, name: string}|null $sammelabruf
|
||
* @var string $csrfToken
|
||
*/
|
||
|
||
$entkoppelt = ($tan['entkoppelt'] ?? false) === true;
|
||
$sammelabruf = $sammelabruf ?? null;
|
||
|
||
include __DIR__ . '/../layout/kopf.php';
|
||
?>
|
||
|
||
<div class="kachel einzeln">
|
||
<header>
|
||
<h2><?= $entkoppelt ? 'Freigabe im Banking-Gerät' : 'TAN eingeben' ?></h2>
|
||
<p class="kachelhinweis"><?= View::h($tan['bezeichnung'] ?? 'Abruf') ?></p>
|
||
</header>
|
||
|
||
<?php if ($sammelabruf !== null): ?>
|
||
<p class="feldhinweis sammelabrufstand">
|
||
Alle Umsätze abrufen: Bankverbindung <?= (int)$sammelabruf['nummer'] ?>
|
||
von <?= (int)$sammelabruf['gesamt'] ?> – <strong><?= View::h($sammelabruf['name']) ?></strong>
|
||
</p>
|
||
<?php endif; ?>
|
||
|
||
<p class="hinweis"><?= View::h($meldung) ?></p>
|
||
|
||
<?php if (($tan['hinweis'] ?? '') !== ''): ?>
|
||
<?php /* Bereits sicheres HTML aus StartcodeErkennung::hervorheben() –
|
||
der erkannte Startcode steht darin fett und zentriert. */ ?>
|
||
<p class="tanhinweis"><?= $tan['hinweis'] ?></p>
|
||
<?php endif; ?>
|
||
|
||
<?php if (($tan['medium'] ?? '') !== ''): ?>
|
||
<p class="feldhinweis">TAN-Medium: <?= View::h($tan['medium']) ?></p>
|
||
<?php endif; ?>
|
||
|
||
<?php if (!empty($tan['bild_daten'])): ?>
|
||
<?php /* photoTAN: Das Bild kommt als Datenadresse, nicht als Datei –
|
||
es gehört zu genau diesem Dialog und ist danach wertlos. */ ?>
|
||
<img class="tanbild" alt="TAN-Grafik der Bank"
|
||
src="data:<?= View::h($tan['bild_typ'] ?? 'image/png') ?>;base64,<?= View::h($tan['bild_daten']) ?>">
|
||
<?php endif; ?>
|
||
|
||
<form method="post" action="/banking/tan" class="formular">
|
||
<input type="hidden" name="csrf_token" value="<?= View::h($csrfToken) ?>">
|
||
|
||
<?php if ($entkoppelt): ?>
|
||
<p class="feldhinweis">
|
||
Die Bank hat die Freigabe an dein Banking-Gerät geschickt. Dort bestätigen und
|
||
anschließend hier prüfen lassen – der Abruf läuft dann weiter.
|
||
</p>
|
||
<input type="hidden" name="tan" value="">
|
||
<div class="knopfleiste">
|
||
<button type="submit" class="knopf primaer">Freigabe prüfen</button>
|
||
</div>
|
||
<?php else: ?>
|
||
<label for="tan">TAN</label>
|
||
<input type="text" id="tan" name="tan" inputmode="numeric" autocomplete="one-time-code"
|
||
autofocus required>
|
||
<div class="knopfleiste">
|
||
<button type="submit" class="knopf primaer">TAN senden</button>
|
||
</div>
|
||
<?php endif; ?>
|
||
</form>
|
||
|
||
<form method="post" action="/banking/tan/abbrechen" class="formular">
|
||
<input type="hidden" name="csrf_token" value="<?= View::h($csrfToken) ?>">
|
||
<div class="knopfleiste">
|
||
<?php if ($sammelabruf !== null && $sammelabruf['nummer'] < $sammelabruf['gesamt']): ?>
|
||
<?php /* Nur diese Bank auslassen – die übrigen werden trotzdem abgerufen. */ ?>
|
||
<button type="submit" name="weiter" value="1" class="knopf">Diese Bank überspringen</button>
|
||
<?php endif; ?>
|
||
<button type="submit" class="knopf">Abruf abbrechen</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
|
||
<?php if ($protokoll !== []): ?>
|
||
<div class="kachel einzeln">
|
||
<header><h2>Bisheriger Verlauf</h2></header>
|
||
<pre class="protokolltext"><?php foreach ($protokoll as $zeile): ?><?= View::h($zeile) ?>
|
||
<?php endforeach; ?></pre>
|
||
</div>
|
||
<?php endif; ?>
|
||
|
||
<?php include __DIR__ . '/../layout/fuss.php'; ?>
|