mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			106 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import express from 'express'
 | |
| 
 | |
| import { HttpStatusCode } from '../../../../shared/models/http/http-error-codes'
 | |
| import { getFormattedObjects } from '../../../helpers/utils'
 | |
| import {
 | |
|   asyncMiddleware,
 | |
|   asyncRetryTransactionMiddleware,
 | |
|   authenticate,
 | |
|   setDefaultPagination,
 | |
|   setDefaultSort
 | |
| } from '../../../middlewares'
 | |
| import {
 | |
|   listVideoPasswordValidator,
 | |
|   paginationValidator,
 | |
|   removeVideoPasswordValidator,
 | |
|   updateVideoPasswordListValidator,
 | |
|   videoPasswordsSortValidator
 | |
| } from '../../../middlewares/validators'
 | |
| import { VideoPasswordModel } from '@server/models/video/video-password'
 | |
| import { logger, loggerTagsFactory } from '@server/helpers/logger'
 | |
| import { Transaction } from 'sequelize'
 | |
| import { getVideoWithAttributes } from '@server/helpers/video'
 | |
| 
 | |
| 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)
 | |
| }
 |