mirror of https://github.com/Chocobozzz/PeerTube
Add ability to set to private a public/unlisted video
parent
6091983127
commit
46a6db245f
|
@ -199,11 +199,10 @@ async function addVideo (req: express.Request, res: express.Response) {
|
||||||
const video = new VideoModel(videoData)
|
const video = new VideoModel(videoData)
|
||||||
video.url = getVideoActivityPubUrl(video) // We use the UUID, so set the URL after building the object
|
video.url = getVideoActivityPubUrl(video) // We use the UUID, so set the URL after building the object
|
||||||
|
|
||||||
const videoFileData = {
|
const videoFile = new VideoFileModel({
|
||||||
extname: extname(videoPhysicalFile.filename),
|
extname: extname(videoPhysicalFile.filename),
|
||||||
size: videoPhysicalFile.size
|
size: videoPhysicalFile.size
|
||||||
}
|
})
|
||||||
const videoFile = new VideoFileModel(videoFileData)
|
|
||||||
|
|
||||||
if (videoFile.isAudio()) {
|
if (videoFile.isAudio()) {
|
||||||
videoFile.resolution = DEFAULT_AUDIO_RESOLUTION
|
videoFile.resolution = DEFAULT_AUDIO_RESOLUTION
|
||||||
|
@ -321,7 +320,9 @@ async function updateVideo (req: express.Request, res: express.Response) {
|
||||||
const videoFieldsSave = videoInstance.toJSON()
|
const videoFieldsSave = videoInstance.toJSON()
|
||||||
const oldVideoAuditView = new VideoAuditView(videoInstance.toFormattedDetailsJSON())
|
const oldVideoAuditView = new VideoAuditView(videoInstance.toFormattedDetailsJSON())
|
||||||
const videoInfoToUpdate: VideoUpdate = req.body
|
const videoInfoToUpdate: VideoUpdate = req.body
|
||||||
|
|
||||||
const wasPrivateVideo = videoInstance.privacy === VideoPrivacy.PRIVATE
|
const wasPrivateVideo = videoInstance.privacy === VideoPrivacy.PRIVATE
|
||||||
|
const wasNotPrivateVideo = videoInstance.privacy !== VideoPrivacy.PRIVATE
|
||||||
const wasUnlistedVideo = videoInstance.privacy === VideoPrivacy.UNLISTED
|
const wasUnlistedVideo = videoInstance.privacy === VideoPrivacy.UNLISTED
|
||||||
|
|
||||||
// Process thumbnail or create it from the video
|
// Process thumbnail or create it from the video
|
||||||
|
@ -357,9 +358,15 @@ async function updateVideo (req: express.Request, res: express.Response) {
|
||||||
const newPrivacy = parseInt(videoInfoToUpdate.privacy.toString(), 10)
|
const newPrivacy = parseInt(videoInfoToUpdate.privacy.toString(), 10)
|
||||||
videoInstance.privacy = newPrivacy
|
videoInstance.privacy = newPrivacy
|
||||||
|
|
||||||
|
// The video was private, and is not anymore -> publish it
|
||||||
if (wasPrivateVideo === true && newPrivacy !== VideoPrivacy.PRIVATE) {
|
if (wasPrivateVideo === true && newPrivacy !== VideoPrivacy.PRIVATE) {
|
||||||
videoInstance.publishedAt = new Date()
|
videoInstance.publishedAt = new Date()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The video was not private, but now it is -> we need to unfederate it
|
||||||
|
if (wasNotPrivateVideo === true && newPrivacy === VideoPrivacy.PRIVATE) {
|
||||||
|
await VideoModel.sendDelete(videoInstance, { transaction: t })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const videoInstanceUpdated = await videoInstance.save(sequelizeOptions)
|
const videoInstanceUpdated = await videoInstance.save(sequelizeOptions)
|
||||||
|
|
|
@ -111,18 +111,10 @@ const videosUpdateValidator = getCommonVideoEditAttributes().concat([
|
||||||
if (areErrorsInScheduleUpdate(req, res)) return cleanUpReqFiles(req)
|
if (areErrorsInScheduleUpdate(req, res)) return cleanUpReqFiles(req)
|
||||||
if (!await doesVideoExist(req.params.id, res)) return cleanUpReqFiles(req)
|
if (!await doesVideoExist(req.params.id, res)) return cleanUpReqFiles(req)
|
||||||
|
|
||||||
const video = res.locals.video
|
|
||||||
|
|
||||||
// Check if the user who did the request is able to update the video
|
// Check if the user who did the request is able to update the video
|
||||||
const user = res.locals.oauth.token.User
|
const user = res.locals.oauth.token.User
|
||||||
if (!checkUserCanManageVideo(user, res.locals.video, UserRight.UPDATE_ANY_VIDEO, res)) return cleanUpReqFiles(req)
|
if (!checkUserCanManageVideo(user, res.locals.video, UserRight.UPDATE_ANY_VIDEO, res)) return cleanUpReqFiles(req)
|
||||||
|
|
||||||
if (video.privacy !== VideoPrivacy.PRIVATE && req.body.privacy === VideoPrivacy.PRIVATE) {
|
|
||||||
cleanUpReqFiles(req)
|
|
||||||
return res.status(409)
|
|
||||||
.json({ error: 'Cannot set "private" a video that was not private.' })
|
|
||||||
}
|
|
||||||
|
|
||||||
if (req.body.channelId && !await doesVideoChannelOfAccountExist(req.body.channelId, user, res)) return cleanUpReqFiles(req)
|
if (req.body.channelId && !await doesVideoChannelOfAccountExist(req.body.channelId, user, res)) return cleanUpReqFiles(req)
|
||||||
|
|
||||||
return next()
|
return next()
|
||||||
|
|
|
@ -6,8 +6,7 @@ import { VideoPrivacy } from '../../../../shared/models/videos/video-privacy.enu
|
||||||
import {
|
import {
|
||||||
cleanupTests,
|
cleanupTests,
|
||||||
flushAndRunMultipleServers,
|
flushAndRunMultipleServers,
|
||||||
getVideosList,
|
getVideosList, getVideosListWithToken,
|
||||||
killallServers,
|
|
||||||
ServerInfo,
|
ServerInfo,
|
||||||
setAccessTokensToServers,
|
setAccessTokensToServers,
|
||||||
uploadVideo
|
uploadVideo
|
||||||
|
@ -153,6 +152,29 @@ describe('Test video privacy', function () {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('Should set this new video as private', async function () {
|
||||||
|
this.timeout(10000)
|
||||||
|
|
||||||
|
await updateVideo(servers[0].url, servers[0].accessToken, privateVideoId, { privacy: VideoPrivacy.PRIVATE })
|
||||||
|
|
||||||
|
await waitJobs(servers)
|
||||||
|
|
||||||
|
for (const server of servers) {
|
||||||
|
const res = await getVideosList(server.url)
|
||||||
|
|
||||||
|
expect(res.body.total).to.equal(0)
|
||||||
|
expect(res.body.data).to.have.lengthOf(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
const res = await getMyVideos(servers[0].url, servers[0].accessToken, 0, 5)
|
||||||
|
|
||||||
|
expect(res.body.total).to.equal(1)
|
||||||
|
expect(res.body.data).to.have.lengthOf(1)
|
||||||
|
expect(res.body.data[0].name).to.equal('super video public')
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
after(async function () {
|
after(async function () {
|
||||||
await cleanupTests(servers)
|
await cleanupTests(servers)
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in New Issue