Analyse: Eingaben und Liste robuster

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-01 10:22:19 +00:00
1 parent f4c8b291d7
commit fc937b0d1e
3 files changed
+34 -4

No files matched your search

+19
View File
@@ -218,3 +218,22 @@ test('Fix b: Abschalten durch Mitarbeiter meldet Sammeldienst active:false', asy
an.analyseDeps.client.putSite = real
assert.equal(again.state, 'disabled')
})
test('Härtung: ungültige Hosts, Pfadzeichen, Fehler bei einem Projekt', async () => {
// analyseDomains: ungueltige Hosts werden uebersprungen
assert.deepEqual(an.analyseDomains({ subdomain: 'cafe', liveDomain: 'https://Cafe.DE/x' }), ['cafe.project.webklar.com', 'cafe.de'])
assert.deepEqual(an.analyseDomains({ subdomain: 'cafe', liveDomain: 'evil.de@x y' }), ['cafe.project.webklar.com'])
assert.deepEqual(an.analyseDomains({ subdomain: 'ca fe', liveDomain: 'a_b.de' }), [])
assert.deepEqual(an.analyseDomains({ subdomain: 'cafe', liveDomain: 'localhost' }), ['cafe.project.webklar.com'])
// Heatmap-Pfad: Steuerzeichen, Backslash, Leerraum => 400; dekodierte Form bleibt erlaubt
await post(`${A}/activate`, { projectId: 'p1', consent: consent() }, { cookie })
const link = (path) => post(`${A}/heatmap-link`, { projectId: 'p1', path, vp: 'd' }, { cookie })
for (const path of ['/a\\b', '/a b', '/a\nb', '/a\u0000b', '/a\tb', '/a\u007fb']) assert.equal((await link(path)).status, 400, JSON.stringify(path))
assert.equal((await link('/über-uns')).status, 200)
// keine gueltige Domain => 409
aw.seed('websiteProjects', { $id: 'p7', customerId: 'c1', projectName: 'Kaputt', subdomain: 'ka putt', liveDomain: 'x_y', isPublic: true })
await post(`${A}/activate`, { projectId: 'p7', consent: consent() }, { cookie })
const bad = await post(`${A}/heatmap-link`, { projectId: 'p7', path: '/', vp: 'd' }, { cookie })
assert.equal(bad.status, 409)
assert.equal(bad.body.error, 'Keine gültige Domain')
})