2018-04-26 15:54:53 -07:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
|
|
exports = module.exports = {
|
2020-02-06 16:44:46 +01:00
|
|
|
ROLE_ADMIN: 'admin',
|
|
|
|
|
ROLE_USER: 'user',
|
2018-04-26 15:54:53 -07:00
|
|
|
|
2020-02-06 16:44:46 +01:00
|
|
|
verifyToken: verifyToken,
|
|
|
|
|
hasRole: hasRole
|
2018-06-18 14:21:54 -07:00
|
|
|
};
|
|
|
|
|
|
2018-04-26 15:54:53 -07:00
|
|
|
var assert = require('assert'),
|
2019-10-22 21:16:00 -07:00
|
|
|
BoxError = require('./boxerror.js'),
|
2018-06-27 23:17:04 -07:00
|
|
|
tokendb = require('./tokendb.js'),
|
2020-02-06 16:44:46 +01:00
|
|
|
users = require('./users.js');
|
2018-05-01 13:34:46 -07:00
|
|
|
|
2020-02-06 16:44:46 +01:00
|
|
|
function hasRole(user, requiredRole) {
|
2018-08-02 19:07:33 -07:00
|
|
|
assert.strictEqual(typeof user, 'object');
|
2020-02-06 16:44:46 +01:00
|
|
|
assert.strictEqual(typeof requiredRole, 'string');
|
2018-08-02 19:07:33 -07:00
|
|
|
|
2020-02-06 16:44:46 +01:00
|
|
|
if (requiredRole === exports.ROLE_USER) return null;
|
|
|
|
|
if (requiredRole === exports.ROLE_ADMIN && user.admin) return null;
|
2018-08-03 17:21:24 -07:00
|
|
|
|
2020-02-06 16:44:46 +01:00
|
|
|
return new BoxError(BoxError.ACCESS_DENIED, 'Not allowed');
|
2018-06-27 23:17:04 -07:00
|
|
|
}
|
|
|
|
|
|
2020-02-06 16:44:46 +01:00
|
|
|
function verifyToken(accessToken, callback) {
|
2018-06-27 23:17:04 -07:00
|
|
|
assert.strictEqual(typeof accessToken, 'string');
|
|
|
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
|
|
2019-02-15 13:57:18 -08:00
|
|
|
tokendb.getByAccessToken(accessToken, function (error, token) {
|
2020-02-06 16:44:46 +01:00
|
|
|
if (error && error.reason === BoxError.NOT_FOUND) return callback(new BoxError(BoxError.INVALID_CREDENTIALS));
|
2020-02-06 14:50:12 +01:00
|
|
|
if (error) return callback(error);
|
2018-06-27 23:17:04 -07:00
|
|
|
|
2018-07-26 10:20:19 -07:00
|
|
|
users.get(token.identifier, function (error, user) {
|
2020-02-06 16:44:46 +01:00
|
|
|
if (error && error.reason === BoxError.NOT_FOUND) return callback(new BoxError(BoxError.INVALID_CREDENTIALS));
|
2018-06-27 23:17:04 -07:00
|
|
|
if (error) return callback(error);
|
|
|
|
|
|
2020-02-06 16:44:46 +01:00
|
|
|
if (!user.active) return callback(new BoxError(BoxError.INVALID_CREDENTIALS));
|
2018-08-02 19:07:33 -07:00
|
|
|
|
2020-02-06 16:44:46 +01:00
|
|
|
callback(null, user);
|
2018-06-27 23:17:04 -07:00
|
|
|
});
|
|
|
|
|
});
|
2018-06-18 14:21:54 -07:00
|
|
|
}
|