123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import express from 'express'
- import { Transaction } from 'sequelize'
- import { HttpStatusCode } from '@peertube/peertube-models'
- import { logger, loggerTagsFactory } from '@server/helpers/logger.js'
- import { getVideoWithAttributes } from '@server/helpers/video.js'
- import { VideoPasswordModel } from '@server/models/video/video-password.js'
- import { getFormattedObjects } from '../../../helpers/utils.js'
- import {
- asyncMiddleware,
- asyncRetryTransactionMiddleware,
- authenticate,
- setDefaultPagination,
- setDefaultSort
- } from '../../../middlewares/index.js'
- import {
- listVideoPasswordValidator,
- paginationValidator,
- removeVideoPasswordValidator,
- updateVideoPasswordListValidator,
- videoPasswordsSortValidator
- } from '../../../middlewares/validators/index.js'
- const lTags = loggerTagsFactory('api', 'video')
- const videoPasswordRouter = express.Router()
- videoPasswordRouter.get('/:videoId/passwords',
- authenticate,
- paginationValidator,
- videoPasswordsSortValidator,
- setDefaultSort,
- setDefaultPagination,
- asyncMiddleware(listVideoPasswordValidator),
- asyncMiddleware(listVideoPasswords)
- )
- videoPasswordRouter.put('/:videoId/passwords',
- authenticate,
- asyncMiddleware(updateVideoPasswordListValidator),
- asyncMiddleware(updateVideoPasswordList)
- )
- videoPasswordRouter.delete('/:videoId/passwords/:passwordId',
- authenticate,
- asyncMiddleware(removeVideoPasswordValidator),
- asyncRetryTransactionMiddleware(removeVideoPassword)
- )
- // ---------------------------------------------------------------------------
- export {
- videoPasswordRouter
- }
- // ---------------------------------------------------------------------------
- async function listVideoPasswords (req: express.Request, res: express.Response) {
- const options = {
- videoId: res.locals.videoAll.id,
- start: req.query.start,
- count: req.query.count,
- sort: req.query.sort
- }
- const resultList = await VideoPasswordModel.listPasswords(options)
- return res.json(getFormattedObjects(resultList.data, resultList.total))
- }
- async function updateVideoPasswordList (req: express.Request, res: express.Response) {
- const videoInstance = getVideoWithAttributes(res)
- const videoId = videoInstance.id
- const passwordArray = req.body.passwords as string[]
- await VideoPasswordModel.sequelize.transaction(async (t: Transaction) => {
- await VideoPasswordModel.deleteAllPasswords(videoId, t)
- await VideoPasswordModel.addPasswords(passwordArray, videoId, t)
- })
- logger.info(
- `Video passwords for video with name %s and uuid %s have been updated`,
- videoInstance.name,
- videoInstance.uuid,
- lTags(videoInstance.uuid)
- )
- return res.sendStatus(HttpStatusCode.NO_CONTENT_204)
- }
- async function removeVideoPassword (req: express.Request, res: express.Response) {
- const videoInstance = getVideoWithAttributes(res)
- const password = res.locals.videoPassword
- await VideoPasswordModel.deletePassword(password.id)
- logger.info(
- 'Password with id %d of video named %s and uuid %s has been deleted.',
- password.id,
- videoInstance.name,
- videoInstance.uuid,
- lTags(videoInstance.uuid)
- )
- return res.sendStatus(HttpStatusCode.NO_CONTENT_204)
- }
|