var uuid = require('node-uuid'), authCodes = {}, accessTokens = {}, tokenHeartbeats = {}, clients = { 'F8Nbz9gGUvLgdn8T': { id: '1', secret: 'Fesmx7hHCCMx7Cby7FhV2fAtf2NYEFzP5fCKuwEEdpf8hpnsnnQn9qYhNHt6SsDD', grantTypes: ['client_credentials'] }, 'dev52VrnSufxEyKT': { id: '2', secret: 'nK2jnqhdWnrmAFDw9zWVueAqUQvSxmAyjf2Sz7ZrmYVSH5GSxER4rPQCuBUewF', grantTypes: ['client_credentials'] } }; const services = { flushExpiredTokens: function (maxAge) { let oldTokens = []; let now = new Date().getTime(); for (let token in accessTokens) { if (tokenHeartbeats[token] && tokenHeartbeats[token] < now - 1000 * maxAge) { oldTokens.push(token) delete accessTokens[token] } } console.log('Flush expired tokens execution completed.', oldTokens) }, getAccessTokens: function () { return accessTokens; }, getClients: function () { return clients; }, heartbeat: { puls: function (token) { tokenHeartbeats[token] = new Date().getTime(); }, signal: function (authHeader) { if (authHeader) { let token = authHeader.split(' ').pop() if (accessTokens[token]) { services.heartbeat.puls(token) return tokenHeartbeats[token]; } } return false; } }, clientService: { getById: function (id, callback) { return callback(null, clients[id]); }, isValidRedirectUri: function (/*client, requestedUri*/) { return true; } }, tokenService: { generateToken: function (callback) { callback(null, uuid.v4()); }, generateAuthorizationCode: function (callback) { callback(null, uuid.v4()); } }, authorizationService: { saveAuthorizationCode: function (codeData, callback) { authCodes[codeData.code] = codeData; return callback(null, authCodes[codeData.code]); }, saveAccessToken: function (tokenData, callback) { accessTokens[tokenData.access_token] = tokenData; return callback(null, accessTokens[tokenData.access_token]); }, getAuthorizationCode: function (code, callback) { return callback(null, authCodes[code]); }, getAccessToken: function (token, callback) { return callback(null, accessTokens[token]); } }, membershipService: { areUserCredentialsValid: function (userName, password, scope, callback) { return callback(null, true); } } } module.exports = services