A simple file sharing site with an easy to use API and online panel.
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

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