118 lines
3.2 KiB
TypeScript
118 lines
3.2 KiB
TypeScript
import { UserRight } from '@peertube/peertube-models'
|
|
import { isBooleanValid, toBooleanOrNull } from '@server/helpers/custom-validators/misc.js'
|
|
import { isPlayerChannelThemeSettingValid, isPlayerVideoThemeSettingValid } from '@server/helpers/custom-validators/player-settings.js'
|
|
import express from 'express'
|
|
import { body, query } from 'express-validator'
|
|
import { areValidationErrors, isValidVideoIdParam } from './shared/utils.js'
|
|
import { checkCanManageChannel } from './shared/video-channels.js'
|
|
import { checkCanManageVideo, checkCanSeeVideo, doesVideoExist } from './shared/videos.js'
|
|
|
|
export const getVideoPlayerSettingsValidator = [
|
|
isValidVideoIdParam('videoId'),
|
|
|
|
query('raw')
|
|
.optional()
|
|
.customSanitizer(toBooleanOrNull)
|
|
.custom(isBooleanValid),
|
|
|
|
async (req: express.Request, res: express.Response, next: express.NextFunction) => {
|
|
if (areValidationErrors(req, res)) return
|
|
|
|
const raw = req.query.raw === true
|
|
|
|
if (!await doesVideoExist(req.params.videoId, res, raw ? 'all' : 'only-video-and-blacklist')) return
|
|
|
|
const video = res.locals.onlyVideo || res.locals.videoAll
|
|
if (!await checkCanSeeVideo({ req, res, video, paramId: req.params.videoId })) return
|
|
|
|
if (raw === true) {
|
|
const user = res.locals.oauth?.token.User
|
|
|
|
if (
|
|
!await checkCanManageVideo({
|
|
user,
|
|
video: res.locals.videoAll,
|
|
right: UserRight.UPDATE_ANY_VIDEO,
|
|
req,
|
|
res,
|
|
checkIsLocal: true,
|
|
checkIsOwner: false
|
|
})
|
|
) return
|
|
}
|
|
|
|
return next()
|
|
}
|
|
]
|
|
|
|
export const getChannelPlayerSettingsValidator = [
|
|
query('raw')
|
|
.optional()
|
|
.customSanitizer(toBooleanOrNull)
|
|
.custom(isBooleanValid),
|
|
|
|
async (req: express.Request, res: express.Response, next: express.NextFunction) => {
|
|
if (areValidationErrors(req, res)) return
|
|
|
|
if (req.query.raw === true) {
|
|
const user = res.locals.oauth?.token.User
|
|
|
|
if (
|
|
!await checkCanManageChannel({
|
|
channel: res.locals.videoChannel,
|
|
user,
|
|
req,
|
|
res,
|
|
checkCanManage: true,
|
|
checkIsOwner: false,
|
|
specialRight: UserRight.MANAGE_ANY_VIDEO_CHANNEL
|
|
})
|
|
) {
|
|
return false
|
|
}
|
|
}
|
|
|
|
return next()
|
|
}
|
|
]
|
|
|
|
export const updateVideoPlayerSettingsValidator = [
|
|
isValidVideoIdParam('videoId'),
|
|
|
|
async (req: express.Request, res: express.Response, next: express.NextFunction) => {
|
|
if (areValidationErrors(req, res)) return
|
|
|
|
if (!await doesVideoExist(req.params.videoId, res, 'all')) return
|
|
|
|
const user = res.locals.oauth.token.User
|
|
if (
|
|
!await checkCanManageVideo({
|
|
user,
|
|
video: res.locals.videoAll,
|
|
right: UserRight.UPDATE_ANY_VIDEO,
|
|
req,
|
|
res,
|
|
checkIsLocal: true,
|
|
checkIsOwner: false
|
|
})
|
|
) return
|
|
|
|
return next()
|
|
}
|
|
]
|
|
|
|
export const updatePlayerSettingsValidatorFactory = (type: 'video' | 'channel') => [
|
|
body('theme')
|
|
.custom(v => {
|
|
return type === 'video'
|
|
? isPlayerVideoThemeSettingValid(v)
|
|
: isPlayerChannelThemeSettingValid(v)
|
|
}),
|
|
|
|
(req: express.Request, res: express.Response, next: express.NextFunction) => {
|
|
if (areValidationErrors(req, res)) return
|
|
|
|
return next()
|
|
}
|
|
]
|