]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server.js
Make the network auto sufficient (eject bad pods with scores)
[github/Chocobozzz/PeerTube.git] / server.js
index bff7ddd57ac42e44da3eaa444867ca7931bf65ec..3b899689c5544b494d579299513d0e22fa6afefc 100644 (file)
--- a/server.js
+++ b/server.js
@@ -2,15 +2,18 @@
   'use strict'
 
   // ----------- Node modules -----------
+  var bodyParser = require('body-parser')
   var express = require('express')
-  var path = require('path')
+  var expressValidator = require('express-validator')
+  var http = require('http')
   var morgan = require('morgan')
-  var bodyParser = require('body-parser')
   var multer = require('multer')
+  var path = require('path')
   var TrackerServer = require('bittorrent-tracker').Server
   var WebSocketServer = require('ws').Server
+
+  // Create our main app
   var app = express()
-  var http = require('http')
 
   // ----------- Checker -----------
   var checker = require('./src/checker')
     process.exit(0)
   }
 
-  checker.createDirectories()
+  checker.createDirectoriesIfNotExist()
 
-  // ----------- PeTube modules -----------
+  // ----------- Constants -----------
+  var utils = require('./src/utils')
+
+  global.API_VERSION = 'v1'
+  global.FRIEND_BASE_SCORE = utils.isTestInstance() ? 20 : 100
+
+  // ----------- PeerTube modules -----------
   var config = require('config')
   var logger = require('./src/logger')
   var routes = require('./routes')
-  var api = require('./routes/api')
-  var utils = require('./src/utils')
   var videos = require('./src/videos')
   var webtorrent = require('./src/webTorrentNode')
 
-  var compression
+  // Get configurations
   var port = config.get('listen.port')
   var uploads = config.get('storage.uploads')
 
   // ----------- Command line -----------
 
   // ----------- App -----------
+
+  // For the logger
   app.use(morgan('combined', { stream: logger.stream }))
+  // For body requests
   app.use(bodyParser.json())
+  // For POST file requests
   app.use(multer({ dest: uploads }))
   app.use(bodyParser.urlencoded({ extended: false }))
+  // Validate some params for the API
+  app.use(expressValidator())
 
   // ----------- Views, routes and static files -----------
 
-  if (process.env.NODE_ENV === 'production') {
-    // logger.log('Production : static files in dist/\n')
+  // Livereload
+  app.use(require('connect-livereload')({
+    port: 35729
+  }))
 
-    // GZip compression
-    compression = require('compression')
-    app.use(compression())
+  // Catch sefaults
+  require('segfault-handler').registerHandler()
 
-    // A month
-    var maxAge = 86400000 * 30
+  // Static files
+  app.use(express.static(path.join(__dirname, '/public'), { maxAge: 0 }))
 
-    // TODO
-    app.get(/^\/(index|(partials\/[a-z\/]+))?$/, function (req, res, next) {
-      if (req.url === '/') {
-        req.url = '/index'
-      }
+  // Jade template from ./views directory
+  app.set('views', path.join(__dirname, '/views'))
+  app.set('view engine', 'jade')
 
-      req.url += '.html'
-      next()
-    })
-
-    app.use(express.static(path.join(__dirname, '/dist/public'), { maxAge: maxAge }))
-    app.use(express.static(path.join(__dirname, '/dist/views'), { maxAge: maxAge }))
-  } else {
-    // Livereload
-    app.use(require('connect-livereload')({
-      port: 35729
-    }))
-
-    require('segfault-handler').registerHandler()
+  // API routes
+  var api_route = '/api/' + global.API_VERSION
+  app.use(api_route, routes.api)
 
-    app.use(express.static(path.join(__dirname, '/public'), { maxAge: 0 }))
-
-    // Jade template from ./views directory
-    app.set('views', path.join(__dirname, '/views'))
-    app.set('view engine', 'jade')
-
-    // Views routes
-    app.use('/', routes)
-  }
-
-  // ----------- Routes -----------
-  app.use('/api/videos', api.videos)
-  app.use('/api/remotevideos', api.remoteVideos)
-  app.use('/api/pods', api.pods)
+  // Views routes
+  app.use('/', routes.views)
 
   // ----------- Tracker -----------
 
     if (err) throw err
     // Create/activate the webtorrent module
     webtorrent.create(function () {
+      function cleanForExit () {
+        utils.cleanForExit(webtorrent.app)
+      }
+
+      function exitGracefullyOnSignal () {
+        process.exit()
+      }
+
+      process.on('exit', cleanForExit)
+      process.on('SIGINT', exitGracefullyOnSignal)
+      process.on('SIGTERM', exitGracefullyOnSignal)
+
       // ----------- Make the server listening -----------
       server.listen(port, function () {
         videos.seedAll(function () {