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'
6 import { HttpStatusCode, UserRight } from '@shared/models'
11 videoFileMetadataGetValidator,
12 videoFilesDeleteHLSValidator,
13 videoFilesDeleteWebTorrentValidator,
15 } from '../../../middlewares'
17 const lTags = loggerTagsFactory('api', 'video')
18 const filesRouter = express.Router()
20 filesRouter.get('/:id/metadata/:videoFileId',
21 asyncMiddleware(videosGetValidator),
22 asyncMiddleware(videoFileMetadataGetValidator),
23 asyncMiddleware(getVideoFileMetadata)
26 filesRouter.delete('/:id/hls',
28 ensureUserHasRight(UserRight.MANAGE_VIDEO_FILES),
29 asyncMiddleware(videoFilesDeleteHLSValidator),
30 asyncMiddleware(removeHLSPlaylist)
33 filesRouter.delete('/:id/webtorrent',
35 ensureUserHasRight(UserRight.MANAGE_VIDEO_FILES),
36 asyncMiddleware(videoFilesDeleteWebTorrentValidator),
37 asyncMiddleware(removeWebTorrentFiles)
40 // ---------------------------------------------------------------------------
46 // ---------------------------------------------------------------------------
48 async function getVideoFileMetadata (req: express.Request, res: express.Response) {
49 const videoFile = await VideoFileModel.loadWithMetadata(toInt(req.params.videoFileId))
51 return res.json(videoFile.metadata)
54 async function removeHLSPlaylist (req: express.Request, res: express.Response) {
55 const video = res.locals.videoAll
57 logger.info('Deleting HLS playlist of %s.', video.url, lTags(video.uuid))
59 const hls = video.getHLSPlaylist()
60 await video.removeStreamingPlaylistFiles(hls)
63 video.VideoStreamingPlaylists = video.VideoStreamingPlaylists.filter(p => p.id !== hls.id)
65 await federateVideoIfNeeded(video, false, undefined)
67 return res.sendStatus(HttpStatusCode.NO_CONTENT_204)
70 async function removeWebTorrentFiles (req: express.Request, res: express.Response) {
71 const video = res.locals.videoAll
73 logger.info('Deleting WebTorrent files of %s.', video.url, lTags(video.uuid))
75 for (const file of video.VideoFiles) {
76 await video.removeWebTorrentFileAndTorrent(file)
81 await federateVideoIfNeeded(video, false, undefined)
83 return res.sendStatus(HttpStatusCode.NO_CONTENT_204)