]>
git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server.js
4 // ----------- Node modules -----------
5 var bodyParser
= require('body-parser')
6 var express
= require('express')
7 var expressValidator
= require('express-validator')
8 var http
= require('http')
9 var morgan
= require('morgan')
10 var multer
= require('multer')
11 var path
= require('path')
12 var TrackerServer
= require('bittorrent-tracker').Server
13 var WebSocketServer
= require('ws').Server
15 // Create our main app
18 // ----------- Checker -----------
19 var checker
= require('./src/checker')
21 var miss
= checker
.checkConfig()
22 if (miss
.length
!== 0) {
23 // Do not use logger module
24 console
.error('Miss some configurations keys.', { miss: miss
})
28 checker
.createDirectoriesIfNotExist()
30 // ----------- Constants -----------
31 var utils
= require('./src/utils')
33 global
.API_VERSION
= 'v1'
34 global
.FRIEND_BASE_SCORE
= utils
.isTestInstance() ? 20 : 100
36 // ----------- PeerTube modules -----------
37 var config
= require('config')
38 var customValidators
= require('./src/customValidators')
39 var logger
= require('./src/logger')
40 var poolRequests
= require('./src/poolRequests')
41 var routes
= require('./routes')
42 var videos
= require('./src/videos')
43 var webtorrent
= require('./src/webTorrentNode')
46 var port
= config
.get('listen.port')
47 var uploads
= config
.get('storage.uploads')
49 // ----------- Command line -----------
51 // ----------- App -----------
54 app
.use(morgan('combined', { stream: logger
.stream
}))
56 app
.use(bodyParser
.json())
57 // For POST file requests
58 app
.use(multer({ dest: uploads
}))
59 app
.use(bodyParser
.urlencoded({ extended: false }))
60 // Validate some params for the API
61 app
.use(expressValidator({
62 customValidators: customValidators
65 // ----------- Views, routes and static files -----------
68 app
.use(require('connect-livereload')({
73 require('segfault-handler').registerHandler()
76 app
.use(express
.static(path
.join(__dirname
, '/public'), { maxAge: 0 }))
78 // Jade template from ./views directory
79 app
.set('views', path
.join(__dirname
, '/views'))
80 app
.set('view engine', 'jade')
83 var api_route
= '/api/' + global
.API_VERSION
84 app
.use(api_route
, routes
.api
)
87 app
.use('/', routes
.views
)
89 // ----------- Tracker -----------
91 var trackerServer
= new TrackerServer({
98 trackerServer
.on('error', function (err
) {
102 trackerServer
.on('warning', function (err
) {
106 var server
= http
.createServer(app
)
107 var wss
= new WebSocketServer({server: server
, path: '/tracker/socket'})
108 wss
.on('connection', function (ws
) {
109 trackerServer
.onWebSocketConnection(ws
)
112 // ----------- Errors -----------
114 // Catch 404 and forward to error handler
115 app
.use(function (req
, res
, next
) {
116 var err
= new Error('Not Found')
121 // Prod : no stacktraces leaked to user
122 if (process
.env
.NODE_ENV
=== 'production') {
123 app
.use(function (err
, req
, res
, next
) {
124 logger
.error('Error : ' + err
.message
, { error: err
})
125 res
.status(err
.status
|| 500)
126 res
.render('error', {
127 message: err
.message
,
132 app
.use(function (err
, req
, res
, next
) {
133 logger
.error('Error : ' + err
.message
, { error: err
})
134 res
.status(err
.status
|| 500)
135 res
.render('error', {
136 message: err
.message
,
142 // ----------- Create the certificates if they don't already exist -----------
143 utils
.createCertsIfNotExist(function (err
) {
145 // Create/activate the webtorrent module
146 webtorrent
.create(function () {
147 function cleanForExit () {
148 utils
.cleanForExit(webtorrent
.app
)
151 function exitGracefullyOnSignal () {
155 process
.on('exit', cleanForExit
)
156 process
.on('SIGINT', exitGracefullyOnSignal
)
157 process
.on('SIGTERM', exitGracefullyOnSignal
)
159 // ----------- Make the server listening -----------
160 server
.listen(port
, function () {
161 // Activate the pool requests
162 poolRequests
.activate()
164 videos
.seedAll(function () {
165 logger
.info('Seeded all the videos')
166 logger
.info('Server listening on port %d', port
)