Portal: offene Mitarbeiter-Code-Anmeldungen (staffMfa)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
23d78815f9
commit
25f15c0ecb
2 files changed
+121
No files matched your search
@@ -34,3 +34,48 @@ test('appwriteSessionFetch schickt Sitzung und Sprache', async () => {
|
||||
(err) => err.status === 401 && err.type === 'user_invalid_token'
|
||||
)
|
||||
})
|
||||
|
||||
const { maskEmail, startStaffMfa, verifyStaffMfa, resendStaffMfa } = await import('../server/services/staffMfa.js')
|
||||
|
||||
async function start() {
|
||||
const { sessionCookie } = await loginWithAppwrite('kenso@webklar.com', 'geheim-geheim')
|
||||
return startStaffMfa({ userId: 'u_staff', email: 'kenso@webklar.com', sessionCookie })
|
||||
}
|
||||
|
||||
test('maskEmail: erstes Zeichen, Rest der Adresse ausgeblendet', () => {
|
||||
assert.equal(maskEmail('kenso@webklar.com'), 'k…@webklar.com')
|
||||
assert.equal(maskEmail('a@b.de'), 'a…@b.de')
|
||||
assert.equal(maskEmail(''), '')
|
||||
})
|
||||
|
||||
test('Richtiger Code meldet an, danach ist die Anmeldung verbraucht', async () => {
|
||||
const { key, maskedEmail } = await start()
|
||||
assert.equal(maskedEmail, 'k…@webklar.com')
|
||||
assert.deepEqual(await verifyStaffMfa(key, aw.lastOtp('u_staff')), { ok: true, userId: 'u_staff', email: 'kenso@webklar.com' })
|
||||
assert.deepEqual(await verifyStaffMfa(key, aw.lastOtp('u_staff')), { ok: false, reason: 'gone' })
|
||||
})
|
||||
|
||||
test('Falscher Code: nach 5 Fehlversuchen ist die Anmeldung weg', async () => {
|
||||
const { key } = await start()
|
||||
for (let i = 0; i < 5; i++) assert.deepEqual(await verifyStaffMfa(key, '000000'), { ok: false, reason: 'invalid' })
|
||||
assert.deepEqual(await verifyStaffMfa(key, aw.lastOtp('u_staff')), { ok: false, reason: 'gone' })
|
||||
})
|
||||
|
||||
test('Nach 10 Minuten ist die Anmeldung abgelaufen', async (t) => {
|
||||
const { key } = await start()
|
||||
const now = Date.now()
|
||||
t.mock.method(Date, 'now', () => now + 11 * 60 * 1000)
|
||||
assert.deepEqual(await verifyStaffMfa(key, aw.lastOtp('u_staff')), { ok: false, reason: 'gone' })
|
||||
})
|
||||
|
||||
test('Code erneut senden: neue Mail, nur der neue Code gilt', async () => {
|
||||
const { key } = await start()
|
||||
const oldOtp = aw.lastOtp('u_staff')
|
||||
const before = aw.mailsSent('u_staff')
|
||||
assert.equal(await resendStaffMfa(key), true)
|
||||
assert.equal(aw.mailsSent('u_staff'), before + 1)
|
||||
const newOtp = aw.lastOtp('u_staff')
|
||||
if (oldOtp !== newOtp) assert.deepEqual(await verifyStaffMfa(key, oldOtp), { ok: false, reason: 'invalid' })
|
||||
assert.equal((await verifyStaffMfa(key, newOtp)).ok, true)
|
||||
assert.equal(await resendStaffMfa(key), false)
|
||||
})
|
||||
Reference in new issue
Block a user