UNPKG

@opengovsg/mockpass

Version:

A mock SingPass/CorpPass server for dev purposes

28 lines (22 loc) 828 B
const ExpiryMap = require('expiry-map') const crypto = require('crypto') const AUTH_CODE_TIMEOUT = 5 * 60 * 1000 const profileAndNonceStore = new ExpiryMap(AUTH_CODE_TIMEOUT) const generateAuthCode = ( { profile, scopes, nonce, clientId = '' }, { isStateless = false }, ) => { const authCode = isStateless ? Buffer.from( JSON.stringify({ profile, scopes, nonce, clientId }), ).toString('base64url') : crypto.randomBytes(45).toString('base64') profileAndNonceStore.set(authCode, { profile, scopes, nonce, clientId }) return authCode } const lookUpByAuthCode = (authCode, { isStateless = false }) => { return isStateless ? JSON.parse(Buffer.from(authCode, 'base64url').toString('utf-8')) : profileAndNonceStore.get(authCode) } module.exports = { generateAuthCode, lookUpByAuthCode }