A simple file sharing site with an easy to use API and online panel.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
2.5KB

  1. const https = require('https');
  2. const fs = require('fs');
  3. const express = require('express');
  4. const bodyParser = require('body-parser');
  5. const methodOverride = require('method-override');
  6. const mongoose = require('mongoose');
  7. const morgan = require('morgan');
  8. const passport = require('passport');
  9. const session = require('express-session');
  10. const sanitizer = require('express-sanitizer');
  11. const helmet = require('helmet');
  12. const app = express();
  13. const config = require('config');
  14. // MongoDB
  15. const dbHost = config.get('Database.host');
  16. let db;
  17. mongoose.connect(dbHost, {useNewUrlParser: true})
  18. .then(() => {
  19. console.log('Connected to database ' + dbHost + '\n');
  20. db = mongoose.connection;
  21. });
  22. const MongoStore = require('connect-mongo')(session);
  23. const mongoStore = new MongoStore({url: dbHost});
  24. // HTTP Request Logging
  25. if (config.get('Log.http'))
  26. app.use(morgan(config.get('Log.httpLevel')));
  27. // Session setup
  28. app.use(helmet());
  29. app.set('trust proxy', 1);
  30. app.use(session({
  31. secret: 'secret',
  32. name: 'session.id',
  33. resave: false,
  34. saveUninitialized: false,
  35. store: mongoStore,
  36. cookie: {
  37. //secure: true,
  38. httpOnly: true,
  39. //domain: 'shimapan.rocks',
  40. maxAge: 1000 * 60 * 60
  41. }
  42. }));
  43. // Middleware
  44. app.use(passport.initialize(null));
  45. app.use(passport.session(null));
  46. app.use(bodyParser.json());
  47. app.use(bodyParser.json({ type: 'application/*+json' }));
  48. app.use(bodyParser.urlencoded({ extended: true }));
  49. app.use(bodyParser.text());
  50. app.use(sanitizer());
  51. app.use(methodOverride('X-HTTP-Method-Override'));
  52. // Static directories and favicon
  53. //app.use(favicon(__dirname + '/public/img/favicon.ico'));
  54. app.use(express.static(__dirname + '/public'));
  55. // Install routes and configure authentication strategy
  56. require('./app/routes/routes.js')(app);
  57. require('./config/passport.js');
  58. // Error handler
  59. app.use((err, req, res, next) => {
  60. console.error(err.stack);
  61. res.status(500).json({'message': 'Internal server error.'});
  62. });
  63. // Start app
  64. const port = config.get('Server.port');
  65. let server;
  66. if (config.get('Server.tls')) {
  67. const options = {
  68. cert: fs.readFileSync('./cert.pem'),
  69. key: fs.readFileSync('./privkey.pem'),
  70. };
  71. server = https.createServer(options, app).listen(port, () =>
  72. console.log(`Listening on port ${port}...`));
  73. } else {
  74. server = app.listen(port, () =>
  75. console.log(`Listening on port ${port}...`));
  76. }
  77. // Expose app
  78. module.exports.app = app;
  79. module.exports.server = server;