123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- "use strict";
- const db = require('./models/db.js');
- require("log-timestamp");
- const config = require('config');
- const redis = require('./helpers/redis');
- const websockets = require('./helpers/websockets');
- const http = require('http');
- const path = require('path');
- const _ = require('underscore');
- const favicon = require('serve-favicon');
- const logger = require('morgan');
- const cookieParser = require('cookie-parser');
- const bodyParser = require('body-parser');
- const swig = require('swig');
- const i18n = require('i18n-2');
- const helmet = require('helmet');
- const express = require('express');
- const app = express();
- const serveStatic = require('serve-static');
- const isProduction = app.get('env') === 'production';
- console.log("Booting Spacedeck Open… (environment: " + app.get('env') + ")");
- app.use(logger(isProduction ? 'combined' : 'dev'));
- i18n.expressBind(app, {
- locales: ["en", "de", "fr"],
- defaultLocale: "en",
- cookieName: "spacedeck_locale",
- devMode: (app.get('env') == 'development')
- });
- swig.setDefaults({
- varControls: ["[[", "]]"] // otherwise it's not compatible with vue.js
- });
- swig.setFilter('cdn', function(input, idx) {
- return input;
- });
- app.engine('html', swig.renderFile);
- app.set('view engine', 'html');
- if (isProduction) {
- app.set('views', path.join(__dirname, 'build', 'views'));
- app.use(favicon(path.join(__dirname, 'build', 'assets', 'images', 'favicon.png')));
- app.use(express.static(path.join(__dirname, 'build', 'assets')));
- } else {
- app.set('views', path.join(__dirname, 'views'));
- app.use(favicon(path.join(__dirname, 'public', 'images', 'favicon.png')));
- app.use(express.static(path.join(__dirname, 'public')));
- }
- app.use(bodyParser.json({
- limit: '50mb'
- }));
- app.use(bodyParser.urlencoded({
- extended: false,
- limit: '50mb'
- }));
- app.use(cookieParser());
- app.use(helmet.frameguard())
- app.use(helmet.xssFilter())
- app.use(helmet.hsts({
- maxAge: 7776000000,
- includeSubdomains: true
- }))
- app.disable('x-powered-by');
- app.use(helmet.noSniff())
- //app.use(require("./middlewares/error_helpers"));
- app.use(require("./middlewares/session"));
- //app.use(require("./middlewares/cors"));
- app.use(require("./middlewares/i18n"));
- app.use("/api", require("./middlewares/api_helpers"));
- app.use('/api/spaces/:id', require("./middlewares/space_helpers"));
- app.use('/api/spaces/:id/artifacts/:artifact_id', require("./middlewares/artifact_helpers"));
- app.use('/api/users', require('./routes/api/users'));
- app.use('/api/memberships', require('./routes/api/memberships'));
- const spaceRouter = require('./routes/api/spaces');
- app.use('/api/spaces', spaceRouter);
- spaceRouter.use('/:id/artifacts', require('./routes/api/space_artifacts'));
- spaceRouter.use('/:id/memberships', require('./routes/api/space_memberships'));
- spaceRouter.use('/:id/messages', require('./routes/api/space_messages'));
- spaceRouter.use('/:id/digest', require('./routes/api/space_digest'));
- spaceRouter.use('/:id', require('./routes/api/space_exports'));
- app.use('/api/sessions', require('./routes/api/sessions'));
- //app.use('/api/webgrabber', require('./routes/api/webgrabber'));
- app.use('/', require('./routes/root'));
- if (config.get('storage_local_path')) {
- app.use('/storage', serveStatic(config.get('storage_local_path')+"/"+config.get('storage_bucket'), {
- maxAge: 24*3600
- }));
- }
- // catch 404 and forward to error handler
- //app.use(require('./middlewares/404'));
- if (app.get('env') == 'development') {
- app.set('view cache', false);
- swig.setDefaults({cache: false});
- } else {
- app.use(require('./middlewares/500'));
- }
- module.exports = app;
- // CONNECT TO DATABASE
- db.init();
- // START WEBSERVER
- const port = 9666;
- const server = http.Server(app).listen(port, () => {
-
- if ("send" in process) {
- process.send('online');
- }
- }).on('listening', () => {
-
- const host = server.address().address;
- const port = server.address().port;
- console.log('Spacedeck Open listening at http://%s:%s', host, port);
- }).on('error', (error) => {
- if (error.syscall !== 'listen') {
- throw error;
- }
- const bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port;
- switch (error.code) {
- case 'EACCES':
- console.error(bind + ' requires elevated privileges');
- process.exit(1);
- break;
- case 'EADDRINUSE':
- console.error(bind + ' is already in use');
- process.exit(1);
- break;
- default:
- throw error;
- }
- });
- websockets.startWebsockets(server);
- redis.connectRedis();
- /*process.on('message', (message) => {
- console.log("Process message:", message);
- if (message === 'shutdown') {
- console.log("Exiting Spacedeck.");
- process.exit(0);
- }
- });*/
|