-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
156 lines (120 loc) · 3.97 KB
/
Copy pathapp.js
File metadata and controls
156 lines (120 loc) · 3.97 KB
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var userAgent = require('useragent');
var expressValidator = require('express-validator');
var fileUpload = require('express-fileupload');
var cors = require('cors');
var config = require('config');
var morgan = require('morgan');
var compression = require('compression');
var helmet = require('helmet');
var errorHandler = require('./error_handler');
var appError = require('./app_error');
var logger = require('./logger');
var ads = require('./routes/ads');
var search = require('./routes/search');
var click = require('./routes/click');
var download = require('./routes/download');
var deal = require('./routes/deal');
var offer = require('./routes/offer');
var analytic = require('./routes/analytic');
var index = require('./routes/index');
var logs = require('./routes/logs');
var flex = require('./routes/flex');
var authorize = require('./routes/authorize');
var app = express();
//keeps RegExp library to be up to date to match with agent the
//widest range of useragent
userAgent(true);
//CORS configuration
var whitelist = config.get('cors_whitelist');
var corsOptionsDelegate = function(req, callback){
var corsOptions;
if(whitelist.indexOf(req.header('Origin')) !== -1){
corsOptions = { origin: true }; // reflect (enable) the requested origin in the CORS response
}else{
corsOptions = { origin: false }; // disable CORS for this request
}
callback(null, corsOptions); // callback expects two parameters: error and options
};
//Adds security layer
app.use(helmet());
app.use(compression());
app.use(cors(corsOptionsDelegate));
//Enable pre-flight mode
app.options('*', cors());
//logger for non-production environments only
// app.get("env") !== "production" && app.use(morgan('dev'));
app.use(morgan('dev'));
app.use(fileUpload());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(expressValidator());
app.use(cookieParser());
//Used to serve image assets and directory is outside project root
app.use(express.static(config.get('upload_path')));
//Apidoc
app.use('/apidoc', express.static(config.get('apidoc')));
//Sponsored ad api
app.use('/api/ads', ads);
//Searches sponsored ads and daily deals
app.use('/api/search', search);
//Track clicks for sponsored ads and daily deals
app.use('/api/click', click);
//Searches sponsored ads and daily deals
app.use('/api/download', download);
//Daily Deals
app.use('/api/deals', deal);
//Offer
app.use('/api/offers', offer);
//Analytics
app.use('/api/analytics', authorize, analytic);
//Flex offers
app.use('/api/flex', flex);
//Other miscellaneous api
app.use('/api/', index);
app.use('/logs/', logs);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
res.status(appError.HttpErrorCodes.NotFound);
res.json({error: "Page Not Found"});
});
if (!('toJSON' in Error.prototype))
Object.defineProperty(Error.prototype, 'toJSON', {
value: function () {
var alt = {};
Object.getOwnPropertyNames(this).forEach(function (key) {
if(key !== "stack")
alt[key] = this[key];
}, this);
return alt;
},
configurable: true,
writable: true
});
// Error handler middleware
app.use(function(err, req, res, next) {
//Delegate express default error handler
//for errors that occur when
//headers have already been sent to the client
if (res.headersSent) {
return next(err)
}
errorHandler.handleError(err).then(
function(isOperationalError){
if(! isOperationalError){
res.status(appError.HttpErrorCodes.InternalServerError);
} else {
res.status(err.httpErrorCode);
}
if(req.app.get('env') === 'production')
err = "Something went wrong.";
res.json({error: err});
}, function(error){
//Next to express default error handler
next(error);
});
});
module.exports = app;