Files
js-scripts/scripts/get.js
2025-04-05 16:57:26 +08:00

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();