import { Hooks } from '@server/lib/plugins/hooks'
import { VideoModel } from '@server/models/video/video'
import { VideoLiveModel } from '@server/models/video/video-live'
+import { VideoLiveSessionModel } from '@server/models/video/video-live-session'
import {
HttpStatusCode,
LiveVideoCreate,
isValidVideoIdParam('videoId'),
async (req: express.Request, res: express.Response, next: express.NextFunction) => {
- logger.debug('Checking videoLiveGetValidator parameters', { parameters: req.params, user: res.locals.oauth.token.User.username })
-
if (areValidationErrors(req, res)) return
if (!await doesVideoExist(req.params.videoId, res, 'all')) return
- // Check if the user who did the request is able to get the live info
- const user = res.locals.oauth.token.User
- if (!checkUserCanManageVideo(user, res.locals.videoAll, UserRight.GET_ANY_LIVE, res, false)) return
-
const videoLive = await VideoLiveModel.loadByVideoId(res.locals.videoAll.id)
if (!videoLive) {
return res.fail({
const videoLiveAddValidator = getCommonVideoEditAttributes().concat([
body('channelId')
.customSanitizer(toIntOrNull)
- .custom(isIdValid).withMessage('Should have correct video channel id'),
+ .custom(isIdValid),
body('name')
.custom(isVideoNameValid).withMessage(
body('saveReplay')
.optional()
.customSanitizer(toBooleanOrNull)
- .custom(isBooleanValid).withMessage('Should have a valid saveReplay attribute'),
+ .custom(isBooleanValid).withMessage('Should have a valid saveReplay boolean'),
body('permanentLive')
.optional()
.customSanitizer(toBooleanOrNull)
- .custom(isBooleanValid).withMessage('Should have a valid permanentLive attribute'),
+ .custom(isBooleanValid).withMessage('Should have a valid permanentLive boolean'),
body('latencyMode')
.optional()
.customSanitizer(toIntOrNull)
- .custom(isLiveLatencyModeValid)
- .withMessage('Should have a valid latency mode attribute'),
+ .custom(isLiveLatencyModeValid),
async (req: express.Request, res: express.Response, next: express.NextFunction) => {
- logger.debug('Checking videoLiveAddValidator parameters', { parameters: req.body })
-
if (areValidationErrors(req, res)) return cleanUpReqFiles(req)
if (CONFIG.LIVE.ENABLED !== true) {
if (!await doesVideoChannelOfAccountExist(body.channelId, user, res)) return cleanUpReqFiles(req)
if (CONFIG.LIVE.MAX_INSTANCE_LIVES !== -1) {
- const totalInstanceLives = await VideoModel.countLocalLives()
+ const totalInstanceLives = await VideoModel.countLives({ remote: false, mode: 'not-ended' })
if (totalInstanceLives >= CONFIG.LIVE.MAX_INSTANCE_LIVES) {
cleanUpReqFiles(req)
body('saveReplay')
.optional()
.customSanitizer(toBooleanOrNull)
- .custom(isBooleanValid).withMessage('Should have a valid saveReplay attribute'),
+ .custom(isBooleanValid).withMessage('Should have a valid saveReplay boolean'),
body('latencyMode')
.optional()
.customSanitizer(toIntOrNull)
- .custom(isLiveLatencyModeValid)
- .withMessage('Should have a valid latency mode attribute'),
+ .custom(isLiveLatencyModeValid),
(req: express.Request, res: express.Response, next: express.NextFunction) => {
- logger.debug('Checking videoLiveUpdateValidator parameters', { parameters: req.body })
-
if (areValidationErrors(req, res)) return
const body: LiveVideoUpdate = req.body
- if (body.permanentLive && body.saveReplay) {
- return res.fail({ message: 'Cannot set this live as permanent while saving its replay' })
- }
-
if (hasValidSaveReplay(body) !== true) {
return res.fail({
status: HttpStatusCode.FORBIDDEN_403,
}
]
+const videoLiveListSessionsValidator = [
+ (req: express.Request, res: express.Response, next: express.NextFunction) => {
+ // Check the user can manage the live
+ const user = res.locals.oauth.token.User
+ if (!checkUserCanManageVideo(user, res.locals.videoAll, UserRight.GET_ANY_LIVE, res)) return
+
+ return next()
+ }
+]
+
+const videoLiveFindReplaySessionValidator = [
+ isValidVideoIdParam('videoId'),
+
+ async (req: express.Request, res: express.Response, next: express.NextFunction) => {
+ if (areValidationErrors(req, res)) return
+ if (!await doesVideoExist(req.params.videoId, res, 'id')) return
+
+ const session = await VideoLiveSessionModel.findSessionOfReplay(res.locals.videoId.id)
+ if (!session) {
+ return res.fail({
+ status: HttpStatusCode.NOT_FOUND_404,
+ message: 'No live replay found'
+ })
+ }
+
+ res.locals.videoLiveSession = session
+
+ return next()
+ }
+]
+
// ---------------------------------------------------------------------------
export {
videoLiveAddValidator,
videoLiveUpdateValidator,
+ videoLiveListSessionsValidator,
+ videoLiveFindReplaySessionValidator,
videoLiveGetValidator
}