]>
Commit | Line | Data |
---|---|---|
b46cf4b9 C |
1 | import express from 'express' |
2 | import toInt from 'validator/lib/toInt' | |
3 | import { logger, loggerTagsFactory } from '@server/helpers/logger' | |
4 | import { federateVideoIfNeeded } from '@server/lib/activitypub/videos' | |
5 | import { VideoFileModel } from '@server/models/video/video-file' | |
ad5db104 | 6 | import { HttpStatusCode, UserRight } from '@shared/models' |
b46cf4b9 C |
7 | import { |
8 | asyncMiddleware, | |
9 | authenticate, | |
ad5db104 | 10 | ensureUserHasRight, |
b46cf4b9 C |
11 | videoFileMetadataGetValidator, |
12 | videoFilesDeleteHLSValidator, | |
795212f7 C |
13 | videoFilesDeleteWebTorrentValidator, |
14 | videosGetValidator | |
b46cf4b9 C |
15 | } from '../../../middlewares' |
16 | ||
17 | const lTags = loggerTagsFactory('api', 'video') | |
18 | const filesRouter = express.Router() | |
19 | ||
20 | filesRouter.get('/:id/metadata/:videoFileId', | |
795212f7 | 21 | asyncMiddleware(videosGetValidator), |
b46cf4b9 C |
22 | asyncMiddleware(videoFileMetadataGetValidator), |
23 | asyncMiddleware(getVideoFileMetadata) | |
24 | ) | |
25 | ||
26 | filesRouter.delete('/:id/hls', | |
27 | authenticate, | |
ad5db104 | 28 | ensureUserHasRight(UserRight.MANAGE_VIDEO_FILES), |
b46cf4b9 C |
29 | asyncMiddleware(videoFilesDeleteHLSValidator), |
30 | asyncMiddleware(removeHLSPlaylist) | |
31 | ) | |
32 | ||
33 | filesRouter.delete('/:id/webtorrent', | |
34 | authenticate, | |
ad5db104 | 35 | ensureUserHasRight(UserRight.MANAGE_VIDEO_FILES), |
b46cf4b9 C |
36 | asyncMiddleware(videoFilesDeleteWebTorrentValidator), |
37 | asyncMiddleware(removeWebTorrentFiles) | |
38 | ) | |
39 | ||
40 | // --------------------------------------------------------------------------- | |
41 | ||
42 | export { | |
43 | filesRouter | |
44 | } | |
45 | ||
46 | // --------------------------------------------------------------------------- | |
47 | ||
48 | async function getVideoFileMetadata (req: express.Request, res: express.Response) { | |
49 | const videoFile = await VideoFileModel.loadWithMetadata(toInt(req.params.videoFileId)) | |
50 | ||
51 | return res.json(videoFile.metadata) | |
52 | } | |
53 | ||
54 | async function removeHLSPlaylist (req: express.Request, res: express.Response) { | |
55 | const video = res.locals.videoAll | |
56 | ||
57 | logger.info('Deleting HLS playlist of %s.', video.url, lTags(video.uuid)) | |
58 | ||
59 | const hls = video.getHLSPlaylist() | |
60 | await video.removeStreamingPlaylistFiles(hls) | |
61 | await hls.destroy() | |
62 | ||
63 | video.VideoStreamingPlaylists = video.VideoStreamingPlaylists.filter(p => p.id !== hls.id) | |
64 | ||
65 | await federateVideoIfNeeded(video, false, undefined) | |
66 | ||
67 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | |
68 | } | |
69 | ||
70 | async function removeWebTorrentFiles (req: express.Request, res: express.Response) { | |
71 | const video = res.locals.videoAll | |
72 | ||
73 | logger.info('Deleting WebTorrent files of %s.', video.url, lTags(video.uuid)) | |
74 | ||
75 | for (const file of video.VideoFiles) { | |
76 | await video.removeWebTorrentFileAndTorrent(file) | |
77 | await file.destroy() | |
78 | } | |
79 | ||
80 | video.VideoFiles = [] | |
81 | await federateVideoIfNeeded(video, false, undefined) | |
82 | ||
83 | return res.sendStatus(HttpStatusCode.NO_CONTENT_204) | |
84 | } |