]>
Commit | Line | Data |
---|---|---|
8c308c2b C |
1 | ;(function () { |
2 | 'use strict' | |
3 | ||
f5a60a51 C |
4 | // ----------- Constantes ----------- |
5 | global.API_VERSION = 'v1' | |
6 | ||
8c308c2b C |
7 | // ----------- Node modules ----------- |
8 | var express = require('express') | |
9 | var path = require('path') | |
10 | var morgan = require('morgan') | |
11 | var bodyParser = require('body-parser') | |
12 | var multer = require('multer') | |
13 | var TrackerServer = require('bittorrent-tracker').Server | |
14 | var WebSocketServer = require('ws').Server | |
15 | var app = express() | |
16 | var http = require('http') | |
17 | ||
18 | // ----------- Checker ----------- | |
19 | var checker = require('./src/checker') | |
20 | ||
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 }) | |
25 | process.exit(0) | |
26 | } | |
27 | ||
28 | checker.createDirectories() | |
29 | ||
d148f3b9 | 30 | // ----------- PeerTube modules ----------- |
8c308c2b C |
31 | var config = require('config') |
32 | var logger = require('./src/logger') | |
33 | var routes = require('./routes') | |
f5a60a51 | 34 | var api = require('./routes/api/' + global.API_VERSION) |
8c308c2b C |
35 | var utils = require('./src/utils') |
36 | var videos = require('./src/videos') | |
37 | var webtorrent = require('./src/webTorrentNode') | |
38 | ||
39 | var compression | |
40 | var port = config.get('listen.port') | |
41 | var uploads = config.get('storage.uploads') | |
42 | ||
43 | // ----------- Command line ----------- | |
44 | ||
45 | // ----------- App ----------- | |
46 | app.use(morgan('combined', { stream: logger.stream })) | |
47 | app.use(bodyParser.json()) | |
48 | app.use(multer({ dest: uploads })) | |
49 | app.use(bodyParser.urlencoded({ extended: false })) | |
50 | ||
51 | // ----------- Views, routes and static files ----------- | |
52 | ||
53 | if (process.env.NODE_ENV === 'production') { | |
54 | // logger.log('Production : static files in dist/\n') | |
55 | ||
56 | // GZip compression | |
57 | compression = require('compression') | |
58 | app.use(compression()) | |
59 | ||
60 | // A month | |
61 | var maxAge = 86400000 * 30 | |
62 | ||
63 | // TODO | |
64 | app.get(/^\/(index|(partials\/[a-z\/]+))?$/, function (req, res, next) { | |
65 | if (req.url === '/') { | |
66 | req.url = '/index' | |
67 | } | |
68 | ||
69 | req.url += '.html' | |
70 | next() | |
71 | }) | |
72 | ||
73 | app.use(express.static(path.join(__dirname, '/dist/public'), { maxAge: maxAge })) | |
74 | app.use(express.static(path.join(__dirname, '/dist/views'), { maxAge: maxAge })) | |
75 | } else { | |
76 | // Livereload | |
77 | app.use(require('connect-livereload')({ | |
78 | port: 35729 | |
79 | })) | |
80 | ||
81 | require('segfault-handler').registerHandler() | |
82 | ||
83 | app.use(express.static(path.join(__dirname, '/public'), { maxAge: 0 })) | |
84 | ||
85 | // Jade template from ./views directory | |
86 | app.set('views', path.join(__dirname, '/views')) | |
87 | app.set('view engine', 'jade') | |
88 | ||
89 | // Views routes | |
90 | app.use('/', routes) | |
91 | } | |
92 | ||
93 | // ----------- Routes ----------- | |
f5a60a51 C |
94 | var api_route = '/api/' + global.API_VERSION |
95 | app.use(api_route + '/videos', api.videos) | |
96 | app.use(api_route + '/remotevideos', api.remoteVideos) | |
97 | app.use(api_route + '/pods', api.pods) | |
8c308c2b C |
98 | |
99 | // ----------- Tracker ----------- | |
100 | ||
101 | var trackerServer = new TrackerServer({ | |
102 | http: false, | |
103 | udp: false, | |
104 | ws: false, | |
105 | dht: false | |
106 | }) | |
107 | ||
108 | trackerServer.on('error', function (err) { | |
109 | logger.error(err) | |
110 | }) | |
111 | ||
112 | trackerServer.on('warning', function (err) { | |
113 | logger.error(err) | |
114 | }) | |
115 | ||
116 | var server = http.createServer(app) | |
117 | var wss = new WebSocketServer({server: server, path: '/tracker/socket'}) | |
118 | wss.on('connection', function (ws) { | |
119 | trackerServer.onWebSocketConnection(ws) | |
120 | }) | |
121 | ||
122 | // ----------- Errors ----------- | |
123 | ||
124 | // Catch 404 and forward to error handler | |
125 | app.use(function (req, res, next) { | |
126 | var err = new Error('Not Found') | |
127 | err.status = 404 | |
128 | next(err) | |
129 | }) | |
130 | ||
131 | // Prod : no stacktraces leaked to user | |
132 | if (process.env.NODE_ENV === 'production') { | |
133 | app.use(function (err, req, res, next) { | |
134 | logger.error('Error : ' + err.message, { error: err }) | |
135 | res.status(err.status || 500) | |
136 | res.render('error', { | |
137 | message: err.message, | |
138 | error: {} | |
139 | }) | |
140 | }) | |
141 | } else { | |
142 | app.use(function (err, req, res, next) { | |
143 | logger.error('Error : ' + err.message, { error: err }) | |
144 | res.status(err.status || 500) | |
145 | res.render('error', { | |
146 | message: err.message, | |
147 | error: err | |
148 | }) | |
149 | }) | |
150 | } | |
151 | ||
152 | // ----------- Create the certificates if they don't already exist ----------- | |
153 | utils.createCertsIfNotExist(function (err) { | |
154 | if (err) throw err | |
155 | // Create/activate the webtorrent module | |
156 | webtorrent.create(function () { | |
0ae2e7f7 C |
157 | function cleanForExit () { |
158 | utils.cleanForExit(webtorrent.app) | |
159 | } | |
160 | ||
161 | function exitGracefullyOnSignal () { | |
162 | process.exit() | |
163 | } | |
164 | ||
165 | process.on('exit', cleanForExit) | |
166 | process.on('SIGINT', exitGracefullyOnSignal) | |
167 | process.on('SIGTERM', exitGracefullyOnSignal) | |
168 | ||
8c308c2b C |
169 | // ----------- Make the server listening ----------- |
170 | server.listen(port, function () { | |
171 | videos.seedAll(function () { | |
172 | logger.info('Seeded all the videos') | |
173 | logger.info('Server listening on port %d', port) | |
174 | app.emit('ready') | |
175 | }) | |
176 | }) | |
177 | }) | |
178 | }) | |
179 | ||
180 | module.exports = app | |
181 | })() |