/
app.js
executable file
·133 lines (99 loc) · 4.08 KB
/
app.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
var fs = require('fs');
var url = require('url');
var server;
var http;
var httpServer;
var port = process.env.PORT || 3000;
var oauth = require('./oauth');
var rest = require('./rest');
// Use environment variables to set CLIENT_ID etc. On Heroku, set these like
// this:
// heroku config:add CLIENT_ID=somelongstring CLIENT_SECRET=somedigits etc
// Just test locally and then git to Heroku when ready to deploy (in theory)
oauth.setKeys(process.env.CLIENT_ID,process.env.CLIENT_SECRET);
oauth.setCallback('https://'+process.env.APP_DOMAIN+'/token','views/'+process.env.START_PAGE+'.html');
if(typeof(process.env.PORT) == 'undefined') { //you are probably not on Heroku, setup your own SSL
// This info is out of date when referring to HTTPS, but the cert gen is the same: http://www.silassewell.com/blog/2010/06/03/node-js-https-ssl-server-example/
http = require('https');
var options = { //sample cert setup
key: fs.readFileSync('../privatekey.pem').toString(),
cert: fs.readFileSync('../certificate.pem').toString()
};
console.log('SSL Configured');
server = http.createServer(options,RESTHandler);
} else {
http = require('http');
server = http.createServer(RESTHandler);
console.log('HTTP Configured');
}
server.listen(port);
console.log('REST Listening on '+port);
//RESTful API router
function RESTHandler (req, res) {
var url_parts = url.parse(req.url, true);
var query = url_parts.query;
var cookies = {};
req.headers.cookie && req.headers.cookie.split(';').forEach(function( cookie ) {
var parts = cookie.split('=');
cookies[ parts[ 0 ].trim() ] = ( parts[ 1 ] || '' ).trim();
});
console.log("Request::::"+req.url);
console.log("Cookies::::"+cookies.access_token);
console.log("Cookies::::"+cookies.refresh_token);
console.log("Cookies::::"+cookies.instance_url);
if(req.url == '/') {
fs.readFile('views/index.html', function(err, data){
res.writeHead(200, {'Content-Type':'text/html'});
res.write(data);
res.end();
});
}
//RESTful API
else if(req.url == '/login') {
if(cookies.access_token != null) {
oauth.setOAuth(cookies.access_token);
fs.readFile(oauth.getCallbackFile(), function(err, data){
res.writeHead(200, {'Content-Type':'text/html'});
res.write(data);
res.end();
});
} else {
console.log('Logging In with OAuth');
console.log(oauth.getLoginUrl());
res.writeHead(301, {'Location' : oauth.getLoginUrl(), 'Cache-Control':'no-cache,no-store,must-revalidate'});
res.end();
}
}
else if(req.url.indexOf('/token') >= 0) {
oauth.getRequestToken(req.url,res);
} else if(req.url.indexOf('/get') >= 0) {
console.log("Getting :: "+query.id);
rest.getObjectById(query.id,query.type,cookies.instance_url,oauth.getOAuth().access_token,res);
} else if(req.url.indexOf('/query') >= 0) {
console.log("Query :: "+query.q);
rest.query(query.q,cookies.instance_url,oauth.getOAuth().access_token,res);
} else if(req.url.indexOf('/update') >= 0) {
console.log("Updating :: "+query.id);
rest.update(query.o,query.id,query.type,cookies.instance_url,oauth.getOAuth().access_token,res);
} else if(req.url.indexOf('/create') >= 0) {
console.log("Creating :: "+query.type);
rest.create(query.o,query.type,cookies.instance_url,oauth.getOAuth().access_token,res);
} else if(req.url.indexOf('/delete') >= 0) {
console.log("Deleting :: "+query.id);
rest.deleteObject(query.id,query.type,cookies.instance_url,oauth.getOAuth().access_token,res);
} else if(req.url.indexOf('/execute/') >= 0) {
restData = req.url.split('/execute/')[1];
restData = restData.split('/');
console.log("Custom Apex Execute :: "+restData[0]+"."+restData[1]);
rest.execute(restData[0],restData[1],unescape(restData[2]),cookies.instance_url,oauth.getOAuth().access_token,res);
} else {
fs.readFile('views'+req.url, function(err, data){
if(data) {
console.log(data);
res.writeHead(200, {'Content-Type':'text/html'});
res.write(data);
res.end();
}
});
}
}