-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathserver.js
124 lines (109 loc) · 3.86 KB
/
server.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
'use strict'
//imports
var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var Item = require('./server/model/items');
var User = require('./server/model/users');
var passportJWT = require('passport-jwt');
var passportLocalAPI = require('passport-localapikey-update');
var passport = require('passport');
var fs = require('fs');
var secrets = require('./server/secrets.js');
var https = require('https');
var path = require('path');
var fileUpload = require('express-fileupload');
var app = express();
var api_router = require('./server/router/api_router/apiRouter');
var auth_router = require('./server/router/auth_router/authRouter');
var pdf_helpers = require('./server/uploads/pdf_helpers');
app.use(fileUpload());
app.post('/upload/loan/:loan_id/item/:item_id', pdf_helpers.uploadPDF);
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(passport.initialize());
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Credentials', 'true');
res.setHeader('Access-Control-Allow-Methods', 'GET,HEAD,OPTIONS,POST,PUT,DELETE,PATCH');
res.setHeader('Access-Control-Allow-Headers', 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Accept, Authorization, apikey');
res.setHeader('Cache-Control', 'no-cache');
if ('OPTIONS' == req.method) {
res.send(200);
}
else {
next();
}
});
var connectionString = (process.env.NODE_ENV == 'test') ? 'mongodb://localhost/test'
: 'mongodb://' + secrets.dbUser + ':' + secrets.dbPassword + '@localhost/inventory';
// connect if connection already open, else create one
try {
mongoose.connect(connectionString);
} catch(error) {
mongoose.createConnection(connectionString);
}
// passport setup
var opts = {
jwtFromRequest: passportJWT.ExtractJwt.fromAuthHeader(),
secretOrKey: secrets.hashSecret,
}
passport.use(new passportJWT.Strategy(opts, function(jwt_payload, done) {
User.findById(jwt_payload._doc._id, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
done(null, user);
} else {
done(null, false);
}
});
}));
passport.use(new passportLocalAPI.Strategy(
function(apikey, done) {
User.findOne({ apikey: apikey }, function (err, user) {
if (err) {
return done(err, false);
}
if (!user) {
return done(null, false);
}
return done(null, user);
});
}
));
app.use('/api', passport.authenticate(['jwt', 'localapikey'], { session: false }), api_router);
app.use('/auth', auth_router);
// Places a try catch around all requests. The server never stops
app.use(function (error, req, res, next) {
console.log("SERVER ERROR!");
console.error(error);
res.status(500);
res.send({error: 'A server error has occured.'});
});
// Set up static paths
app.use('/docs', express.static(path.resolve(__dirname, 'docs')));
app.use('/uploads', express.static(path.resolve(__dirname, 'server/uploads/files')));
var buildPath = path.resolve(__dirname, 'build');
app.use(express.static(buildPath));
// Sets up build path
app.get('/*', function (request, response){
response.sendFile('index.html', {root: buildPath});
})
if (process.env.NODE_ENV !== 'test') {
if (secrets.useProxy) {
app.listen(secrets.proxyPort, function () {
console.log('API running on proxy port ' + secrets.proxyPort);
});
} else {
https.createServer({
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem'),
passphrase: secrets.sslSecret
}, app).listen(secrets.productionPort, function() {
console.log('API running on production port ' + secrets.productionPort);
});
}
}
module.exports = app;