-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
115 lines (110 loc) · 3.19 KB
/
index.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
var exports = module.exports = {};
var http = require('http');
var https = require('https');
var request = require('request');
exports.trigger = function(options,fn){
if(!options || typeof(options)!="object"){
fn(null,"Error: options is not defined or not an object");
return;
}
if(!options.hasOwnProperty("module") || !options.module || typeof(options.module)!="string"){
fn(null,"Error: options.module is not defined or not a string "+options.module);
return;
}
if(!options.hasOwnProperty("user") || !options.user || typeof(options.user)!="string"){
fn(null,"Error: options.user is not defined or not a string");
return;
}
if(!options.hasOwnProperty("authorization_bearer") || !options.authorization_bearer || typeof(options.authorization_bearer)!="string"){
fn(null,"Error: options.authorization_bearer is not defined or not a string");
return;
}
if(options.hasOwnProperty("variables") && options.variables && typeof(options.variables)!="object"){
fn(null,"Error: options.variables must be an object or not defined");
return;
}
var apiUrl = "https://talkbot.io:6446/api/call/module";
var formData = {
module: options.module,
userID: options.user
};
if(options.variables){
formData["variable"] = JSON.stringify(options.variables);
}
var headers = {"Authorization":'Bearer '+options.authorization_bearer};
request.post({
url: apiUrl,
formData: formData,
headers: headers
}, function optionalCallback(err, httpResponse, body) {
if (err) {
fn(null,"Error: something weird happened");
return;
}
try
{
var response = JSON.parse(body);
if(response["error"]){
fn(null,"Error: "+response["error"]);
} else {
fn(response,null);
}
} catch(e){
fn(null,"Error: something weird happened");
}
});
}
exports.listen = function(options,fn) {
if(!options || typeof(options)!="object"){
fn(null,"Error: options is not defined or not an object");
return;
}
if(!options.hasOwnProperty("port") || !options.port || isNaN(options.port)){
fn(null,"Error: options.port is not defined or not a number");
return;
}
var requestsPort = options.port;
function handleRequest(request, response){
response.setHeader('Access-Control-Allow-Origin', '*');
response.setHeader('Access-Control-Request-Method', '*');
response.setHeader('Access-Control-Allow-Methods', 'POST');
response.setHeader('Access-Control-Allow-Headers', '*');
if(request.method == 'POST'){
var body = '';
request.on('data', function (data) {
body += data;
});
request.on('end', function () {
try
{
processResponse(JSON.parse(body));
} catch(e){
fn(null,"Error: something weird happened");
}
});
var processResponse = function(data){
fn(data,null);
}
}
}
var server;
var gateway;
if(options.https){
gateway = https;
} else {
gateway = http;
}
if(options.server_options){
if(typeof(options.server_options)!="object"){
fn(null,"Error: options.server_options must be an object");
return;
}
server = gateway.createServer(options.server_options,handleRequest);
} else {
server = gateway.createServer(handleRequest);
}
server.listen(requestsPort, function(){ });
server.on('error', function (e) {
fn(null,e);
});
};