Kontrolle: Bestaetigen per Link prueft Token und Ablauf in der Sperre erneut
Ein Token-Tausch durch die Erinnerung zwischen Pruefung und Sperre ergibt 404 wie bei einem ungueltigen Link; das Portal ist nicht betroffen. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c2245b6905
commit
b6c1d81342
3 files changed
+32
-4
No files matched your search
@@ -9,12 +9,12 @@ import { createWriteLimiter } from '../services/writeLimiter.js'
|
||||
import { findAuftragByTokenHash } from '../services/auftraege/auftragStore.js'
|
||||
import { lesePdf } from '../services/auftraege/ablage.js'
|
||||
import { oeffentlicheAnsicht } from '../services/auftraege/auftragSicht.js'
|
||||
import { bestaetigeAuftrag, GESPERRT_MELDUNG } from '../services/auftraege/bestaetigung.js'
|
||||
import { bestaetigeAuftrag, GESPERRT_MELDUNG, UNGUELTIGER_LINK } from '../services/auftraege/bestaetigung.js'
|
||||
import { AuftragError, sendeFehler } from '../services/auftraege/fehler.js'
|
||||
import { auftraegeAktiv } from '../services/auftraege/schalter.js'
|
||||
import { hashToken } from '../services/auftraege/token.js'
|
||||
|
||||
const UNGUELTIG = 'Dieser Link ist ungültig oder abgelaufen.'
|
||||
const UNGUELTIG = UNGUELTIGER_LINK
|
||||
const HAEKCHEN = 'Bitte bestätigen Sie den Auftrag mit dem Häkchen.'
|
||||
const ZU_VIELE = 'Zu viele Anfragen. Bitte später erneut versuchen.'
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ export const GESPERRT_MELDUNG = {
|
||||
storniert: 'Diese Auftragsbestätigung wurde storniert.',
|
||||
widerrufen: 'Diese Auftragsbestätigung wurde widerrufen.',
|
||||
}
|
||||
export const UNGUELTIGER_LINK = 'Dieser Link ist ungültig oder abgelaufen.'
|
||||
const NICHT_BESTAETIGBAR = 'Diese Auftragsbestätigung kann nicht bestätigt werden.'
|
||||
const NICHT_GEFUNDEN = 'Auftragsbestätigung nicht gefunden.'
|
||||
const GESPERRT_STATUS = ['entwurf', 'ersetzt', 'storniert', 'widerrufen']
|
||||
@@ -39,6 +40,14 @@ export async function bestaetigeAuftrag(auftrag, { ueber, fruehbeginn, jetzt = n
|
||||
if (!frisch) throw new AuftragError(404, NICHT_GEFUNDEN)
|
||||
const lage = bestaetigungsLage(frisch)
|
||||
if (lage === 'gesperrt') throw new AuftragError(409, GESPERRT_MELDUNG[frisch.status] ?? NICHT_BESTAETIGBAR)
|
||||
if (ueber === 'link') {
|
||||
// Die Route hat Token und Ablauf auf einem Stand ausserhalb der Sperre geprueft; eine Erinnerung (Token-Tausch) kann
|
||||
// dazwischen gelaufen sein: dann gilt der alte Link nicht mehr, wie bei jedem ungueltigen Link (404)
|
||||
const bis = frisch.tokenGueltigBis ? Date.parse(frisch.tokenGueltigBis) : Number.NaN
|
||||
if (!frisch.tokenHash || frisch.tokenHash !== auftrag.tokenHash || !Number.isFinite(bis) || jetzt.getTime() > bis) {
|
||||
throw new AuftragError(404, UNGUELTIGER_LINK)
|
||||
}
|
||||
}
|
||||
if (lage === 'bestaetigt') return { aktuell: frisch, bestaetigtJetzt: false }
|
||||
const privat = frisch.kunde?.kundenart === 'privat'
|
||||
const patch = {
|
||||
|
||||
Reference in new issue
Block a user