This repository has been archived by the owner on Oct 17, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
104 lines (86 loc) · 3.62 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
var express = require('express');
var bodyParser = require('body-parser');
var rateLimit = require('express-rate-limit');
var helmet = require('helmet');
var cookieParser = require('cookie-parser');
// var session = require('express-session');
var csrf = require('csurf')
var cors = require('cors');
var bookshelf = require('./database/db').db;
var Request = require('./models/request.js').RequestController(bookshelf);
var Subscription = require('./models/subscription.js').SubscriptionController(bookshelf);
var Event = require('./models/event.js').EventController(bookshelf);
var RequestEvent = require('./models/requestevent.js').RequestEventController(bookshelf);
var Email = require('./models/email.js').EmailModel;
var Feedback = require('./models/feedback.js').FeedbackModel(bookshelf);
var policy = require('./conf/policy.conf').policy;
require("fs").readdirSync('./conf/lang').forEach(function(file) {
policy = require("./conf/lang/" + file).addLanguageToPolicy(policy);
});
var uuid = require('node-uuid');
var domain = require('domain');
var app = express();
function domainWrapper() {
return function (req, res, next) {
var reqDomain = domain.create();
reqDomain.add(req);
reqDomain.add(res);
res.on('close', function () {
reqDomain.dispose();
});
reqDomain.on('error', function (err, request, response, next) {
console.log('error on request %s %s: %s', req.method, req.url, err);
res.status(500).send("Something bad happened. :(");
res.end();
process.exit(1);
});
reqDomain.run(next)
}
}
app.use(domainWrapper());
var limiter = rateLimit({
windowMS: 60000,
delayAfter: 0,
delayMS: 0,
max: policy.rateLimitMaxPerMinute,
message: "Too many requests. Please try again later.",
statusCode: 429
});
var enrollmentController = require('./controllers/enrollmentController/index.js').enrollmentController(Request, Subscription, Event, RequestEvent, Email);
var feedbackController = require('./controllers/feedbackController/index.js').feedbackController(Feedback);
var unsubscribeController = require('./controllers/unsubscribeController/index.js').unsubscribeController(Subscription);
var statsController = require('./controllers/statsController/index.js').statsController(Request);
// var parseForm = bodyParser.urlencoded({ extended: false })
app.set('port', process.env.PORT || 3000);
app.use(helmet());
// Comment this CORS out if you have community tools running behind a proxy like NGINX, and set it there
app.use(cors({
origin: policy.AMIFrontEnd.baseURL
}));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(limiter);
var myErrorLogger = function (err, req, res, next) {
console.log('error on request %s %s: %s', req.method, req.url, err);
res.status(500).send("Something bad happened. :(");
res.end();
process.exit(1);
};
app.get('/', function(req, res){
res.json({
title: "Welcome to AMI Community Tools!"
});
}, myErrorLogger)
app.post('/enroll', enrollmentController.submit, myErrorLogger);
app.get('/verify', enrollmentController.verifyAndEnroll, myErrorLogger);
app.post('/unsubscribe', unsubscribeController.unsubHandler, myErrorLogger);
app.get('/stats/:method/:jurisdiction', statsController.methodAllocator, myErrorLogger);
// app.get('/feedback', feedbackController.getForm);
// app.post('/feedback', feedbackController.submit, myErrorLogger);
// app.use(cookieParser({''}));
// app.use(csrf());
app.all("*", myErrorLogger);
app.listen(app.get('port'), function() {
console.log('Express server listening on port %d in %s mode', app.get('port'), app.get('env'));
});
module.exports = app;