]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/controllers/api/videos/files.ts
Update changelog
[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,
795212f7
C
13 videoFilesDeleteWebTorrentValidator,
14 videosGetValidator
b46cf4b9
C
15} from '../../../middlewares'
16
17const lTags = loggerTagsFactory('api', 'video')
18const filesRouter = express.Router()
19
20filesRouter.get('/:id/metadata/:videoFileId',
795212f7 21 asyncMiddleware(videosGetValidator),
b46cf4b9
C
22 asyncMiddleware(videoFileMetadataGetValidator),
23 asyncMiddleware(getVideoFileMetadata)
24)
25
26filesRouter.delete('/:id/hls',
27 authenticate,
ad5db104 28 ensureUserHasRight(UserRight.MANAGE_VIDEO_FILES),
b46cf4b9
C
29 asyncMiddleware(videoFilesDeleteHLSValidator),
30 asyncMiddleware(removeHLSPlaylist)
31)
32
33filesRouter.delete('/:id/webtorrent',
34 authenticate,
ad5db104 35 ensureUserHasRight(UserRight.MANAGE_VIDEO_FILES),
b46cf4b9
C
36 asyncMiddleware(videoFilesDeleteWebTorrentValidator),
37 asyncMiddleware(removeWebTorrentFiles)
38)
39
40// ---------------------------------------------------------------------------
41
42export {
43 filesRouter
44}
45
46// ---------------------------------------------------------------------------
47
48async 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
54async 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
70async 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}