forked from kernoeb/PlanningSup
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
94 lines (79 loc) · 2.65 KB
/
index.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
const express = require('express')
const cors = require('cors')
const cookieParser = require('cookie-parser')
const bodyParser = require('body-parser')
const mongoose = require('mongoose')
const session = require('express-session')
const MongoDBStore = require('connect-mongodb-session')(session)
const packageJson = require('../package.json')
const logger = require('./util/signale')
const { initDB } = require('./util/db')
const { initBree } = require('./util/bree')
logger.info('Starting...')
logger.info('Version : ' + packageJson.version)
logger.info('MongoDB Url : ' + (process.env.MONGODB_URL || 'localhost:27017'))
logger.info('BREE : ' + (process.env.NO_BREE ? 'disabled' : 'enabled'))
// Connect to MongoDB first
if (process.env.NODE_ENV !== 'test') {
mongoose.connect(`mongodb://${process.env.MONGODB_URL || 'localhost:27017'}/planningsup`).then(() => {
logger.info('Mongo initialized !')
const t1 = Date.now()
// Non-blocking database initialization
initDB().then(() => {
const t2 = Date.now()
logger.info('Database initialized !')
logger.info('Database initialization time : ' + (t2 - t1) / 1000 + 's')
// Initialize Bree.js when the database is ready
if (!process.env.NO_BREE) {
logger.info('Initializing Bree.js...')
initBree()
}
})
}).catch((err) => {
logger.error('Error while initializing mongo', err)
})
}
// Initialize the server
// Create express instance
const app = express()
app.use(cors())
app.use(cookieParser())
app.use(bodyParser.json())
// Create session store for express-session
const store = new MongoDBStore({
uri: `mongodb://${process.env.MONGODB_URL || 'localhost:27017'}/planningsup`, collection: 'sessions'
})
// Catch errors
store.on('error', function (error) {
logger.error(error)
})
const sess = {
secret: app.get('env') === 'production' ? process.env.SESSION_SECRET : 'secret',
cookie: {
maxAge: 1000 * 60 * 60 * 24 * 365 * 10 // 10 years
},
store,
resave: true,
saveUninitialized: true
}
// D0n't h4ck me bro
if (app.get('env') === 'production') {
app.set('trust proxy', 1) // trust first proxy
sess.cookie.secure = true // serve secure cookies
}
app.use(session(sess))
// Import API Routes
app.use(require('./routes/calendar'))
app.use(require('./routes/urls'))
app.use(require('./routes/crous'))
app.use(require('./routes/metrics'))
// app.use('/sync', require('./routes/sync')) // Work in progress
// Export express app
module.exports = app
// Start standalone server if directly running
if (require.main === module) {
const port = process.env.PORT || 3001
app.listen(port, () => {
logger.info(`API server listening on port ${port}`)
})
}