Repository navigation
Expand file tree
/
Copy pathapp.js
More file actions
94 lines (72 loc) · 2.66 KB
/
Copy pathapp.js
File metadata and controls
94 lines (72 loc) · 2.66 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
var express = require('express')
var bodyParser = require('body-parser')
var morgan = require('morgan')
var path = require('path')
var serveStatic = require('serve-static')
var webpack = require('webpack')
var webpackMiddleware = require('webpack-dev-middleware')
const { auth } = require('express-openid-connect')
var config = require('./config')
var webpackConfig = require('./webpack.config')
var Manager = require('./lib/manager')
var Missions = require('./lib/missions')
var Mods = require('./lib/mods')
var Logs = require('./lib/logs')
var Settings = require('./lib/settings')
const requiresRole = require('./lib/auth')
var app = express()
var server = require('http').Server(app)
var io = require('socket.io')(server)
app.get('/favicon.ico', function (req, res) {
res.sendFile(path.join(__dirname, 'public', 'favicon.ico'))
})
app.use(auth({ ...config.ssoConfig, idpLogout: true }))
app.use(requiresRole(config.requiredRole))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))
morgan.token('user', function (req) { return req.oidc?.user?.preferred_username ?? 'anon' })
app.use(morgan(config.logFormat || 'dev', { stream: config.logStream || process.stdout }))
app.use(serveStatic(path.join(__dirname, 'public')))
app.get('/api/user', function (req, res) {
const user = req.oidc?.user
const username = user?.preferred_username || user?.username || user?.name || req.auth?.user || 'Unknown User'
res.json({
username,
avatar: user?.picture
})
})
var logs = new Logs(config)
var missions = new Missions(config)
var mods = new Mods(config)
mods.updateMods()
var manager = new Manager(config, logs, mods)
manager.load()
var settings = new Settings(config)
app.use('/api/logs', require('./routes/logs')(logs))
app.use('/api/missions', require('./routes/missions')(missions))
app.use('/api/mods', require('./routes/mods')(mods))
app.use('/api/servers', require('./routes/servers')(manager, mods))
app.use('/api/settings', require('./routes/settings')(settings))
io.on('connection', function (socket) {
socket.emit('missions', missions.missions)
socket.emit('mods', mods.mods)
socket.emit('servers', manager.getServers())
socket.emit('settings', settings.getPublicSettings())
})
missions.on('missions', function (missions) {
io.emit('missions', missions)
})
mods.on('mods', function (mods) {
io.emit('mods', mods)
})
manager.on('servers', function () {
io.emit('servers', manager.getServers())
})
if (require.main === module) {
var webpackCompiler = webpack(webpackConfig)
app.use(webpackMiddleware(webpackCompiler, {
publicPath: webpackConfig.output.publicPath
}))
server.listen(config.port, config.host)
}
module.exports = app