diff --git a/client/src/app/videos/+video-edit/video-import.component.html b/client/src/app/videos/+video-edit/video-import.component.html
index 9d71a0717..d59c6a23a 100644
--- a/client/src/app/videos/+video-edit/video-import.component.html
+++ b/client/src/app/videos/+video-edit/video-import.component.html
@@ -4,6 +4,11 @@
+
+
diff --git a/server/controllers/api/videos/import.ts b/server/controllers/api/videos/import.ts
index 9761cdbcf..680d8665f 100644
--- a/server/controllers/api/videos/import.ts
+++ b/server/controllers/api/videos/import.ts
@@ -41,7 +41,7 @@ videoImportsRouter.post('/imports',
videoImportsRouter.delete('/imports/:id',
authenticate,
- videoImportDeleteValidator,
+ asyncMiddleware(videoImportDeleteValidator),
asyncRetryTransactionMiddleware(deleteVideoImport)
)
@@ -147,5 +147,13 @@ async function addVideoImport (req: express.Request, res: express.Response) {
}
async function deleteVideoImport (req: express.Request, res: express.Response) {
- // TODO: delete video import
+ await sequelizeTypescript.transaction(async t => {
+ const videoImport = res.locals.videoImport
+ const video = videoImport.Video
+
+ await videoImport.destroy({ transaction: t })
+ await video.destroy({ transaction: t })
+ })
+
+ return res.status(204).end()
}
diff --git a/server/helpers/custom-validators/video-imports.ts b/server/helpers/custom-validators/video-imports.ts
index 36c0559fd..d8b9bfaff 100644
--- a/server/helpers/custom-validators/video-imports.ts
+++ b/server/helpers/custom-validators/video-imports.ts
@@ -3,6 +3,9 @@ import 'multer'
import * as validator from 'validator'
import { CONSTRAINTS_FIELDS, VIDEO_IMPORT_STATES } from '../../initializers'
import { exists } from './misc'
+import * as express from 'express'
+import { VideoChannelModel } from '../../models/video/video-channel'
+import { VideoImportModel } from '../../models/video/video-import'
function isVideoImportTargetUrlValid (url: string) {
const isURLOptions = {
@@ -22,9 +25,25 @@ function isVideoImportStateValid (value: any) {
return exists(value) && VIDEO_IMPORT_STATES[ value ] !== undefined
}
+async function isVideoImportExist (id: number, res: express.Response) {
+ const videoImport = await VideoImportModel.loadAndPopulateVideo(id)
+
+ if (!videoImport) {
+ res.status(404)
+ .json({ error: 'Video import not found' })
+ .end()
+
+ return false
+ }
+
+ res.locals.videoImport = videoImport
+ return true
+}
+
// ---------------------------------------------------------------------------
export {
isVideoImportStateValid,
- isVideoImportTargetUrlValid
+ isVideoImportTargetUrlValid,
+ isVideoImportExist
}
diff --git a/server/lib/schedulers/youtube-dl-update-scheduler.ts b/server/lib/schedulers/youtube-dl-update-scheduler.ts
index b736f17ee..a2d919603 100644
--- a/server/lib/schedulers/youtube-dl-update-scheduler.ts
+++ b/server/lib/schedulers/youtube-dl-update-scheduler.ts
@@ -1,5 +1,5 @@
// Thanks: https://github.com/przemyslawpluta/node-youtube-dl/blob/master/lib/downloader.js
-// Use rewrote it to avoid sync calls
+// We rewrote it to avoid sync calls
import { AbstractScheduler } from './abstract-scheduler'
import { SCHEDULER_INTERVALS_MS } from '../../initializers'
diff --git a/server/middlewares/validators/video-imports.ts b/server/middlewares/validators/video-imports.ts
index 0ba759ff0..0dedcf803 100644
--- a/server/middlewares/validators/video-imports.ts
+++ b/server/middlewares/validators/video-imports.ts
@@ -4,9 +4,11 @@ import { isIdValid } from '../../helpers/custom-validators/misc'
import { logger } from '../../helpers/logger'
import { areValidationErrors } from './utils'
import { getCommonVideoAttributes } from './videos'
-import { isVideoImportTargetUrlValid } from '../../helpers/custom-validators/video-imports'
+import { isVideoImportTargetUrlValid, isVideoImportExist } from '../../helpers/custom-validators/video-imports'
import { cleanUpReqFiles } from '../../helpers/utils'
-import { isVideoChannelOfAccountExist, isVideoNameValid } from '../../helpers/custom-validators/videos'
+import { isVideoChannelOfAccountExist, isVideoNameValid, checkUserCanManageVideo } from '../../helpers/custom-validators/videos'
+import { VideoImportModel } from '../../models/video/video-import'
+import { UserRight } from '../../../shared'
const videoImportAddValidator = getCommonVideoAttributes().concat([
body('targetUrl').custom(isVideoImportTargetUrlValid).withMessage('Should have a valid video import target URL'),
@@ -32,10 +34,16 @@ const videoImportAddValidator = getCommonVideoAttributes().concat([
const videoImportDeleteValidator = [
param('id').custom(isIdValid).not().isEmpty().withMessage('Should have a valid id'),
- (req: express.Request, res: express.Response, next: express.NextFunction) => {
+ async (req: express.Request, res: express.Response, next: express.NextFunction) => {
logger.debug('Checking videoImportDeleteValidator parameters', { parameters: req.body })
if (areValidationErrors(req, res)) return
+ if (!await isVideoImportExist(req.params.id, res)) return
+
+ const user = res.locals.oauth.token.User
+ const videoImport: VideoImportModel = res.locals.videoImport
+
+ if (!await checkUserCanManageVideo(user, videoImport.Video, UserRight.UPDATE_ANY_VIDEO, res)) return
return next()
}