From 8eb8ce1848da1b753112e47581a151af87a4ca1b Mon Sep 17 00:00:00 2001 From: "Charles E. Lehner" Date: Thu, 10 Sep 2020 19:57:10 -0400 Subject: Redirect automatically on input form submission Following behavior of Philip Linde's gemini.filter.dpi --- gemini.filter.dpi | 47 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 12 deletions(-) (limited to 'gemini.filter.dpi') diff --git a/gemini.filter.dpi b/gemini.filter.dpi index 802255d..237729e 100755 --- a/gemini.filter.dpi +++ b/gemini.filter.dpi @@ -133,7 +133,8 @@ serve_missing_status() { serve_input() { printf "\n" - prompt=$1 + url=$1 + prompt=$2 # TODO: html-escape prompt printf "Content-type: text/html\r\n\r\n" cat <<-EOF @@ -143,9 +144,9 @@ serve_input() { Input -
+

$prompt

- +
@@ -181,6 +182,24 @@ serve_redirect() { EOF } +serve_real_redirect() { + send_status_msg "Redirected" + printf "\n" + printf "Content-type: text/html\r\n\r\n" + # TODO: html-escape url + cat <<-EOF + + + + Redirecting to $url + + + + + + EOF +} + serve_error() { status=$1 meta=$2 @@ -221,6 +240,17 @@ serve_fail() { EOF } +serve_gemini_input() { + url=${1#gemini:input:} + + url_no_query=${url%%?q=*} + if [ "$url_no_query" != "$url" ]; then + url="${url_no_query}?${url#*?q=}" + fi + + serve_real_redirect "$url" +} + serve_gemini() { url=${1%%#*} url_noquery=${url%%\?*} @@ -237,14 +267,6 @@ serve_gemini() { port=${hostname##*:} url="gemini://$hostname/$path$query" - # replace "?_=" with "?". - # dillo can only submit forms with name=value items, but Gemini - # uses the whole querystring as a single string - url1=${url%%?_=*} - if [ "$url1" != "$url" ]; then - url="${url1}?${url#*?_=}" - fi - if [ "$host" = "$port" ]; then port=1965; fi send_status_msg "Sending request..." printf "%s\r\n" "$url" | openssl s_client -quiet -connect "$host:$port" | { @@ -252,7 +274,7 @@ serve_gemini() { send_status_msg "Status: $status" meta=$(echo "$meta" | sed 's/\s*$//') case "$status" in - 1*) serve_input "$meta";; + 1*) serve_input "$url" "$meta";; 2*) serve_success "$meta";; 3*) serve_redirect "$meta";; 4*) serve_error "$status" "$meta";; @@ -265,6 +287,7 @@ serve_gemini() { } case "$url" in + gemini:input:*) serve_gemini_input "$url";; gemini:*) serve_gemini "$url";; *) serve_404;; esac -- cgit v1.2.3