Introduction
Introduction Statistics Contact Development Disclaimer Help
index.cgi - gemini2gopher-proxy - A gemini2gopher proxy CGI script for geomyida…
git clone git://bitreich.org/gemini2gopher-proxy git://enlrupgkhuxnvlhsf6lc3fzi…
Log
Files
Refs
Tags
README
LICENSE
---
index.cgi (3388B)
---
1 #!/bin/sh
2 #
3 # See LICENSE for copyright information.
4 #
5 # Gemini Proxy CGI script:
6 # https://gemini.circumlunar.space/docs/specification.gmi
7 #
8
9 search="$1"
10 arguments="$2"
11 host="$3"
12 port="$4"
13 traversal="$5"
14 selector="$6"
15
16 proxybase="/gemini/?"
17
18 case "${arguments}" in
19 gemini://*)
20 ;;
21 *)
22 exit 1
23 ;;
24 esac
25
26 geminihost="$(printf "%s\n" "${arguments}" | cut -d'/' -f 3)"
27 [ -z "${geminihost}" ] && exit 1
28 geminiport="$(printf "%s\n" "${geminihost}" | cut -d':' -f 2)"
29 [ "${geminiport}" = "${geminihost}" ] && geminiport="1965"
30
31 function untabtext() {
32 printf "%s\n" "$1" | sed 's,\t, ,g'
33 }
34
35 line0=""
36 printf "%s\r\n" "${arguments}" \
37 | socat - "openssl:${geminihost}:${geminiport},verify=0" \
38 | {
39 read -r line
40 line0="${line}"
41 line0meta="$(printf "%s\n" "${line0}" | cut -d' ' -f 2-)"
42 case "${line0}" in
43 1*)
44 # TODO: Add support for uri-encoded $search appending to
45 # URI.
46 printf "3search query input required\t\t\t\r\n"
47 exit 1
48 ;;
49 2*)
50 # Only fallthrough.
51 ;;
52 3*)
53 printf "3redirect to: %s\t\t\t\r\n" "${line0meta}"
54 exit 1
55 ;;
56 4*)
57 printf "3temporary failure\t\t\t\r\n"
58 exit 1
59 ;;
60 5*)
61 printf "3permanent failure\t\t\t\r\n"
62 exit 1
63 ;;
64 6*)
65 printf "3client certificate required\t\t\t\r\n"
66 exit 1
67 ;;
68 *)
69 printf "3unknown error\t\t\t\r\n"
70 exit 1
71 ;;
72 esac
73
74 case "${line0meta}" in
75 text/gemini*)
76 preformat=0
77 while read -r line;
78 do
79 case "${line}" in
80 "\`\`\`"*)
81 if [ $preformat -eq 1 ];
82 then
83 preformat=0
84 else
85 preformat=1
86 fi
87 ;;
88 "=>"*)
89 if [ $preformat -eq 1 ];
90 then
91 printf "i%s\tErr\t%s\t%s\r\n" "$…
92 "${host}" "${port}"
93 continue
94 fi
95 geminiuri="$(printf "%s\n" "${line}" \
96 | sed -e 's,^=>[ \t]*\([^ \t]*\)…
97 geminidesc="$(printf "%s\n" "${line}" \
98 | sed -e 's,^=>[ \t]*[^ \t]*[ \t…
99
100 gophertype="9"
101 gopherhost="${host}"
102 gopherport="${port}"
103 gopherselector=""
104 if [ -z "${geminidesc}" ];
105 then
106 gopherdesc="${geminiuri}"
107 else
108 gopherdesc="${geminidesc}"
109 fi
110 case "${geminiuri}" in
111 gopher*)
112 gopherhost="$(printf "%s\n" "${g…
113 [ -z "${geminihost}" ] && exit 1
114 gopherport="$(printf "%s\n" "${g…
115 [ "${gopherport}" = "${gopherhos…
116 gopherrequest="$(printf "%s\n" "…
117 # Gemini does not properly suppo…
118 # gopher query requests.
119 # TODO: Fix gemini protocol.
120 gophertype="$(printf "%s\n" "${g…
121 gopherselector="$(printf "%s\n" …
122 ;;
123 gemini*)
124 gophertype="1"
125 gopherselector="${proxybase}${ge…
126 ;;
127 *)
128 gophertype="h"
129 gopherselector="URL:${geminiuri}"
130 ;;
131 esac
132 printf "%s%s\t%s\t%s\t%s\r\n" \
133 "$gophertype" \
134 "$(untabtext "$gopherdesc")" \
135 "$gopherselector" \
136 "$gopherhost" \
137 "$gopherport"
138 ;;
139 *)
140 if [ $preformat -eq 1 ];
141 then
142 printf "i%s\tErr\t%s\t%s\r\n" "$…
143 "${host}" "${port}"
144 else
145 {
146 printf "%s\n" "${line}" \
147 | par-format -w …
148 } \
149 | while read -r line;
150 do
151 printf "i%s\tErr\t%s\t%s…
152 "$host" "$port"
153 done
154 fi
155 ;;
156 esac
157 done
158 ;;
159 esac
160 cat
161 }
162
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.