]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/controllers/api/videos/files.ts
Support studio transcoding in peertube runner
[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'
1bb4c9ab 5import { removeAllWebTorrentFiles, removeHLSFile, removeHLSPlaylist, removeWebTorrentFile } from '@server/lib/video-file'
b46cf4b9 6import { VideoFileModel } from '@server/models/video/video-file'
ad5db104 7import { HttpStatusCode, UserRight } from '@shared/models'
b46cf4b9
C
8import {
9 asyncMiddleware,
10 authenticate,
ad5db104 11 ensureUserHasRight,
b46cf4b9 12 videoFileMetadataGetValidator,
1bb4c9ab 13 videoFilesDeleteHLSFileValidator,
b46cf4b9 14 videoFilesDeleteHLSValidator,
1bb4c9ab 15 videoFilesDeleteWebTorrentFileValidator,
795212f7
C
16 videoFilesDeleteWebTorrentValidator,
17 videosGetValidator
b46cf4b9 18} from '../../../middlewares'
1bb4c9ab 19import { updatePlaylistAfterFileChange } from '@server/lib/hls'
b46cf4b9
C
20
21const lTags = loggerTagsFactory('api', 'video')
22const filesRouter = express.Router()
23
24filesRouter.get('/:id/metadata/:videoFileId',
795212f7 25 asyncMiddleware(videosGetValidator),
b46cf4b9
C
26 asyncMiddleware(videoFileMetadataGetValidator),
27 asyncMiddleware(getVideoFileMetadata)
28)
29
30filesRouter.delete('/:id/hls',
31 authenticate,
ad5db104 32 ensureUserHasRight(UserRight.MANAGE_VIDEO_FILES),
b46cf4b9 33 asyncMiddleware(videoFilesDeleteHLSValidator),
1bb4c9ab
C
34 asyncMiddleware(removeHLSPlaylistController)
35)
36filesRouter.delete('/:id/hls/:videoFileId',
37 authenticate,
38 ensureUserHasRight(UserRight.MANAGE_VIDEO_FILES),
39 asyncMiddleware(videoFilesDeleteHLSFileValidator),
40 asyncMiddleware(removeHLSFileController)
b46cf4b9
C
41)
42
43filesRouter.delete('/:id/webtorrent',
44 authenticate,
ad5db104 45 ensureUserHasRight(UserRight.MANAGE_VIDEO_FILES),
b46cf4b9 46 asyncMiddleware(videoFilesDeleteWebTorrentValidator),
1bb4c9ab
C
47 asyncMiddleware(removeAllWebTorrentFilesController)
48)
49filesRouter.delete('/:id/webtorrent/:videoFileId',
50 authenticate,
51 ensureUserHasRight(UserRight.MANAGE_VIDEO_FILES),
52 asyncMiddleware(videoFilesDeleteWebTorrentFileValidator),
53 asyncMiddleware(removeWebTorrentFileController)
b46cf4b9
C
54)
55
56// ---------------------------------------------------------------------------
57
58export {
59 filesRouter
60}
61
62// ---------------------------------------------------------------------------
63
64async function getVideoFileMetadata (req: express.Request, res: express.Response) {
65 const videoFile = await VideoFileModel.loadWithMetadata(toInt(req.params.videoFileId))
66
67 return res.json(videoFile.metadata)
68}
69
1bb4c9ab
C
70// ---------------------------------------------------------------------------
71
72async function removeHLSPlaylistController (req: express.Request, res: express.Response) {
b46cf4b9
C
73 const video = res.locals.videoAll
74
75 logger.info('Deleting HLS playlist of %s.', video.url, lTags(video.uuid))
1bb4c9ab
C
76 await removeHLSPlaylist(video)
77
78 await federateVideoIfNeeded(video, false, undefined)
79
80 return res.sendStatus(HttpStatusCode.NO_CONTENT_204)
81}
82
83async function removeHLSFileController (req: express.Request, res: express.Response) {
84 const video = res.locals.videoAll
85 const videoFileId = +req.params.videoFileId
b46cf4b9 86
1bb4c9ab 87 logger.info('Deleting HLS file %d of %s.', videoFileId, video.url, lTags(video.uuid))
b46cf4b9 88
1bb4c9ab
C
89 const playlist = await removeHLSFile(video, videoFileId)
90 if (playlist) await updatePlaylistAfterFileChange(video, playlist)
b46cf4b9
C
91
92 await federateVideoIfNeeded(video, false, undefined)
93
94 return res.sendStatus(HttpStatusCode.NO_CONTENT_204)
95}
96
1bb4c9ab
C
97// ---------------------------------------------------------------------------
98
99async function removeAllWebTorrentFilesController (req: express.Request, res: express.Response) {
b46cf4b9
C
100 const video = res.locals.videoAll
101
102 logger.info('Deleting WebTorrent files of %s.', video.url, lTags(video.uuid))
103
1bb4c9ab
C
104 await removeAllWebTorrentFiles(video)
105 await federateVideoIfNeeded(video, false, undefined)
106
107 return res.sendStatus(HttpStatusCode.NO_CONTENT_204)
108}
109
110async function removeWebTorrentFileController (req: express.Request, res: express.Response) {
111 const video = res.locals.videoAll
112
113 const videoFileId = +req.params.videoFileId
114 logger.info('Deleting WebTorrent file %d of %s.', videoFileId, video.url, lTags(video.uuid))
b46cf4b9 115
1bb4c9ab 116 await removeWebTorrentFile(video, videoFileId)
b46cf4b9
C
117 await federateVideoIfNeeded(video, false, undefined)
118
119 return res.sendStatus(HttpStatusCode.NO_CONTENT_204)
120}