112 lines
4.1 KiB
JavaScript
112 lines
4.1 KiB
JavaScript
#! /usr/bin/env runjs
|
|
|
|
var argsEx = require('component-args.js');
|
|
var bytes = require('component-bytes.js');
|
|
var counter = require('component-counter.js');
|
|
var gpg = require('component-gpg-ex.js');
|
|
|
|
var URLEncoder = java.net.URLEncoder;
|
|
|
|
var DEFAULT_USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36';
|
|
|
|
var gpgEncryptedAuthToken = {/**LINES
|
|
-----BEGIN PGP MESSAGE-----
|
|
Comment: GPGTools - https://gpgtools.org
|
|
|
|
hQEMAwpgonLPA1NTAQf+MowR8XeAd6jtJhHE6s8FwmXyYEI1R8J3kEo+XBnUWXph
|
|
dVQYHUAj+lWl9Pd8YpJmImT+Qf9mseZSi0wbkUi6N1UJogwtx4sAu9szvLcEhYa2
|
|
68Oyl+AY8jdn608OKqXRwG8z4HVrzdFgyEBuyJ/GafDH+bXcLYNtROcb63FlMlhJ
|
|
zLymaJD85W3uKlmYqJ0/OHLxn+fruRvZz0ZxlN1w3lj8t0wqLk+cOcTVMZkpdiYD
|
|
BGj8fkS/OTQBBNACmsCJDoUdBEMSRpjU3z55Zn5EGK0R3uTkZfuo+pJjGaZEtz8m
|
|
kuM0Yxyvq38fzPC9zrGQKsyXBOH3B8/x7GqcNDEVRtJnAWDu4syv3FkiGAzyHiKZ
|
|
nEupU97rz+XL5fKU89i6+ttAAC+xIMkASAde/Z5CdOdGjwfjx3u7U+c8XmaAcQtE
|
|
ibIucc2d0dsCkynzket0EfqExEXj4NUqxmwIS118vKMZAwap3FnaxQ==
|
|
=fjt8
|
|
-----END PGP MESSAGE-----
|
|
*/};
|
|
|
|
var SITE_PROXY_MAP = {
|
|
"hatterink": "https://hatter.ink/pget.action?__auth_token={auth_token}&target={target}"
|
|
};
|
|
|
|
var main = () => {
|
|
var args = argsEx.parseDefARGs(['s', 'slient', 'S', 'skip-cert']);
|
|
|
|
var urllist = args.val('u', 'urllist');
|
|
var prefix = args.val('prefix');
|
|
var suffix = args.val('suffix');
|
|
|
|
if ((urllist == null) && (args.length < 1)) {
|
|
println('get.js [FLAGS] <URL> [<FILE NAME>]');
|
|
println(' -u, --urllist URL List');
|
|
println(' --prefix File prefix when using URL List');
|
|
println(' --suffix File suffix when using URL List');
|
|
println(' -s, --slient Slient mode');
|
|
println(' -S, --skip-cert Skip cert check');
|
|
println(' --agent <AGENT> User agent');
|
|
println(' -p, --proxy <SITE> Site, hatterink')
|
|
return;
|
|
}
|
|
|
|
if (urllist == null) {
|
|
downlaodURL(args, args[0], (args.length > 1)? args[1]: null);
|
|
} else {
|
|
var fl = __.rfile.from(urllist);
|
|
if (fl.notExists()) {
|
|
println('File list not exists: ' + urllist);
|
|
return;
|
|
}
|
|
var list = $ARRAY(fl.list()).filter((u) => {
|
|
return u.trim() != '';
|
|
});
|
|
list.forEach((u, i) => {
|
|
println('Processing ' + i + ' of ' + list.length + ':');
|
|
if ((prefix == null) && (suffix == null)) {
|
|
downlaodURL(args, u);
|
|
} else {
|
|
downlaodURL(args, u, (prefix || '') + $$.numFormat('0000').format(i) + (suffix || ''));
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
var downlaodURL = (args, url, fn) => {
|
|
var slient = args.flg('s', 'slient');
|
|
var skipCert = args.flg('S', 'skip-cert');
|
|
var agent = args.val('agent');
|
|
if (!/^http(s)?:\/\/.*/.test(url.toLowerCase())) {
|
|
println('URL should starts with http:// or https://');
|
|
return;
|
|
}
|
|
if (fn == null) {
|
|
var u = (url.contains('?')) ? url.substring(0, url.indexOf('?')) : url;
|
|
fn = URLEncoder.encode((u.contains('/')) ? u.substring(u.lastIndexOf('/') + 1) : u, 'UTF-8') || ('unknown-' + $$.date().millis());
|
|
}
|
|
|
|
var readlUrl = url;
|
|
var proxy = args.val('p', 'proxy');
|
|
if (proxy != null) {
|
|
var proxyUrl = SITE_PROXY_MAP[proxy];
|
|
if (proxyUrl == null) {
|
|
xprintln('[WARN] Unknown proxy: ' + proxy);
|
|
} else {
|
|
xprintln('[INFO] Using proxy: ' + proxy);
|
|
var authToken = gpg.decryptArmor(gpgEncryptedAuthToken);
|
|
readlUrl = proxyUrl.replace('{auth_token}', authToken).replace('{target}', encodeURIComponent(url));
|
|
}
|
|
}
|
|
|
|
if (!slient) { println('GET ' + url + ' -> ' + fn); }
|
|
var fos = new java.io.FileOutputStream(fn);
|
|
var len = $$.httpRequest()
|
|
.url(readlUrl)
|
|
.skipCertCheck(skipCert)
|
|
.addHeader('User-Agent', agent || DEFAULT_USER_AGENT)
|
|
.get(fos, (slient ? null : counter.getCounter2Bar()));
|
|
fos.close();
|
|
if (!slient) { println(); }
|
|
if (!slient) { println('File download finished, downloaded bytes: ' + bytes.showBytes(len)); }
|
|
};
|
|
|
|
main();
|