diff --git a/SD_ROOT/wz_mini/web/cgi-bin/wz_mini_web.sh b/SD_ROOT/wz_mini/web/cgi-bin/wz_mini_web.sh index 86db43e..c863b13 100644 --- a/SD_ROOT/wz_mini/web/cgi-bin/wz_mini_web.sh +++ b/SD_ROOT/wz_mini/web/cgi-bin/wz_mini_web.sh @@ -7,29 +7,100 @@ hackver="unknown" hostname=$(uname -n) title="Wyze $camver on $camfirmware running wz_mini $hackver as $hostname" - echo "HTTP/1.1 200" +echo -e "Content-type: text/html\n\n" echo "" -#echo "Content Length: 100000" + + +shft() { + # https://stackoverflow.com/questions/3690936/change-file-name-suffixes-using-sed/3691279#3691279 + # Change this '8' to one less than your desired maximum rollover file. + # Must be in reverse order for renames to work (n..1, not 1..n). + for suff in {8..1} ; do + if [[ -f "$1.${suff}" ]] ; then + ((nxt = suff + 1)) + mv -f "$1.${suff}" "$1.${nxt}" + fi + done + mv -f "$1" "$1.1" +} + +#test for post +if [[ $REQUEST_METHOD = 'POST' ]]; then + if [ "$CONTENT_LENGTH" -gt 0 ]; then + read -n $CONTENT_LENGTH POST_DATA <&0 + while read line + do eval "echo ${line}" + done + fi + + #since ash does not handle arrays we create variables using eval + IFS='&' + for PAIR in $POST_DATA + do + K=$(echo $PAIR | cut -f1 -d=) + VA=$(echo $PAIR | cut -f2 -d=) + VB=\"${VA//%3A/:}\" + #echo "
$K=$VB
" + eval POST_$K=\"$VB\" + done + + + #switch back to going through the config file + IFS=$'\n' + output=wz_mini.conf.new + shft $output + + #name our output file + for ARGUMENT in $(cat $hack_ini) + do + #cycle through each line of the current config + + #copy through all comments + if [[ ${ARGUMENT:0:1} == "#" ]] ; then + #echo $ARGUMENT $'\n' + echo $ARGUMENT >> $output + else + #for non-comments check to see if we have an entry in the POST data by deciphering the key from the ini file and using eval for our fake array + KEY=$(echo $ARGUMENT | cut -f1 -d=) + test=$(eval echo \$POST_$KEY) + #echo "key was $KEY test was ... $test
" + if [[ "$test" ]]; then + #if in the fake array then we use the new value + #echo "
matched
" + echo $KEY="$test" >> $output + else + #if not in the fake array we use the current value + #echo "
key not found
" + echo $ARGUMENT >> $output + fi + + fi + done + + + +fi + function ini_to_html_free { - printf '
%s
' $1 $1 $2 + printf '
%s
' $1 $1 $2 } function ini_to_html_tf { printf '
%s
' $1 - printf '
' - if [[ "$2" == "true" ]]; then - printf ' True  ' $1 - printf ' False  ' $1 - else + printf '
' + if [[ "$2" == "true" ]]; then + printf ' True  ' $1 + printf ' False  ' $1 + else printf ' True  ' $1 printf ' False  ' $1 - fi - printf '
' + fi + printf '
' } @@ -38,27 +109,31 @@ echo -ne "'; echo -ne "" + + echo -ne '' echo -ne "

$title

"; -echo -ne '
' +echo -ne '' IFS=$'\n' for ARGUMENT in $(cat $hack_ini) do if [[ ${ARGUMENT:0:1} == "#" ]] ; then - echo -ne '
'$ARGUMENT'
' + echo -ne '
'$ARGUMENT'
' else KEY=$(echo $ARGUMENT | cut -f1 -d=) - VAL=$(echo $ARGUMENT | cut -f2 -d=) - VALUE=${VAL//\"/} + VAL=$(echo $ARGUMENT | cut -f2 -d=) + VALUE=${VAL//\"/} case "$VALUE" in - "true") ini_to_html_tf $KEY $VALUE ;; - "false") ini_to_html_tf $KEY $VALUE ;; - *) ini_to_html_free $KEY $VALUE + "true") ini_to_html_tf $KEY $VALUE ;; + "false") ini_to_html_tf $KEY $VALUE ;; + *) ini_to_html_free $KEY $VALUE esac fi done - + echo -ne '' echo -ne '
' + + echo -ne ''