/// /// import restify = require('restify'); import _client = require('./client'); import APIError = require('./APIError'); import _modules = require('./admin/modules'); import _users = require('./admin/users'); export var client: restify.Client = _client; export var users = _users; export var accounts = require('./admin/accounts'); export var modules = _modules; export var logs = require('./admin/logs'); export class LoginResult { accessToken: string; user: _users.User; expiration: Date; } export class Authorization { user: _users.User; expiration: Date; } /* Login a a user/password combination and return an access token and user data. */ export function login(name: string, password: string, callback: (err?: APIError, result?: LoginResult) => void) { try { var params = { name: name, password: password }; client.post('/v1/login', params, function(err, req: restify.Request, res: restify.Response, result: any) { if (err) // first, check for an exception callback(err); else if (!result) // then check for a missing result callback(new APIError()); else callback(null, result.data); // finally, return the payload }); } catch(err) { callback(err); } } /* Login a a user/password combination and return an access token and user data. */ export function authorize(accessToken: string, callback: (err?: APIError, result?: Authorization) => void) { try { var params = { accessToken: accessToken }; client.post('/v1/authorize', params, function(err, req: restify.Request, res: restify.Response, result: any) { if (err) // first, check for an exception callback(err); else if (!result) // then check for a missing result callback(new APIError()); else callback(null, result.data); // finally, return the payload }); } catch(err) { callback(err); } } export function hasPermission(accessToken: string, moduleId: number, permission: string | number, callback: (err?: APIError, result?: boolean) => void) { modules.getAll(function(err: APIError, mods: Array<_modules.Module>) { if (err) callback(err); else { authorize(accessToken, function(err?: APIError, authorization?: Authorization) { if (err) callback(err); else if (!authorization || !authorization.user || !authorization.user.roles) callback(null, false); else { for (var r = 0; r < authorization.user.roles.length; r++) { for (var p = 0; p < authorization.user.roles[r].permissions.length; p++) { if (authorization.user.roles[r].moduleId == moduleId) { if (typeof permission == 'string') { if (authorization.user.roles[r].permissions[p].name == permission) { callback(null, true); return; } } else { if (authorization.user.roles[r].permissions[p].id == permission) { callback(null, true); return; } } } } } callback(null, false); } }); } }); } export module analytics { export var attributes = require('./analytics/attributes'); export var query = require('./analytics/query'); } export module insights { export var attributes = require('./insights/attributes'); export var query = require('./insights/query'); }