Kundenansicht: Waechter-Korrekturen aus dem Abschlussreview
- Pfade ohne Ruecksicht auf Gross-/Kleinschreibung pruefen (/API/news umging die Sperre) - Tab mit Kennung, Cookie ist keine Kundenansicht mehr -> 409 statt fremder Daten - Cookie lebt 1 h laenger als die Ansicht, damit 'abgelaufen' gemeldet und protokolliert wird Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
0ccdde1c28
commit
a64a996291
4 files changed
+39
-6
No files matched your search
@@ -33,11 +33,12 @@ const replaced = (res, session) =>
|
||||
res.status(409).json({ code: 'view_replaced', kunde: session.name || '', error: 'Diese Ansicht wurde durch eine andere Kundenansicht ersetzt.' })
|
||||
|
||||
export async function kundenansichtGuard(req, res, next) {
|
||||
const session = parsePortalSession(req)
|
||||
if (!session?.viewAs) return next()
|
||||
const pathname = req.originalUrl.split('?')[0]
|
||||
// Express routet ohne Ruecksicht auf Gross-/Kleinschreibung (/API/news trifft /api/news): hier genauso pruefen
|
||||
const pathname = String(req.path || '').toLowerCase()
|
||||
if (!pathname.startsWith('/api/')) return next()
|
||||
if (PASS_PREFIXES.some((p) => pathname.startsWith(p)) || PASS_EXACT.includes(pathname.replace(/\/$/, ''))) return next()
|
||||
const session = parsePortalSession(req)
|
||||
if (!session) return next()
|
||||
|
||||
const current = isKundenansicht(session)
|
||||
if (current && isExpired(session)) {
|
||||
@@ -45,8 +46,11 @@ export async function kundenansichtGuard(req, res, next) {
|
||||
await logOnce(session, 'abgelaufen')
|
||||
return res.status(401).json({ code: 'view_expired', error: VIEW_EXPIRED_MESSAGE })
|
||||
}
|
||||
// Tab einer Kundenansicht, deren Cookie inzwischen zu etwas anderem gehoert (andere Kundenansicht, alte
|
||||
// Admin-Ansicht, Kunden-Login): keine fremden Daten in diesen Tab
|
||||
const header = req.get('X-Kundenansicht')
|
||||
if (current && header && header !== session.viewId) return replaced(res, session)
|
||||
if (header && header !== session.viewId) return replaced(res, session)
|
||||
if (!session.viewAs) return next()
|
||||
if (READ_METHODS.includes(req.method)) return next()
|
||||
if (current && !header) return replaced(res, session)
|
||||
|
||||
|
||||
Reference in new issue
Block a user