improved style, beautified URL display
[confetti] / cgi.sh
1 #!/bin/zsh
2
3 declare -A _GET
4 declare -A _POST
5 declare -A _REF
6
7 cgi_get() {  # parse HTTP GET string
8   echo "$QUERY_STRING" |tr '&' '\n' |while read query; do
9     key="$(echo "$query" |sed -r 's:^([a-zA-Z0-9_-]*)=(.*)$:\1:')"
10     val="$(echo "$query" |sed -r 's:^([a-zA-Z0-9_-]*)=(.*)$:\2:')"
11     _GET["$key"]="$(echo -e "$(echo "$val" |sed 's:+: :g;s:%:\\x:g')")"
12   done
13 }
14
15 cgi_post() {  # parse HTTP POST string
16   sed -u 1q |tr '&' '\n' |while read query; do
17     key="$(echo "$query" |sed -r 's:^([a-zA-Z0-9_-]*)=(.*)$:\1:')"
18     val="$(echo "$query" |sed -r 's:^([a-zA-Z0-9_-]*)=(.*)$:\2:')"
19     value="$(echo -e "$(echo "$val" |sed 's:+: :g;s:%:\\x:g')")"
20     if [ -n "$_POST[\"$key\"]" ]; then
21       n=0
22       while [ -n "$_POST[\"$key$n\"]" ]; do n=$(($n + 1)); done
23       _POST["$key$n"]="$value"
24     else
25       _POST["$key"]="$value"
26     fi
27   done
28 }
29
30 cgi_refdata() { # Parse GET data from referer
31   echo "$HTTP_REFERER" |cut -d'?' -f2- |tr '&' '\n' |while read query; do
32     key="$(echo "$query" |sed -r 's:^([a-zA-Z0-9_-]*)=(.*)$:\1:')"
33     val="$(echo "$query" |sed -r 's:^([a-zA-Z0-9_-]*)=(.*)$:\2:')"
34     _REF["$key"]="$(echo -e "$(echo "$val" |sed 's:+: :g;s:%:\\x:g')")"
35   done
36 }