diff options
author | Green-Star <Green-Star@users.noreply.github.com> | 2017-04-26 21:22:10 +0200 |
---|---|---|
committer | Bigard Florian <florian.bigard@gmail.com> | 2017-04-26 21:22:10 +0200 |
commit | 198b205c10dba362b9ae1ef6895b29d7e0dd685f (patch) | |
tree | 3be413139784f7445e775cbecccc6091a738360b /server/controllers/api | |
parent | 00871a261787ae1ed8446861ba2bd5eea9faca6d (diff) | |
download | PeerTube-198b205c10dba362b9ae1ef6895b29d7e0dd685f.tar.gz PeerTube-198b205c10dba362b9ae1ef6895b29d7e0dd685f.tar.zst PeerTube-198b205c10dba362b9ae1ef6895b29d7e0dd685f.zip |
Add ability for an administrator to remove any video (#61)
* Add ability for an admin to remove every video on the pod.
* Server: add BlacklistedVideos relation.
* Server: Insert in BlacklistedVideos relation upon deletion of a video.
* Server: Modify BlacklistedVideos schema to add Pod id information.
* Server: Moving insertion of a blacklisted video from the `afterDestroy` hook into the process of deletion of a video.
To avoid inserting a video when it is removed on its origin pod.
When a video is removed on its origin pod, the `afterDestroy` hook is fire, but no request is made on the delete('/:videoId') interface.
Hence, we insert into `BlacklistedVideos` only on request on delete('/:videoId') (if requirements for insertion are met).
* Server: Add removeVideoFromBlacklist hook on deletion of a video.
We are going to proceed in another way :).
We will add a new route : /:videoId/blacklist to blacklist a video.
We do not blacklist a video upon its deletion now (to distinguish a video blacklist from a regular video delete)
When we blacklist a video, the video remains in the DB, so we don't have any concern about its update. It just doesn't appear in the video list.
When we remove a video, we then have to remove it from the blacklist too.
We could also remove a video from the blacklist to 'unremove' it and make it appear again in the video list (will be another feature).
* Server: Add handler for new route post(/:videoId/blacklist)
* Client: Add isBlacklistable method
* Client: Update isRemovableBy method.
* Client: Move 'Delete video' feature from the video-list to the video-watch module.
* Server: Exclude blacklisted videos from the video list
* Server: Use findAll() in BlacklistedVideos.list() method
* Server: Fix addVideoToBlacklist function.
* Client: Add blacklist feature.
* Server: Use JavaScript Standard Style.
* Server: In checkUserCanDeleteVideo, move the callback call inside the db callback function
* Server: Modify BlacklistVideo relation
* Server: Modifiy Videos methods.
* Server: Add checkVideoIsBlacklistable method
* Server: Rewrite addVideoToBlacklist method
* Server: Fix checkVideoIsBlacklistable method
* Server: Add return to addVideoToBlacklist method
Diffstat (limited to 'server/controllers/api')
-rw-r--r-- | server/controllers/api/videos.js | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/server/controllers/api/videos.js b/server/controllers/api/videos.js index 5e9ff482f..1f7d30eef 100644 --- a/server/controllers/api/videos.js +++ b/server/controllers/api/videos.js | |||
@@ -93,11 +93,13 @@ router.get('/:id', | |||
93 | validatorsVideos.videosGet, | 93 | validatorsVideos.videosGet, |
94 | getVideo | 94 | getVideo |
95 | ) | 95 | ) |
96 | |||
96 | router.delete('/:id', | 97 | router.delete('/:id', |
97 | oAuth.authenticate, | 98 | oAuth.authenticate, |
98 | validatorsVideos.videosRemove, | 99 | validatorsVideos.videosRemove, |
99 | removeVideo | 100 | removeVideo |
100 | ) | 101 | ) |
102 | |||
101 | router.get('/search/:value', | 103 | router.get('/search/:value', |
102 | validatorsVideos.videosSearch, | 104 | validatorsVideos.videosSearch, |
103 | validatorsPagination.pagination, | 105 | validatorsPagination.pagination, |
@@ -108,6 +110,13 @@ router.get('/search/:value', | |||
108 | searchVideos | 110 | searchVideos |
109 | ) | 111 | ) |
110 | 112 | ||
113 | router.post('/:id/blacklist', | ||
114 | oAuth.authenticate, | ||
115 | admin.ensureIsAdmin, | ||
116 | validatorsVideos.videosBlacklist, | ||
117 | addVideoToBlacklist | ||
118 | ) | ||
119 | |||
111 | // --------------------------------------------------------------------------- | 120 | // --------------------------------------------------------------------------- |
112 | 121 | ||
113 | module.exports = router | 122 | module.exports = router |
@@ -622,3 +631,19 @@ function reportVideoAbuse (req, res, finalCallback) { | |||
622 | return finalCallback(null) | 631 | return finalCallback(null) |
623 | }) | 632 | }) |
624 | } | 633 | } |
634 | |||
635 | function addVideoToBlacklist (req, res, next) { | ||
636 | const videoInstance = res.locals.video | ||
637 | |||
638 | db.BlacklistedVideo.create({ | ||
639 | videoId: videoInstance.id | ||
640 | }) | ||
641 | .asCallback(function (err) { | ||
642 | if (err) { | ||
643 | logger.error('Errors when blacklisting video ', { error: err }) | ||
644 | return next(err) | ||
645 | } | ||
646 | |||
647 | return res.type('json').status(204).end() | ||
648 | }) | ||
649 | } | ||