-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
78 lines (60 loc) · 2.39 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
var http = require('http');
var uuid = require('node-uuid');
var fs = require('fs');
var RequestParser = require('./lib/RequestParser.js');
var Pdf = require('./lib/Pdf.js');
var yaml_config = require('node-yaml-config');
var settings = yaml_config.load(__dirname + '/config/settings.yml');
var RequestParser,
Pdf;
var server = http.createServer(function(request, response) {
var ip = request.headers['x-forwarded-for'] ||
request.connection.remoteAddress ||
request.socket.remoteAddress ||
request.connection.socket.remoteAddress;
console.log('Request from %s', ip);
if (request.headers['api-key'] != settings.server.api_key) {
var message = 'Invalid api key provided';
console.error(message);
response.statusMessage = 'message';
response.statusCode = 401;
response.end(message);
return;
}
requestParser = new RequestParser();
requestParser.handle(request, response, function(error, parsedOptions) {
if (error) {
console.error(error);
response.statusCode = 500;
response.end('Invalid JSON: ' + error.message);
return;
}
var destination = __dirname + '/' + uuid.v1() + '.pdf';
console.info('Parsed request for %s', destination);
parsedOptions.command = settings.wkhtmltopdf.bin;
pdfCreator = new Pdf(parsedOptions);
pdfCreator.generate(
function(error, stdout, stderror){
console.log(stdout);
console.error(stderror);
response.statusCode = 500;
response.end('wkhtmltopdf failed');
return;
},
destination,
function() {
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "X-Requested-With");
response.setHeader('content-type', 'application/pdf');
var readStream = fs.createReadStream(destination);
readStream.pipe(response);
readStream.on('end', function() {
console.log('Sending file %s', destination);
fs.unlink(destination);
});
});
});
});
server.listen(settings.server.port, function(){
console.info("Server listening on: http://0.0.0.0:%s", settings.server.port);
});