Latihan 1 dari materi Device & Session Management di Auth — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Lengkapi createSessionManager(). Function ini menyimpan array sesi di dalam closure dan mengembalikan object dengan empat method:
create(userId, deviceName, ip): buat sesi baru dengan field id ("sess_" + userId + "_" + index, dengan index = jumlah sesi di array sebelum ditambah), userId, deviceName, ip, lastActive (Date.now()) dan revoked: false. Simpan ke array, lalu kembalikan sesinya.
getSessions(userId): kembalikan array sesi milik user itu yang belum dicabut (revoked === false).
revoke(sessionId): tandai sesi itu revoked: true dan kembalikan true. Kalau id-nya gak ditemukan, kembalikan false.
revokeAllExcept(userId, keepSessionId): tandai revoked: true semua sesi milik userId kecuali yang id-nya keepSessionId. Sesi user lain gak boleh tersentuh.
Kode di bawah function sudah ada, biarkan. Output-nya harus persis lima baris ini, berurutan:
2
true
1
1
Safari/iPhone
Dicek juga: dengan dua sesi milik "u9" (Edge/Win dibuat lebih dulu, lalu Opera), revokeAllExcept("u9", <id sesi Edge/Win>) menyisakan satu sesi, Edge/Win. Hasil gabungannya "1|Edge/Win".
Hint
Simpan semua sesi di satu array di dalam createSessionManager, supaya keempat method memakai array yang sama. Mencabut sesi cukup menandai revoked, bukan menghapus barisnya.
create: id = "sess_" + userId + "_" + sessions.length, dihitung sebelum push. getSessions: filter dengan s.userId === userId && s.revoked === false. revoke: cari dengan find, kalau gak ada return false.