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