From 4dcc83a01d928eb56c4e93cc0aeb59c78b7043bc Mon Sep 17 00:00:00 2001 From: Mid Favila Date: Wed, 26 Jan 2022 17:28:09 -0400 Subject: [PATCH] Update plumber with better (read: working) prefix cleanser. --- #plumber# | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ plumber | 2 +- 2 files changed, 134 insertions(+), 1 deletion(-) create mode 100755 #plumber# diff --git a/#plumber# b/#plumber# new file mode 100755 index 0000000..e6d96cb --- /dev/null +++ b/#plumber# @@ -0,0 +1,133 @@ +#!/bin/sh -e + +web_handler() +{ + # Choose a random invidious instance to distribute load. + # Good digital citizenship is important, you know. + rand_inst() + { + case $(($(rand)%6)) in + 0) printf "vid.puffyan.us" ;; + 1) printf "inv.riverside.rocks" ;; + 2) printf "invidious.kavin.rocks" ;; + 3) printf "invidious-us.kavin.rocks" ;; + 4) printf "invidious.osi.kr" ;; + 5) printf "invidio.xamh.de" ;; + esac + } + + case "${1}" in + *youtu*) exec Links "$(printf "%s" "${1}"|sed -ne \ + "s&\(http.*://\).*\(/.*\)&\1$(rand_inst)\2&p")" & ;; + *reddit*) exec Links "$(printf "%s" "${1}"|sed -ne \ + "s&\(http.*://\).*\(/.*/\)&\1libredd.it\2&p")" & ;; + *4chan.org*) exec Links "$(printf "%s" "${1}"|sed -ne \ + "s&4chan&4channel&p")" & ;; + *) exec Links "${1}" & ;; + esac +} + +edgecase() +{ + err() + { + printf "Plumber wasn't able to find a way to handle the following URI.\n%s\nError code: %s\nProbable reason: %s\n" "${1}" "${2}" "${3}"|xmessage -file - & + exit 1 + } + + case "${2}" in + 0) set -- "${1}" "${2}" "Some other error." ;; + 1) set -- "${1}" "${2}" "It doesn't exist on the local filesystem." ;; + 2) set -- "${1}" "${2}" "There was a parsing error." + esac + + err "${@}" +} + +cleanse_prefix() +{ + if [ "$(printf "%s" "${1}")" = 'f' ] + then + printf "%s\n" "$(printf "%s" "${1}"|sed -ne 's&file://\(.*\)&\1&p')" + else + printf "%s" "${1}" + fi +} + +cleanse_spaces() +{ + if [ "$(echo "${1}"|grep -c '%20')" = '1' ] + then + printf "%s\n" "${1}"|sed -e 's&%20& *&g' + else + printf "%s\n" "${1}" + fi +} + +cleanse_leftparen() +{ + if [ "$(echo "${1}"|grep -c '%28')" = '1' ] + then + printf "%s\n" "${1}"|sed -e 's&%28&(&g' + else + printf "%s\n" "${1}" + fi +} + +cleanse_rightparen() +{ + if [ "$(echo "${1}"|grep -c '%29')" = '1' ] then + printf "%s\n" "${1}"|sed -e 's&%29&)&g' + else + printf "%s\n" "${1}" + fi +} + + +local_handler() +{ + + + set -- "$(cleanse_prefix "${1}")" + set -- "$(cleanse_leftparen "${1}")" + set -- "$(cleanse_rightparen "${1}")" + + + if [ -e "${1}" ] + then + mime="$(file --mime-type -b "${1}")" + + case ${mime} in + *html*) exec Links "${1}" & ;; + text*) exec xless "${1}" & ;; + video*) exec fpv "${1}" & ;; + audio*) exec fpm "${1}" & ;; + image*) exec iview "${1}" & ;; + *pdf) exec gv "${1}" & ;; + *) set -- "${1}" "2" ;; #Abort. + esac + else + # Set the error code and throw an error. + set -- "${1}" "1" + edgecase "${@}" + fi +} + +# Commented lines will have support in the future. +case "$(printf "%s" "${1}"|cut -b 1,2,3,4)" in + # gopher) err "${@}" ;; + http) web_handler "${@}" ;; + file) local_handler "${@}" ;; + # ftp) err "${@}" ;; + # ssh) err "${@}" ;; + *) firstchar=$(printf "%s" "${1}"|cut -b1) + if [ "${firstchar}" = '~' ] || [ "${firstchar}" = '/' ] + then + local_handler "${@}" + else + set -- "${1}" "2" + edgecase "${@}" + fi +esac + +exit diff --git a/plumber b/plumber index c1ade2d..a69b677 100755 --- a/plumber +++ b/plumber @@ -46,7 +46,7 @@ edgecase() cleanse_prefix() { - if [ "$(printf "%s" "${1}")" = 'f' ] + if [ "$(printf "%s" "${1}"|cut -b1)" = 'f' ] then printf "%s\n" "$(printf "%s" "${1}"|sed -ne 's&file://\(.*\)&\1&p')" else