mirror of
https://github.com/UiO-Gaming/infoscreen3.git
synced 2026-11-05 13:56:52 +01:00
225 lines
6.2 KiB
JavaScript
225 lines
6.2 KiB
JavaScript
let config = require("./config.js");
|
|
let express = require('express');
|
|
let createError = require('http-errors');
|
|
let logger = require('morgan');
|
|
let lessMiddleware = require('less-middleware');
|
|
let path = require('path');
|
|
let PluginManager = require("./modules/pluginManager");
|
|
const EventEmitter = require('events');
|
|
|
|
let cookieParser = require('cookie-parser')(config.sessionKey);
|
|
|
|
class Dispatcher extends EventEmitter { }
|
|
|
|
const eventDispatcher = new Dispatcher();
|
|
|
|
let app = express();
|
|
let server = require('http').Server(app);
|
|
let io = require('socket.io')(server, {
|
|
cookieHttpOnly: true,
|
|
cookieSecure: false,
|
|
cookie: false
|
|
});
|
|
let i18next = require("i18next");
|
|
let FilesystemBackend = require("i18next-node-fs-backend");
|
|
let i18nextMiddleware = require("i18next-express-middleware");
|
|
|
|
let passport = require('passport');
|
|
let LocalStrategy = require('passport-local').Strategy;
|
|
let User = require("./modules/db.js");
|
|
|
|
passport.serializeUser(function (user, cb) {
|
|
cb(null, user.id);
|
|
});
|
|
|
|
passport.deserializeUser(function (id, cb) {
|
|
User.findById(id, function (err, user) {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
cb(null, user);
|
|
});
|
|
});
|
|
|
|
passport.use("local", new LocalStrategy({
|
|
passReqToCallback: true
|
|
},
|
|
function (req, username, password, cb) {
|
|
User.findByUsername(username, function (err, user) {
|
|
if (err) {
|
|
return cb(err);
|
|
}
|
|
if (!user) {
|
|
return cb(null, false);
|
|
}
|
|
if (user.password !== password) {
|
|
return cb(null, false);
|
|
}
|
|
return cb(null, user);
|
|
});
|
|
}));
|
|
|
|
if (config.mediaServer) {
|
|
const NodeMediaServer = require('node-media-server');
|
|
|
|
const nodeServerConfig = {
|
|
logtype: 2,
|
|
rtmp: {
|
|
port: 1935,
|
|
chunk_size: 60000,
|
|
gop_cache: true,
|
|
ping: 60,
|
|
ping_timeout: 30
|
|
},
|
|
http: {
|
|
port: (parseInt(config.serverListenPort) + 1),
|
|
allow_origin: '*',
|
|
},
|
|
auth: {
|
|
api: true,
|
|
api_user: config.admins[0].username,
|
|
api_pass: config.admins[0].password,
|
|
|
|
}
|
|
};
|
|
|
|
let nms = new NodeMediaServer(nodeServerConfig);
|
|
nms.run();
|
|
}
|
|
|
|
|
|
|
|
|
|
i18next
|
|
.use(FilesystemBackend)
|
|
.use(i18nextMiddleware.LanguageDetector)
|
|
.init({
|
|
backend: {
|
|
loadPath: './locales/{{lng}}/{{ns}}.json',
|
|
addPath: './locales/{{lng}}/{{ns}}.missing.json'
|
|
},
|
|
fallbackLng: config.defaultLocale,
|
|
preload: ['en', 'fi'],
|
|
saveMissing: false,
|
|
detection: {
|
|
// order and from where user language should be detected
|
|
order: [ /*'path', 'session', */ 'querystring', 'cookie', 'header'],
|
|
|
|
// keys or params to lookup language from
|
|
lookupQuerystring: 'lng',
|
|
lookupCookie: 'i18next',
|
|
lookupHeader: 'accept-language',
|
|
lookupSession: 'lng',
|
|
lookupPath: 'lng',
|
|
lookupFromPathIndex: 0,
|
|
|
|
// cache user language
|
|
caches: false, // ['cookie']
|
|
|
|
// optional expire and domain for set cookie
|
|
// cookieExpirationDate: new Date(),
|
|
// cookieDomain: 'myDomain',
|
|
cookieSecure: false // if need secure cookie
|
|
}
|
|
});
|
|
|
|
|
|
// view engine setup
|
|
app.set('port', parseInt(config.serverListenPort));
|
|
app.set('views', path.join(__dirname, 'views'));
|
|
app.set('view engine', 'twig');
|
|
app.use(i18nextMiddleware.handle(i18next));
|
|
app.use(logger('dev'));
|
|
app.use(express.json());
|
|
app.use(express.urlencoded({
|
|
extended: false
|
|
}));
|
|
|
|
app.use(cookieParser);
|
|
app.use(lessMiddleware(path.join(__dirname, 'public')));
|
|
app.use(express.static(path.join(__dirname, 'public')));
|
|
|
|
var expressSession = require('express-session');
|
|
var SQLiteStore = require('connect-sqlite3')(expressSession);
|
|
var sessionStore = new SQLiteStore({
|
|
dir: "./data",
|
|
db: "sessions.db"
|
|
|
|
});
|
|
|
|
app.use(expressSession({
|
|
key: 'express.sid',
|
|
secret: config.sessionKey,
|
|
store: sessionStore,
|
|
resave: true,
|
|
saveUninitialized: true,
|
|
cookie: {
|
|
sameSite: true,
|
|
secure: false
|
|
}
|
|
}));
|
|
|
|
app.use(passport.initialize({}));
|
|
app.use(passport.session({}));
|
|
|
|
|
|
|
|
// default socket.io config
|
|
/* var passportSocketIo = require('passport.socketio');
|
|
io.use(passportSocketIo.authorize({
|
|
key: 'express.sid', // the name of the cookie where express/connect stores its session_id
|
|
secret: config.sessionKey, // the session_secret to parse the cookie
|
|
store: sessionStore,
|
|
cookieParser: require('cookie-parser'),
|
|
// success: onAuthorizeSuccess, // *optional* callback on success - read more below
|
|
fail: onAuthorizeFail, // *optional* callback on fail/error - read more below
|
|
}));
|
|
|
|
function onAuthorizeFail(data, message, error, accept) {
|
|
if (message) {
|
|
console.log("Websocket error: " + message);
|
|
if (message === "No session found") {
|
|
message += ", logout and try login again.";
|
|
}
|
|
return accept(new Error(message));
|
|
}
|
|
|
|
if (error) {
|
|
console.log("Websocket error: " + message);
|
|
return accept(new Error(message));
|
|
}
|
|
}
|
|
*/
|
|
|
|
let pluginManager = new PluginManager(app, io, eventDispatcher);
|
|
let websocket = require("./modules/websocket")(pluginManager, io, eventDispatcher);
|
|
let indexRouter = require('./routes/index.js')(pluginManager, websocket, eventDispatcher);
|
|
let adminRouter = require('./routes/admin.js')(pluginManager, websocket, eventDispatcher);
|
|
let authRouter = require('./routes/auth.js')(app, websocket, eventDispatcher);
|
|
|
|
app.use('/', indexRouter);
|
|
app.use('/admin', adminRouter);
|
|
//app.use('/', authRouter);
|
|
|
|
// catch 404 and forward to error handler
|
|
app.use(function (req, res, next) {
|
|
next(createError(404));
|
|
});
|
|
|
|
// error handler
|
|
app.use(function (err, req, res, next) {
|
|
// set locals, only providing error in development
|
|
res.locals.message = err.message;
|
|
res.locals.error = req.app.get('env') === 'development' ? err : {};
|
|
|
|
// render the error page
|
|
res.status(err.status || 500);
|
|
res.render('error');
|
|
});
|
|
|
|
module.exports = {
|
|
app: app,
|
|
server: server,
|
|
io: io,
|
|
eventDispatcher: eventDispatcher
|
|
}; |