From 26469b1abdbddc12db8e55a26bd5068460b29240 Mon Sep 17 00:00:00 2001 From: Mid Favila Date: Wed, 26 Jan 2022 15:46:53 -0400 Subject: [PATCH] Rewrote plumber. Still in progress. --- plumber | 104 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 72 insertions(+), 32 deletions(-) diff --git a/plumber b/plumber index 408ffbb..e65ef82 100755 --- a/plumber +++ b/plumber @@ -1,41 +1,81 @@ #!/bin/sh -e -rand_inst() # Choose a random invidious instance to distribute load. - # Good digital citizenship is important, you know. +web_handler() { - case $(($(dd bs=2 count=1 if=/dev/random of=/dev/stdout | od - | \ - sed -ne 's& *& &gp' | cut -d ' ' -f2) % 3)) in - 0) printf "vid.puffyan.us" ;; - 1) printf "ytprivate.com" ;; - 2) printf "yewtu.be" ;; - esac + # 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 } -if [ "$(printf "%s" "${1}"|cut -b 1,2,3,4)" = "http" ] -then - 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 -else +local_handler() +{ + cleanse_prefix() + { + printf "%s" "$(echo "${1}" | sed -ne 's&file://&&p')" + } - mime=$(file --mime-type -b "${1}") + target="$(cleanse_prefix "${1}")" + mime="$(file --mime-type -b "${target}")" + + case ${mime} in + *html*) exec Links "${target}" & ;; + text*) exec xless "${target}" & ;; + video*) exec fpv "${target}" & ;; + audio*) exec fpm "${target}" & ;; + image*) exec iview "${target}" & ;; + *pdf) exec gv "${target}" & ;; + *) edgecase ;; + esac +} + + +edgecase() +{ + err() + { + printf "Plumber wasn't able to find a way to handle the following URI.\n%s\n" "${1}" + } + + # If first character is / or a ~ and it exists, we're dealing with local data. + firstchar=$(echo"${1}"|cut -b1) + if [ "${firstchar}" = '~' || "${firstchar}" = '/' ] + then + local_handler "${1}" + else + err "${1}" + 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 "${@}" ;; + *) edgecase "${2}" ;; +esac - 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}" & ;; - *) printf "Plumber ran into an edge case with the following string/mime\n%s"\ - "${1}"|xmessage -file - & ;; - esac -fi exit