UNPKG

@quarks/quarks-iam

Version:

A modern authorization server built to authenticate your users and protect your APIs

80 lines (68 loc) 1.82 kB
/** * Module dependencies */ var async = require('async') var Client = require('./Client') /** * User Applications */ function userApplications (user, callback) { async.parallel({ // List the trusted clients trusted: function (done) { Client.listByTrusted('true', { select: [ '_id', 'client_name', 'client_uri', 'application_type', 'logo_uri', 'trusted', 'scopes', 'created', 'modified' ] }, function (err, clients) { if (err) { return done(err) } done(null, clients) }) }, // Get the authorized scope for the user scopes: function (done) { user.authorizedScope(function (err, scopes) { if (err) { return done(err) } done(null, scopes) }) }, // List of client ids the user has visited visited: function (done) { var index = 'users:' + user._id + ':clients' Client.__client.zrevrange(index, 0, -1, function (err, ids) { if (err) { return done(err) } done(null, ids) }) } }, function (err, results) { if (err) { return callback(err) } // Filter out clients if the user has none of the scopes // defined by the client. var clients = results.trusted.filter(function (client) { if (!client.scopes || client.scopes.length === 0) { return true } else { return client.scopes.some(function (scope) { return (results.scopes.indexOf(scope) !== -1) }) } }) // Flag clients that have been visited clients.forEach(function (client) { client.visited = (results.visited.indexOf(client._id) !== -1) }) callback(null, clients) }) } /** * Exports */ module.exports = userApplications