#!/bin/zsh
-if [ -n "${CONTENT_LENGTH}" -a "${CONTENT_LENGTH}" -gt 0 ]; then
-(head -c "${CONTENT_LENGTH}"; echo)|sed 's:&:\n:g;s:\r::g' |while read line; do
- case "$line" in
- type[0-9]=neg)
- [ -z "$filters" ] && filters="!"
- [ -n "$filters" ] && egrep -q '(^|\^|\||!)$' <<<"$filters" || filters="${filters}^!"
- ;;
- type[0-9]=pos)
- egrep -q '(^|\^|\||!)$' <<<"$filters" || filters="${filters}^"
- ;;
- category=*)
- category="$(sed 's/^category=//;s/+/ /g;s/%/\\x/g' <<<"$line")"
- category="$(echo -e "${category}" |sed 's/\t/ /g;s/\r//g;s/\\/\\\\/g' |head -n1)"
- ;;
- filter=*)
- filter="$(sed 's/^filter=//;s/+/ /g;s/%/\\x/g' <<<"$line")"
- filter="$(echo -e "${filter}" |sed 's/\t/ /g;s/\r//g;s/\\/\\\\/g' |head -n1)"
- egrep -q '(^|\^|\||!)$' <<<"${filters}" || filters="${filters}|"
- filters="${filters}${filter}"
- ;;
- cfilter=*)
- cfilter="$(sed 's/^cfilter=//;s/+/ /g;s/%/\\x/g' <<<"$line")"
- cfilter="$(echo -e "${cfilter}" |sed 's/\t/ /g;s/\r//g;s/\\/\\\\/g' |head -n1)"
- egrep -q '(^|\^|\||!)$' <<<"${filters}" || filters="${filters}|"
- [ -n "$cfilter" ] && filters="${filters}${category}:${cfilter}"
- ;;
- o=Name) order=Name;;
- o=Date) order=Date;;
- o=Length) order=Length;;
- esac
+cgi_post
+order=$(validate "${_POST[o]}" 'Name|Length|Date' Name)
+
+for fn in {0..9}; do
+ category="$(validate "${_POST[category$fn]}" '[[:alnum:]_-]+' none)"
+
+ n=''; while [ -n "${_POST[cfilter${fn}_$n]}" ]; do
+ cfilter="$(validate "${_POST[cfilter${fn}_$n]}" '[[:alnum:]\?!\._=\(\)+-]+' '#')"
+
+ if [ -z "$n" ]; then
+ [ -n "$filters" ] && filters="${filters}^"
+ [ "${_POST[type$fn]}" = 'neg' ] && filters="${filters}!"
+ n=0
+ else
+ filters="${filters}|"
+ n=$(($n + 1))
+ fi
+ [ "$category" = "none" ] && filters="${filters}${cfilter}" \
+ || filters="${filters}${category}:${cfilter}"
+ done
done
-fi
echo "?o=${order}&f=${filters}" >>${_DATA}/meta/recent
echo -n "Location: ?o=${order}&f=${filters}\n\n"