X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fcontrollers%2Fapi%2Fvideos%2Ffiles.ts;h=6d9c0b843a90c769a01de7367b0ee1b1db2b3357;hb=3545e72c686ff1725bbdfd8d16d693e2f4aa75a3;hp=2fe4b5a3f8bf1208ff30ad151f15b889f1fd3436;hpb=b46cf4b920984492df598c1b61179acfc7f6f22e;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/controllers/api/videos/files.ts b/server/controllers/api/videos/files.ts index 2fe4b5a3f..6d9c0b843 100644 --- a/server/controllers/api/videos/files.ts +++ b/server/controllers/api/videos/files.ts @@ -2,34 +2,55 @@ import express from 'express' import toInt from 'validator/lib/toInt' import { logger, loggerTagsFactory } from '@server/helpers/logger' import { federateVideoIfNeeded } from '@server/lib/activitypub/videos' +import { removeAllWebTorrentFiles, removeHLSFile, removeHLSPlaylist, removeWebTorrentFile } from '@server/lib/video-file' import { VideoFileModel } from '@server/models/video/video-file' -import { HttpStatusCode } from '@shared/models' +import { HttpStatusCode, UserRight } from '@shared/models' import { asyncMiddleware, authenticate, + ensureUserHasRight, videoFileMetadataGetValidator, + videoFilesDeleteHLSFileValidator, videoFilesDeleteHLSValidator, - videoFilesDeleteWebTorrentValidator + videoFilesDeleteWebTorrentFileValidator, + videoFilesDeleteWebTorrentValidator, + videosGetValidator } from '../../../middlewares' +import { updatePlaylistAfterFileChange } from '@server/lib/hls' const lTags = loggerTagsFactory('api', 'video') const filesRouter = express.Router() filesRouter.get('/:id/metadata/:videoFileId', + asyncMiddleware(videosGetValidator), asyncMiddleware(videoFileMetadataGetValidator), asyncMiddleware(getVideoFileMetadata) ) filesRouter.delete('/:id/hls', authenticate, + ensureUserHasRight(UserRight.MANAGE_VIDEO_FILES), asyncMiddleware(videoFilesDeleteHLSValidator), - asyncMiddleware(removeHLSPlaylist) + asyncMiddleware(removeHLSPlaylistController) +) +filesRouter.delete('/:id/hls/:videoFileId', + authenticate, + ensureUserHasRight(UserRight.MANAGE_VIDEO_FILES), + asyncMiddleware(videoFilesDeleteHLSFileValidator), + asyncMiddleware(removeHLSFileController) ) filesRouter.delete('/:id/webtorrent', authenticate, + ensureUserHasRight(UserRight.MANAGE_VIDEO_FILES), asyncMiddleware(videoFilesDeleteWebTorrentValidator), - asyncMiddleware(removeWebTorrentFiles) + asyncMiddleware(removeAllWebTorrentFilesController) +) +filesRouter.delete('/:id/webtorrent/:videoFileId', + authenticate, + ensureUserHasRight(UserRight.MANAGE_VIDEO_FILES), + asyncMiddleware(videoFilesDeleteWebTorrentFileValidator), + asyncMiddleware(removeWebTorrentFileController) ) // --------------------------------------------------------------------------- @@ -46,33 +67,53 @@ async function getVideoFileMetadata (req: express.Request, res: express.Response return res.json(videoFile.metadata) } -async function removeHLSPlaylist (req: express.Request, res: express.Response) { +// --------------------------------------------------------------------------- + +async function removeHLSPlaylistController (req: express.Request, res: express.Response) { const video = res.locals.videoAll logger.info('Deleting HLS playlist of %s.', video.url, lTags(video.uuid)) + await removeHLSPlaylist(video) + + await federateVideoIfNeeded(video, false, undefined) + + return res.sendStatus(HttpStatusCode.NO_CONTENT_204) +} - const hls = video.getHLSPlaylist() - await video.removeStreamingPlaylistFiles(hls) - await hls.destroy() +async function removeHLSFileController (req: express.Request, res: express.Response) { + const video = res.locals.videoAll + const videoFileId = +req.params.videoFileId + + logger.info('Deleting HLS file %d of %s.', videoFileId, video.url, lTags(video.uuid)) - video.VideoStreamingPlaylists = video.VideoStreamingPlaylists.filter(p => p.id !== hls.id) + const playlist = await removeHLSFile(video, videoFileId) + if (playlist) await updatePlaylistAfterFileChange(video, playlist) await federateVideoIfNeeded(video, false, undefined) return res.sendStatus(HttpStatusCode.NO_CONTENT_204) } -async function removeWebTorrentFiles (req: express.Request, res: express.Response) { +// --------------------------------------------------------------------------- + +async function removeAllWebTorrentFilesController (req: express.Request, res: express.Response) { const video = res.locals.videoAll logger.info('Deleting WebTorrent files of %s.', video.url, lTags(video.uuid)) - for (const file of video.VideoFiles) { - await video.removeWebTorrentFileAndTorrent(file) - await file.destroy() - } + await removeAllWebTorrentFiles(video) + await federateVideoIfNeeded(video, false, undefined) + + return res.sendStatus(HttpStatusCode.NO_CONTENT_204) +} + +async function removeWebTorrentFileController (req: express.Request, res: express.Response) { + const video = res.locals.videoAll + + const videoFileId = +req.params.videoFileId + logger.info('Deleting WebTorrent file %d of %s.', videoFileId, video.url, lTags(video.uuid)) - video.VideoFiles = [] + await removeWebTorrentFile(video, videoFileId) await federateVideoIfNeeded(video, false, undefined) return res.sendStatus(HttpStatusCode.NO_CONTENT_204)