#! /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] []'); 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 User agent'); println(' -p, --proxy 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();