aboutsummaryrefslogtreecommitdiffhomepage
path: root/server/helpers
diff options
context:
space:
mode:
authorChocobozzz <me@florianbigard.com>2018-10-01 12:00:05 +0200
committerChocobozzz <me@florianbigard.com>2018-10-01 12:00:05 +0200
commitcf9166cf2fb7b51a1137a259eed9338798c73500 (patch)
tree7cf4b5995d4a29cc335e1fd72c1572510f8432ad /server/helpers
parent2a27c451f78922107c3f056e7506be8a79b31e03 (diff)
downloadPeerTube-cf9166cf2fb7b51a1137a259eed9338798c73500.tar.gz
PeerTube-cf9166cf2fb7b51a1137a259eed9338798c73500.tar.zst
PeerTube-cf9166cf2fb7b51a1137a259eed9338798c73500.zip
Add timeout on youtube dl to cleaup files
Diffstat (limited to 'server/helpers')
-rw-r--r--server/helpers/webtorrent.ts12
-rw-r--r--server/helpers/youtube-dl.ts20
2 files changed, 22 insertions, 10 deletions
diff --git a/server/helpers/webtorrent.ts b/server/helpers/webtorrent.ts
index 924d630e7..ce35b87da 100644
--- a/server/helpers/webtorrent.ts
+++ b/server/helpers/webtorrent.ts
@@ -5,7 +5,7 @@ import { createWriteStream, ensureDir, remove } from 'fs-extra'
5import { CONFIG } from '../initializers' 5import { CONFIG } from '../initializers'
6import { dirname, join } from 'path' 6import { dirname, join } from 'path'
7 7
8async function downloadWebTorrentVideo (target: { magnetUri: string, torrentName?: string }, timeout?: number) { 8async function downloadWebTorrentVideo (target: { magnetUri: string, torrentName?: string }, timeout: number) {
9 const id = target.magnetUri || target.torrentName 9 const id = target.magnetUri || target.torrentName
10 let timer 10 let timer
11 11
@@ -50,12 +50,10 @@ async function downloadWebTorrentVideo (target: { magnetUri: string, torrentName
50 50
51 torrent.on('error', err => rej(err)) 51 torrent.on('error', err => rej(err))
52 52
53 if (timeout) { 53 timer = setTimeout(async () => {
54 timer = setTimeout(async () => { 54 return safeWebtorrentDestroy(webtorrent, torrentId, file ? { directoryPath, filepath: file.path } : undefined, target.torrentName)
55 return safeWebtorrentDestroy(webtorrent, torrentId, file ? { directoryPath, filepath: file.path } : undefined, target.torrentName) 55 .then(() => rej(new Error('Webtorrent download timeout.')))
56 .then(() => rej(new Error('Webtorrent download timeout.'))) 56 }, timeout)
57 }, timeout)
58 }
59 }) 57 })
60} 58}
61 59
diff --git a/server/helpers/youtube-dl.ts b/server/helpers/youtube-dl.ts
index 748c67e6c..70b4e1b78 100644
--- a/server/helpers/youtube-dl.ts
+++ b/server/helpers/youtube-dl.ts
@@ -4,7 +4,7 @@ import { logger } from './logger'
4import { generateVideoTmpPath } from './utils' 4import { generateVideoTmpPath } from './utils'
5import { join } from 'path' 5import { join } from 'path'
6import { root } from './core-utils' 6import { root } from './core-utils'
7import { ensureDir, writeFile } from 'fs-extra' 7import { ensureDir, writeFile, remove } from 'fs-extra'
8import * as request from 'request' 8import * as request from 'request'
9import { createWriteStream } from 'fs' 9import { createWriteStream } from 'fs'
10 10
@@ -39,8 +39,9 @@ function getYoutubeDLInfo (url: string, opts?: string[]): Promise<YoutubeDLInfo>
39 }) 39 })
40} 40}
41 41
42function downloadYoutubeDLVideo (url: string) { 42function downloadYoutubeDLVideo (url: string, timeout: number) {
43 const path = generateVideoTmpPath(url) 43 const path = generateVideoTmpPath(url)
44 let timer
44 45
45 logger.info('Importing youtubeDL video %s', url) 46 logger.info('Importing youtubeDL video %s', url)
46 47
@@ -49,10 +50,23 @@ function downloadYoutubeDLVideo (url: string) {
49 return new Promise<string>(async (res, rej) => { 50 return new Promise<string>(async (res, rej) => {
50 const youtubeDL = await safeGetYoutubeDL() 51 const youtubeDL = await safeGetYoutubeDL()
51 youtubeDL.exec(url, options, processOptions, err => { 52 youtubeDL.exec(url, options, processOptions, err => {
52 if (err) return rej(err) 53 clearTimeout(timer)
54
55 if (err) {
56 remove(path)
57 .catch(err => logger.error('Cannot delete path on YoutubeDL error.', { err }))
58
59 return rej(err)
60 }
53 61
54 return res(path) 62 return res(path)
55 }) 63 })
64
65 timer = setTimeout(async () => {
66 await remove(path)
67
68 return rej(new Error('YoutubeDL download timeout.'))
69 }, timeout)
56 }) 70 })
57} 71}
58 72