]>
Commit | Line | Data |
---|---|---|
1 | import cors from 'cors' | |
2 | import express from 'express' | |
3 | import { OBJECT_STORAGE_PROXY_PATHS } from '@server/initializers/constants' | |
4 | import { proxifyHLS, proxifyWebTorrentFile } from '@server/lib/object-storage' | |
5 | import { | |
6 | asyncMiddleware, | |
7 | ensureCanAccessPrivateVideoHLSFiles, | |
8 | ensureCanAccessVideoPrivateWebTorrentFiles, | |
9 | ensurePrivateObjectStorageProxyIsEnabled, | |
10 | optionalAuthenticate | |
11 | } from '@server/middlewares' | |
12 | import { doReinjectVideoFileToken } from './shared/m3u8-playlist' | |
13 | ||
14 | const objectStorageProxyRouter = express.Router() | |
15 | ||
16 | objectStorageProxyRouter.use(cors()) | |
17 | ||
18 | objectStorageProxyRouter.get(OBJECT_STORAGE_PROXY_PATHS.PRIVATE_WEBSEED + ':filename', | |
19 | ensurePrivateObjectStorageProxyIsEnabled, | |
20 | optionalAuthenticate, | |
21 | asyncMiddleware(ensureCanAccessVideoPrivateWebTorrentFiles), | |
22 | asyncMiddleware(proxifyWebTorrentController) | |
23 | ) | |
24 | ||
25 | objectStorageProxyRouter.get(OBJECT_STORAGE_PROXY_PATHS.STREAMING_PLAYLISTS.PRIVATE_HLS + ':videoUUID/:filename', | |
26 | ensurePrivateObjectStorageProxyIsEnabled, | |
27 | optionalAuthenticate, | |
28 | asyncMiddleware(ensureCanAccessPrivateVideoHLSFiles), | |
29 | asyncMiddleware(proxifyHLSController) | |
30 | ) | |
31 | ||
32 | // --------------------------------------------------------------------------- | |
33 | ||
34 | export { | |
35 | objectStorageProxyRouter | |
36 | } | |
37 | ||
38 | function proxifyWebTorrentController (req: express.Request, res: express.Response) { | |
39 | const filename = req.params.filename | |
40 | ||
41 | return proxifyWebTorrentFile({ req, res, filename }) | |
42 | } | |
43 | ||
44 | function proxifyHLSController (req: express.Request, res: express.Response) { | |
45 | const playlist = res.locals.videoStreamingPlaylist | |
46 | const video = res.locals.onlyVideo | |
47 | const filename = req.params.filename | |
48 | ||
49 | const reinjectVideoFileToken = filename.endsWith('.m3u8') && doReinjectVideoFileToken(req) | |
50 | ||
51 | return proxifyHLS({ | |
52 | req, | |
53 | res, | |
54 | playlist, | |
55 | video, | |
56 | filename, | |
57 | reinjectVideoFileToken | |
58 | }) | |
59 | } |