-
Notifications
You must be signed in to change notification settings - Fork 291
/
core.js
72 lines (49 loc) · 2 KB
/
core.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
var exports = module.exports,
request = require('request'),
crypto = require('crypto'),
util = require("util");
module.exports = function(config) {
var errors = require("./error.js")();
// High level method to call API
function api(method, path, params, callback) {
if(!callback || typeof(callback) !== 'function') {
throw new Error('Callback not provided on API call');
}
if (process.env.DEBUG) console.log('OAuth2 Node Request');
var url = config.site + path;
call(method, url, params, function(error, response, body) {
data(error, response, body, callback);
});
}
// Make the HTTP request
function call(method, url, params, callback) {
var options = { uri: url, method: method }
if (!config.clientID || !config.clientSecret || !config.site)
throw new Error('Configuration missing. You need to specify the client id, the client secret and the oauth2 server');
if (config.clientID)
options.headers = { 'Authorization': 'Basic ' + new Buffer(config.clientID + ':' + config.clientSecret).toString('base64') }
if (isEmpty(params)) params = null;
if (method != 'GET') options.form = params;
if (method == 'GET') options.qs = params;
if (process.env.DEBUG) console.log('Simple OAuth2: Making the HTTP request', options)
request(options, callback)
}
// Extract the data from the request response
function data(error, response, body, callback) {
if (error) throw new Error('Simple OAuth2: something went worng during the request');
if (process.env.DEBUG) console.log('Simple OAuth2: checking response body', body);
try { body = JSON.parse(body); }
catch(e) { /* The OAuth2 server does not return a valid JSON'); */ }
if (response.statusCode >= 400) return callback(new errors.HTTPError(response.statusCode), null)
callback(error, body);
}
function isEmpty(ob){
for(var i in ob){ return false;}
return true;
}
return {
'call': call,
'data': data,
'api': api,
}
};