setDefaultVideosSort,
videosCustomGetValidator,
videosGetValidator,
+ videoSourceGetValidator,
videosRemoveValidator,
videosSortValidator
} from '../../../middlewares'
import { rateVideoRouter } from './rate'
import { statsRouter } from './stats'
import { studioRouter } from './studio'
+import { tokenRouter } from './token'
import { transcodingRouter } from './transcoding'
import { updateRouter } from './update'
import { uploadRouter } from './upload'
videosRouter.use('/', updateRouter)
videosRouter.use('/', filesRouter)
videosRouter.use('/', transcodingRouter)
+videosRouter.use('/', tokenRouter)
videosRouter.get('/categories',
openapiOperationDoc({ operationId: 'getCategories' }),
asyncMiddleware(listVideos)
)
+// TODO: remove, deprecated in 5.0 now we send the complete description in VideoDetails
videosRouter.get('/:id/description',
openapiOperationDoc({ operationId: 'getVideoDesc' }),
asyncMiddleware(videosGetValidator),
asyncMiddleware(getVideoDescription)
)
+
+videosRouter.get('/:id/source',
+ openapiOperationDoc({ operationId: 'getVideoSource' }),
+ authenticate,
+ asyncMiddleware(videoSourceGetValidator),
+ getVideoSource
+)
+
videosRouter.get('/:id',
openapiOperationDoc({ operationId: 'getVideo' }),
optionalAuthenticate,
asyncMiddleware(videosCustomGetValidator('for-api')),
asyncMiddleware(checkVideoFollowConstraints),
- getVideo
+ asyncMiddleware(getVideo)
)
videosRouter.delete('/:id',
res.json(VIDEO_PRIVACIES)
}
-function getVideo (_req: express.Request, res: express.Response) {
- const video = res.locals.videoAPI
+async function getVideo (_req: express.Request, res: express.Response) {
+ const videoId = res.locals.videoAPI.id
+ const userId = res.locals.oauth?.token.User.id
+
+ const video = await Hooks.wrapObject(res.locals.videoAPI, 'filter:api.video.get.result', { id: videoId, userId })
if (video.isOutdated()) {
- JobQueue.Instance.createJob({ type: 'activitypub-refresher', payload: { type: 'video', url: video.url } })
+ JobQueue.Instance.createJobAsync({ type: 'activitypub-refresher', payload: { type: 'video', url: video.url } })
}
return res.json(video.toFormattedDetailsJSON())
return res.json({ description })
}
+function getVideoSource (req: express.Request, res: express.Response) {
+ return res.json(res.locals.videoSource.toFormattedJSON())
+}
+
async function listVideos (req: express.Request, res: express.Response) {
const serverActor = await getServerActor()