+ if (isVideo) {
+ const video = await loadVideo(elementId, 'all')
+
+ if (!video) {
+ return res.fail({
+ status: HttpStatusCode.NOT_FOUND_404,
+ message: 'Video not found'
+ })
+ }
+
+ if (
+ video.privacy === VideoPrivacy.PUBLIC ||
+ (video.privacy === VideoPrivacy.UNLISTED && isUUIDValid(elementId) === true)
+ ) {
+ res.locals.videoAll = video
+ return next()
+ }
+
+ return res.fail({
+ status: HttpStatusCode.FORBIDDEN_403,
+ message: 'Video is not publicly available'
+ })
+ }
+
+ // Is playlist
+
+ const videoPlaylist = await VideoPlaylistModel.loadWithAccountAndChannelSummary(elementId, undefined)
+ if (!videoPlaylist) {
+ return res.fail({
+ status: HttpStatusCode.NOT_FOUND_404,
+ message: 'Video playlist not found'
+ })
+ }
+
+ if (
+ videoPlaylist.privacy === VideoPlaylistPrivacy.PUBLIC ||
+ (videoPlaylist.privacy === VideoPlaylistPrivacy.UNLISTED && isUUIDValid(elementId))
+ ) {
+ res.locals.videoPlaylistSummary = videoPlaylist
+ return next()
+ }
+
+ return res.fail({
+ status: HttpStatusCode.FORBIDDEN_403,
+ message: 'Playlist is not public'
+ })