///
///
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');
}