var uuid = require('node-uuid'), authCodes = {}, accessTokens = {}, tokenHeartbeats = {}, clients = { '7tmK4rF8As8CtRw5': { id: '1', secret: 'cgzLcVFku5zEvXkCKNZsAbxXQENFqPDx2kfjnMGd3m9BczehmFt2pw9r9MdASSFt', grantTypes: ['client_credentials'] }, 'devLdadSKsTP92JJ': { id: '2', secret: 'ngKRm8aDHq4g7pskRTyPwFTrsE7Kf8feVpBvE5SjYwXUhyGKKa4NeqYWwNjFWtv7', 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