'use strict'; /** * ProBinder ACTION MODULE */ var urlService = 'https://probinder.com/service/', credentials = null; exports.validUserParams = function() { } function loadCredentials(cred) { if(!cred || !cred.username || !cred.password) { console.error('ERROR: ProBinder AM credentials file corrupt'); } else { credentials = cred; console.log('Successfully loaded credentials for ProBinder AM'); } } /** * Reset eventually loaded credentials */ function purgeCredentials() { credentials = null; }; /** * Verify whether the arguments match the existing credentials. * @param {String} username the username * @param {String} password the password */ function verifyCredentials(username, password) { if(!credentials) return false; return credentials.username === username && credentials.password === password; }; /** * Call the ProBinder service with the given parameters. * @param {Object} args the required function arguments object * @param {Object} [args.data] the data to be posted * @param {String} args.service the required service identifier to be appended to the url * @param {String} args.method the required method identifier to be appended to the url * @param {function} [args.succes] the function to be called on success, * receives the response body String or Buffer. * @param {function} [args.error] the function to be called on error, * receives an error, an http.ClientResponse object and a response body * String or Buffer. */ function call(args) { if(!args || !args.service || !args.method) { console.error('ERROR in ProBinder AM call: Too few arguments!'); return null; } if(credentials){ needle.post(urlService + args.service + '/' + args.method, args.data, credentials, function(error, response, body) { // The callback if(!error && response && response.statusCode == 200) { if(args && args.success) args.success(body); } else { if(args && args.error) args.error(error, response, body); else console.error('Error during ProBinder AM call: ' + error.message); } } ); } else console.error('ERROR ProBinder AM: request or credentials object not ready!'); }; /** * Calls the user's unread content service. * @param {Object} [args] the optional object containing the success * and error callback methods * @param {function} [args.succes] refer to call function * @param {function} [args.error] refer to call function */ function getUnreadContents(args) { if(!args) args = {}; call({ service: '36', method: 'unreadcontent', success: args.success, error: args.error }); }; /** * Calls the content get service with the content id and the service id provided. * @param {Object} args the object containing the service id and the content id, * success and error callback methods * @param {String} args.serviceid the service id that is able to process this content * @param {String} args.contentid the content id * @param {function} [args.succes] to be called on success, receives the service, content * and user id's along with the content * @param {function} [args.error] refer to call function */ function getContent(args){ if(!args || !args.serviceid || !args.contentid) { console.error('ERROR in ProBinder AM getContent: Too few arguments!'); return null; } call({ service: '2', method: 'get', data: { id: args.contentid, service: args.serviceid }, success: args.success, error: args.error }); } /** * Does everything to post something in a binder * @param {Object} args the object containing the content * @param {String} args.content the content to be posted */ function newContent(args){ if(!args) args = {}; if(!args.content) args.content = 'Rule#0 says you received a new mail!'; call({ service: '27', method: 'save', data: { companyId: '961', context: '17936', text: args.content } }); } /** * Does everything to post a file info in a binder tabe * @param {Object} args the object containing the content * @param {String} args.service the content service * @param {String} args.id the content id */ function makeFileEntry(args){ if(!args || !args.service || !args.id) { console.error('ERROR in ProBinder AM makeFileEntry: Too few arguments!'); return null; } getContent({ serviceid: args.service, contentid: args.id, success: function(data) { call({ service: '27', method: 'save', data: { companyId: '961', context: '17936', text: 'New file (' + data.title + ') in tab \"' + data.context[0].name + '\", find it here!' } }); } }); } /** * Does everything to post something in a binder * @param {Object} args the object containing the content * @param {String} args.content the content to be posted */ function setRead(args){ call({ service: '2', method: 'setread', data: { id: args.id } }); } exports.loadCredentials = loadCredentials; exports.purgeCredentials = purgeCredentials; exports.verifyCredentials = verifyCredentials; exports.call = call; exports.getUnreadContents = getUnreadContents; // exports.getBinderTabContents = getBinderTabContents; exports.getContent = getContent; exports.newContent = newContent; exports.makeFileEntry = makeFileEntry; exports.setRead = setRead;