-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
125 lines (108 loc) · 4.08 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
125
'use strict';
// Modules.
var auth = require('basic-auth');
var bodyParser = require('body-parser');
var compression = require('compression');
var cookieParser = require('cookie-parser');
var customers = require('./server/customers');
var db = require('./server/db');
var ejs = require('ejs');
var errorhandler = require('errorhandler');
var express = require('express');
var events = require('./server/events');
var flash = require('connect-flash');
var fs = require('fs');
var items = require('./server/items');
var morgan = require('morgan');
var passport = require('passport');
var protectJSON = require('./server/lib/protectJSON');
var raven = require('raven');
var session = require('express-session');
var users = require('./server/users');
// Express application.
var app = express();
// Application config.
app.set('view engine', 'html');
app.engine('html', ejs.renderFile);
app.set('views', 'client/src');
app.use(compression());
app.set('json spaces', 0);
app.use(flash());
// Static
app.use('/client', express.static('./client'));
// Server middleware.
app.use(cookieParser('CHANGEME'));
app.use(morgan(process.env.NODE_ENV === 'production' ? '' : 'dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(session({
resave: true,
saveUninitialized: true,
secret: 'CHANGEME'
}));
// Traceback on uncaught exceptions.
process.on('uncaughtException', function (error) {
console.log(error.stack);
process.exit();
});
// Production provisions.
if (process.env.NODE_ENV === 'production') {
app.use(errorhandler({ dumpExceptions: true, showStack: true }));
app.use(protectJSON);
var sentry = new raven.Client('https://CHANGEME:CHANGEME@app.getsentry.com/CHANGEME');
sentry.patchGlobal();
}
// Authentication.
passport.deserializeUser(users.auth.local().deserialize);
passport.serializeUser(users.auth.local().serialize);
passport.use(users.auth.local().strategy);
app.use(passport.initialize());
app.use(passport.session());
// Application middleware.
app.use(customers.middleware.getCustomer);
app.use(users.middleware.lastActive());
// Login and signup.
app.get('/logout', users.routes.logoutLocal);
app.post('/login', users.routes.loginLocal(passport));
app.post('/signup', users.routes.signupLocal(passport));
// Users API.
app.get('/api/users/test', users.routes.signupLocal());
app.get('/api/users', users.routes.list());
app.post('/api/users', users.routes.create());
app.get('/api/users/:id', users.routes.get());
app.put('/api/users/:id', users.routes.update());
app.delete('/api/users/:id', users.routes.delete());
app.post('/api/users/reset-password', users.routes.resetPassword());
app.post('/api/users/reset-password/confirm', users.routes.resetPasswordConfirm());
// Events API.
app.get('/api/events', events.routes.list());
app.post('/api/events', events.routes.create());
app.get('/api/users/:id/events', events.routes.getForUser());
// Items API.
app.get('/api/items', items.routes.list());
app.get('/api/items/:id', items.routes.get());
app.get('/api/search', items.routes.search());
app.post('/api/items/export', items.routes.exportItems());
// Showroom items API.
app.get('/api/styles/:id/colors', items.showroomRoutes.colorsList());
app.get('/api/styles/:id/options', items.showroomRoutes.optionsList());
app.get('/api/styles/:id/photos', items.showroomRoutes.photosList());
app.get('/api/styles/:id/tmv', items.showroomRoutes.tmv());
app.get('/api/items/:id/styles', items.showroomRoutes.stylesList());
app.get('/api/items/:id/fuelPhotos', items.showroomRoutes.fuelPhotosList());
// Assorted routes.
app.get('/demo', function(req, res) {
res.render('app/customers/' + req.customer.name + '/demo', null);
});
app.get('/embed', function(req, res) {
res.render('app/customers/' + req.customer.name + '/embed', {
searchUrl: req.protocol + '://' + req.host + (process.env.NODE_ENV !== 'production' ? ':3000' : '')
});
});
app.get('/official.gif', compression(), function(req, res, next) {
res.sendfile('client/src/assets/img/official.gif');
});
app.get('/*', require('./server/app')(app, sentry));
db.then(function() {
app.listen(process.env.PORT || 3000, '0.0.0.0');
});