clicktimerestapi
Version:
node module for ClickTime REST API
119 lines (96 loc) • 2.94 kB
JavaScript
var https = require('https'),
_ = require('lodash'),
q = require('q'),
uName,
pWord,
session,
ct_url = '/api/1.3/';
function constructRequest(option, callback){
var baseOption = {
hostname: 'app.clicktime.com',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Basic ' + new Buffer( uName + ':' + ( (session && session.Token) || pWord) ).toString('base64')
}
};
var req = https.request(_.assign(baseOption, option), function(res){
res.setEncoding('utf8');
res.on('data', callback);
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
req.end();
}
function buildRequestReturnFunc(option){
if (!(session && session.Token)){
throw 'Please call Get_session first.';
}
// Create a promise so it can be resolved when the Session Ajex returns
var deferred = q.defer();
constructRequest(option, function(d){
deferred.resolve(d);
});
return deferred.promise;
}
module.exports = {
// Returns a promise that once resolved, it will return the UserID, CompanyID, etc based on your authorization header. You should use these to construct other request urls.
GET_session: function (userName, password) {
// Sets the closure object
uName = userName;
pWord = password;
var option = {
method: 'GET',
path: ct_url + 'session'
};
var deferred = q.defer();
constructRequest(option, function(d){
deferred.resolve(session = JSON.parse(d));
});
return deferred.promise;
},
//Returns the Company object.
GET_Company: function () {
return buildRequestReturnFunc({
method: 'GET',
path: ct_url + 'Companies/' + session.CompanyID
});
},
GET_User: function (){
console.log(ct_url + 'Companies/' + session.CompanyID + '/Users/' + session.UserID);
return buildRequestReturnFunc({
method: 'GET',
path: ct_url + 'Companies/' + session.CompanyID + '/Users/' + session.UserID
});
},
GET_Clients: function () {
return buildRequestReturnFunc({
method: 'GET',
path: ct_url + 'Companies/' + session.CompanyID + '/Users/' + session.UserID + '/Clients'
});
},
GET_Jobs: function () {
return buildRequestReturnFunc({
method: 'GET',
path: ct_url + 'Companies/' + session.CompanyID + '/Users/' + session.UserID + '/Jobs'
});
},
GET_Tasks: function () {
return buildRequestReturnFunc({
method: 'GET',
path: ct_url + 'Companies/' + session.CompanyID + '/Users/' + session.UserID + '/Tasks'
});
},
GET_Phases: function () {
return buildRequestReturnFunc({
method: 'GET',
path: ct_url + 'Companies/' + session.CompanyID + '/Phases'
});
},
GET_SuvPhases: function () {
return buildRequestReturnFunc({
method: 'GET',
path: ct_url + 'Companies/' + session.CompanyID + '/SubPhases'
});
}
};