From ffc6fe1dd80fe730be6c682dba9cd0dbd090eae7 Mon Sep 17 00:00:00 2001 From: supositware Date: Thu, 27 Aug 2020 19:57:27 +0200 Subject: [PATCH] Added proxy options --- app/Controllers/Http/DownloadController.js | 104 +++++++++++---------- resources/views/index.edge | 79 +++++++++------- 2 files changed, 103 insertions(+), 80 deletions(-) diff --git a/app/Controllers/Http/DownloadController.js b/app/Controllers/Http/DownloadController.js index e6d0654..79a443d 100644 --- a/app/Controllers/Http/DownloadController.js +++ b/app/Controllers/Http/DownloadController.js @@ -1,16 +1,18 @@ 'use strict' -const youtubedl = require('youtube-dl') -const fs = require('fs') -const ffmpeg = require('fluent-ffmpeg') +const youtubedl = require('youtube-dl'); +const fs = require('fs'); +const ffmpeg = require('fluent-ffmpeg'); const { version } = require('../../../package.json'); -const Antl = use('Antl') +const Antl = use('Antl'); +const proxy = require('../../../proxy/proxy.json') let viewCounter = 0; let files = []; let day; let month; let announcementArray; -let announcement +let announcement; +let defaultViewOption = { version: version, viewCounter: viewCounter, file: files, day: day, month: month, announcement: announcement, proxy: proxy } function formatBytes(bytes, decimals = 2) { // https://stackoverflow.com/a/18650828 @@ -28,19 +30,21 @@ function formatBytes(bytes, decimals = 2) { // https://stackoverflow.com/a/18650 class DownloadController { async index ({ view, request, locale }) { + console.log(defaultViewOption) viewCounter++; - // Coudln't find a cleaner way to make it change with the browser locale - announcementArray = [Antl.forLocale(locale).formatMessage('announcement.1'), Antl.forLocale(locale).formatMessage('announcement.2'), Antl.forLocale(locale).formatMessage('announcement.3'), Antl.forLocale(locale).formatMessage('announcement.4'), Antl.forLocale(locale).formatMessage('announcement.5'), Antl.forLocale(locale).formatMessage('announcement.6')]; + defaultViewOption.viewCounter = viewCounter; + // Couldn't find a cleaner way to make it change with the browser locale + announcementArray = [Antl.forLocale(locale).formatMessage('announcement.1'), Antl.forLocale(locale).formatMessage('announcement.2'), Antl.forLocale(locale).formatMessage('announcement.3'), Antl.forLocale(locale).formatMessage('announcement.4'), Antl.forLocale(locale).formatMessage('announcement.5'), Antl.forLocale(locale).formatMessage('announcement.6'), Antl.forLocale(locale).formatMessage('announcement.7')]; // Get random announcement - announcement = announcementArray[Math.floor(Math.random() * announcementArray.length)]; + defaultViewOption.announcement = announcementArray[Math.floor(Math.random() * announcementArray.length)]; // Get date for some event let today = new Date(); - day = today.getDay(); - month = today.getMonth(); + defaultViewOption.day = today.getDay(); + defaultViewOption.month = today.getMonth(); // If legacy link return - if (request.url() == '/legacy') return view.render('legacy', { version: version, viewCounter: viewCounter, day: day, month: month, announcement: announcement}); - + if (request.url() == '/legacy') return view.render('legacy', defaultViewOption); + files = []; let file = []; for (let f of fs.readdirSync('./public/uploads')) { @@ -50,21 +54,21 @@ class DownloadController { file = file.sort((a, b) => { if ((a || b).endsWith('.mp4') || (a || b).endsWith('.webm') || (a || b).endsWith('.mp3') || (a || b).endsWith('.flac')) { let time1 = fs.statSync(`./public/uploads/${b}`).ctime; - let time2 = fs.statSync(`./public/uploads/${a}`).ctime; + let time2 = fs.statSync(`./public/uploads/${a}`).ctime; if (time1 < time2) return -1; if (time1 > time2) return 1; } return 0; }).slice(0, 5) - - // Save space by deleting file that doesn't appear in the recent feed + + // Save space by deleting file that doesn't appear in the recent feed for (let f of fs.readdirSync('./public/uploads')) { if (!file.includes(f) && (f != 'hidden' && f != '.keep')) { fs.unlinkSync(`./public/uploads/${f}`); } } - for (let f of file) { + for (let f of file) { if (f.endsWith('.mp4') || f.endsWith('.webm')) { // Send file name, file size in MB relative path for the file let fileInfo = formatBytes(fs.statSync(`./public/uploads/${f}`).size).split(' '); @@ -75,7 +79,8 @@ class DownloadController { files.push({ name: f.split('.').slice(0, -1).join('.'), size: fileInfo[0], unit: fileInfo[1], date: fs.statSync(`./public/uploads/${f}`).ctime, location: `uploads/${f}`, ext: f.split('.').pop(), img: `/asset/music.png` }); } } - return view.render('index', { version: version, viewCounter: viewCounter, file: files, day: day, month: month, announcement: announcement}); + defaultViewOption.file = files; + return view.render('index', defaultViewOption); } async download({ view, request, response }) { @@ -91,18 +96,17 @@ class DownloadController { quality: request.input('quality'), format: request.input('format'), alt: request.input('alt'), - feed: request.input('feed') + feed: request.input('feed'), + proxy: request.input('proxy') } + console.log(data.proxy); + if (!data.url) { - return view.render(page, { - version: version, - viewCounter: viewCounter, - file: files, - day: day, month: month, announcement: announcement , - error: true, - errormsg: 'bruh moment, you didin\'t input a link.' - }); + let viewOption = {...defaultViewOption}; + viewOption.error = true; + viewOption.errormsg = 'bruh moment, you didin\'t input a link.'; + return view.render(page, viewOption); } // Youtube-dl quality settings @@ -125,36 +129,40 @@ class DownloadController { if (err); }); } - - return youtubedl.exec(data.url, ['--format=mp4', '-o', altFolder], {}, function(err, output) { + + let options = ['--format=mp4', '-o', altFolder]; + if (data.proxy !== "none") { + options.push('--proxy'); + options.push(data.proxy); + } + + return youtubedl.exec(data.url, options, {}, function(err, output) { if (err) { console.error(err); - return response.send(view.render(page, { - version: version, - viewCounter: viewCounter, - file: files, - day: day, month: month, announcement: announcement , - error: true, - errormsg: err - })); + let viewOption = {...defaultViewOption}; + viewOption.error = true; + viewOption.errormsg = err; + return view.render(page, viewOption); } - + return response.attachment(altFolder); }); } else { // Download as mp4 if possible - let video = youtubedl(data.url, ['--format=mp4', '-f', option]); + let options = ['--format=mp4', '-f', option]; + if (data.proxy !== "none") { + options.push('--proxy'); + options.push(data.proxy); + } + + let video = youtubedl(data.url, options); video.on('error', function(err) { console.error(err); - return response.send(view.render(page, { - version: version, - viewCounter: viewCounter, - file: files, - day: day, month: month, announcement: announcement , - error: true, - errormsg: err - })); + let viewOption = {...defaultViewOption}; + viewOption.error = true; + viewOption.errormsg = err; + return view.render(page, viewOption); }) let ext; @@ -167,8 +175,8 @@ class DownloadController { // If no title use the ID if (title == '_') title = `_${info.id}`; - // If user want to hide from the feed - if (data.feed == 'on') + // If user want to hide from the feed + if (data.feed == 'on') DLFile = `hidden/${title}.${ext}`; video.pipe(fs.createWriteStream(`./public/uploads/${DLFile}`)); diff --git a/resources/views/index.edge b/resources/views/index.edge index 06f054d..e235afb 100644 --- a/resources/views/index.edge +++ b/resources/views/index.edge @@ -33,7 +33,7 @@ @endif

{{ announcement }}

- + @endif @@ -45,26 +45,26 @@

{{ antl.formatMessage('messages.title') }} v{{ version }}

{{ csrfField() }} - +
- + - + - +
-
- + +
@@ -86,41 +86,56 @@
- - + +
- -
-
-
-
+ +
+ +
- + - -
+ +
+
+
+ Proxy options: + + @each(proxy in proxy) + + @endeach +
+
+
-
-
- -
-
+ +
+
@if(error)
@@ -133,7 +148,7 @@ @if(file != "") -

{{ antl.formatMessage('messages.recentFeed') }}

+

{{ antl.formatMessage('messages.recentFeed') }}

@each(file in file) @@ -152,7 +167,7 @@

{{ antl.formatMessage('messages.recentDownload') }}

-

+

@@ -185,12 +200,12 @@ @endif

{{ antl.formatMessage('messages.footer') }}

- @if(antl._locale == 'ar') + @if(antl._locale == 'ar')

{{ antl.formatMessage('messages.footer2p1') }} youtube-dl - {{ antl.formatMessage('messages.footer2p2') }} Haha yes & ExplosmRCG twitter bot - {{ antl.formatMessage('messages.footer2p3') }}: {{ viewCounter }} - {{ antl.formatMessage('messages.footer2p4') }} Supositware#1616 {{ antl.formatMessage('messages.footer2p5') }}

{{ antl.formatMessage('messages.footer3p1') }} Paypal {{ antl.formatMessage('messages.footer3p2') }} BAT {{ antl.formatMessage('messages.footer3p3') }} Brave Browser @else

{{ antl.formatMessage('messages.footer2p1') }} youtube-dl - {{ antl.formatMessage('messages.footer2p2') }} Haha yes & ExplosmRCG twitter bot - {{ antl.formatMessage('messages.footer2p3') }}: {{ viewCounter }} - {{ antl.formatMessage('messages.footer2p4') }} Supositware#1616 {{ antl.formatMessage('messages.footer2p5') }}

-

{{ antl.formatMessage('messages.footer3p1') }} Paypal {{ antl.formatMessage('messages.footer3p2') }} BAT {{ antl.formatMessage('messages.footer3p3') }} Brave Browser +

{{ antl.formatMessage('messages.footer3p1') }} Paypal {{ antl.formatMessage('messages.footer3p2') }} BAT {{ antl.formatMessage('messages.footer3p3') }} Brave Browser @endif

{{ antl.formatMessage('messages.footer4') }}

@@ -224,7 +239,7 @@ console.error(err); document.getElementById('msg').innerHTML = '
{{ antl.formatMessage('messages.errorCopy') }}
'; setTimeout(() => { - fadeout('notif') + fadeout('notif') }, 2000); }); document.getElementById('msg').innerHTML = '
{{ antl.formatMessage('messages.successCopy') }}
'; @@ -251,7 +266,7 @@ } } - // If user press enter do samething as if pressing the button + // If user press enter do same thing as if pressing the button let input = document.getElementById("URL"); input.addEventListener("keyup", function(event) { if (event.keyCode === 13) { @@ -260,4 +275,4 @@ } }); - \ No newline at end of file +