#!/bin/bash set -u declare ALT_LINK LINK declare -a browsers browsers=( firefox palemoon waterfox ) get_link_base() { echo "${1}"|awk -F/ '{print $1"//"$3}' } onionize_link() { local s1 s2 s1= s2= ALT_LINK="${LINK}" case "${LINK}" in *facebook.com*) s1=facebook.com s2=facebookcorewwwi.onion ALT_LINK="${LINK/facebook.com/facebookcorewwwi.onion}" ;; *www.prorepubica.org*) s1=www.propublica.org s2=p53lf57qovyuvwsc6xnrppyply3vtqm7l6pcobkmyqsiofyeznfu5uqd.onion ;; *riseup.net*) s1=riseup.net s2=vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd.onion ;; esac [[ -z ${s1} ]] || { ALT_LINK=${LINK/"${s1}"/"${s2}"} } } LINK="${1:-not set}" [[ -z "${LINK}" || "${LINK}" = "not set" ]] && { echo bad or missing link exit } # PRE Adjust domains for .onion addresses where possible # (some links are better changed early, others need POST work) onionize_link # IF link adjusted above, use new link [[ "${LINK}" = "${ALT_LINK}" ]] || { echo -e "\nNew alternate link: ${ALT_LINK}" LINK="${ALT_LINK}" } link_base=$(get_link_base "${LINK}") echo -e "\nFirst Link Base: ${link_base}" loc_lnk='not yet' while : do echo '------------------------------' # If download link redirects to a new Location, use that echo -en "\nGet location at $(date)\t\t" loc_lnk=$( curl -I4s "${LINK}" | \ awk '/^[Ll]ocation:/{$1="";gsub(/^[ \t]+|[\r]/, "");print}' ) # the following doesn't keep following the redirects #loc_lnk=$(curl -so/dev/null -Iw'%{redirect_url}\n' "${LINK}") [ -z "${loc_lnk}" ] && { echo -e "no more redirects" break } echo -e "${loc_lnk}" # fix relative link to full link if we've lost base link if [[ "${loc_lnk:0:1}" = "/" ]] then loc_lnk="${link_base}${loc_lnk}" else link_base=$(get_link_base "${loc_lnk}") echo -e "\nNew Link Base: ${link_base}" fi echo -e "\nlocation link: ${loc_lnk}" LINK="${loc_lnk}" done # POST Adjust domains for other special .onion addresses where possible # - this is just in case an early link wasn't able to be onionized # ... but a redirect link can onionize_link # IF link adjusted above, use new link [[ "${LINK}" = "${ALT_LINK}" ]] || { echo -e "\nNew alternate link: ${ALT_LINK}" LINK="${ALT_LINK}" } echo echo '------------------------------' echo echo "${LINK}" echo # Now remove all parameters passed with the URL # -- clear possible junk -- LINK=${LINK%%[?]*} echo "${LINK}" echo for browser in "${browsers[@]}" do printf "%15s \"%s\"\n\n" "${browser}" "${LINK}" done