commit 3e98e31466d32ac28b2211cac84717bc3fa1ea4a Author: Bryan Date: Fri Dec 18 23:56:03 2020 -0600 initial commit diff --git a/doorcontrol-main.cgi b/doorcontrol-main.cgi new file mode 100755 index 0000000..512d5c8 --- /dev/null +++ b/doorcontrol-main.cgi @@ -0,0 +1,55 @@ +#!/bin/bash + + +# Initialize +PASSWD_FILE="/usr/local/www/cgi-bin/passwd" +QUERY_STRING=$1 +LOCKFILE="./doorcontrol-main.lock" +. parse_query_string.sh +# + +# Exit if instance already running +if [ -e "$LOCKFILE" ]; then + exit 1 +else + touch "$LOCKFILE" +fi + +#echo "Content-type: text/html" +#echo + +# Check password +read passwd <"${PASSWD_FILE}" +if [ "${param[passwd]}" != "${passwd}" ]; then + echo "Password Incorrect: ${param[passwd]}" + echo "$QUERY_STRING" + rm "$LOCKFILE" + exit 1 +fi + +LABEL_FILE=$(grep -l pcf8574a /sys/class/gpio/*/*label) +BASE_FILE="$(dirname $LABEL_FILE)/base" +BASE=$(cat $BASE_FILE) + +for (( i=0; i<=7; i=i+1 )); do + PIN[$i]=$(($BASE+$i)) +done + +if [ ! -e "/sys/class/gpio/gpio${PIN[7]}/value" ]; then + echo "${PIN[7]}" > /sys/class/gpio/export +fi + +#echo "Waiting ..." +sleep ${param[delay]} + + +echo "out" > /sys/class/gpio/gpio${PIN[7]}/direction + +echo "0" > /sys/class/gpio/gpio${PIN[7]}/value +#echo "UNLOCKED" +sleep 2 +echo "1" > /sys/class/gpio/gpio${PIN[7]}/value + +#echo "

Unlocked

" + +rm "$LOCKFILE" diff --git a/doorcontrol-main.test b/doorcontrol-main.test new file mode 100755 index 0000000..70d9618 --- /dev/null +++ b/doorcontrol-main.test @@ -0,0 +1,57 @@ +#!/bin/bash + + +# Initialize +PASSWD_FILE="/usr/local/www/cgi-bin/passwd" +QUERY_STRING=$1 +LOCKFILE="./doorcontrol-main.lock" +. parse_query_string.sh +# + +# Exit if instance already running +if [ -e "$LOCKFILE" ]; then + exit 1 +else + touch "$LOCKFILE" +fi + +#echo "Content-type: text/html" +#echo +#echo "" + +# Check password +read passwd <"${PASSWD_FILE}" +if [ "${param[passwd]}" != "${passwd}" ]; then + echo "Password Incorrect: ${param[passwd]}" + echo "$QUERY_STRING" + rm "$LOCKFILE" + exit 1 +fi + +LABEL_FILE=$(grep -l pcf8574a /sys/class/gpio/*/*label) +BASE_FILE="$(dirname $LABEL_FILE)/base" +BASE=$(cat $BASE_FILE) + +for (( i=0; i<=7; i=i+1 )); do + PIN[$i]=$(($BASE+$i)) +done + +if [ ! -e "/sys/class/gpio/gpio${PIN[7]}/value" ]; then + echo "${PIN[7]}" > /sys/class/gpio/export +fi + +#echo "

Waiting ...

" +#sleep ${param[delay]} + + +#echo "out" > /sys/class/gpio/gpio${PIN[7]}/direction + +#echo "0" > /sys/class/gpio/gpio${PIN[7]}/value + +sleep 2 +#echo "1" > /sys/class/gpio/gpio${PIN[7]}/value + +#echo "

Unlocked

" + +#echo "" +rm "$LOCKFILE" diff --git a/doorstatus-main.cgi b/doorstatus-main.cgi new file mode 100755 index 0000000..c9515a0 --- /dev/null +++ b/doorstatus-main.cgi @@ -0,0 +1,6 @@ +#! /bin/bash + +echo "Content-type: text/html" +echo + +echo "LOCKED" diff --git a/env.cgi b/env.cgi new file mode 100755 index 0000000..8d63d29 --- /dev/null +++ b/env.cgi @@ -0,0 +1,10 @@ +#! /bin/bash + +echo "Content-type: html" +echo + +echo "" +echo "
"
+echo "$(env)"
+echo "
" +echo "" diff --git a/parse_query_string.sh b/parse_query_string.sh new file mode 100644 index 0000000..e2e8bf5 --- /dev/null +++ b/parse_query_string.sh @@ -0,0 +1,17 @@ +#! /bin/bash + +# This will parse the variable $QUERY_STRING. +# The values will be stored in an associative array. +# The value for a key will be stored in the array element `${param[]}` + +saveIFS=$IFS +IFS='=&' +XXQuery_string=($QUERY_STRING) +IFS=$saveIFS + +declare -A param +for ((i=0; i<${#XXQuery_string[@]}; i+=2)) +do + param[${XXQuery_string[i]}]=${XXQuery_string[i+1]} +done + diff --git a/passwd b/passwd new file mode 100755 index 0000000..f5c9027 --- /dev/null +++ b/passwd @@ -0,0 +1 @@ +c5S8De2TTPkDhkXREzSP diff --git a/reset-gpio b/reset-gpio new file mode 100755 index 0000000..8cf3d84 --- /dev/null +++ b/reset-gpio @@ -0,0 +1,20 @@ +#!/bin/bash + +LABEL_FILE=$(grep -l pcf8574a /sys/class/gpio/*/*label) +BASE_FILE="$(dirname $LABEL_FILE)/base" +BASE=$(cat $BASE_FILE) + +for (( i=0; i<=7; i=i+1 )); do + PIN[$i]=$(($BASE+$i)) + echo "${PIN[$i]}" + echo "${PIN[$i]}" > /sys/class/gpio/export + echo "out" > /sys/class/gpio/gpio${PIN[$i]}/direction + echo "1" > /sys/class/gpio/gpio${PIN[$i]}/value + +done + +#if [ ! -e "/sys/class/gpio/gpio${PIN[7]}/value" ]; then +# echo "${PIN[7]}" > /sys/class/gpio/unexport +#fi + + diff --git a/test.cgi b/test.cgi new file mode 100755 index 0000000..b4131e2 --- /dev/null +++ b/test.cgi @@ -0,0 +1,29 @@ +#! /bin/bash +saveIFS=$IFS +IFS='=&' +XXQuery_string=($QUERY_STRING) +IFS=$saveIFS + +declare -A param +for ((i=0; i<${#XXQuery_string[@]}; i+=2)) +do + param[${XXQuery_string[i]}]=${XXQuery_string[i+1]} +done + + + +echo "Content-type: text/html" +echo +echo "" +#echo "$REQUEST_METHOD" +#echo "$QUERY_STRING" +echo "" +echo "
"
+env
+echo "
" +echo "
"
+echo "delay: ${param[delay]}"
+echo "password: ${param[passwd]}"
+echo "
" +echo "" +echo "" diff --git a/unlock-main.cgi b/unlock-main.cgi new file mode 100755 index 0000000..70ce06d --- /dev/null +++ b/unlock-main.cgi @@ -0,0 +1,8 @@ +#! /bin/bash + +echo "Content-type: text/html" +echo + +#echo "Unlock" + +sudo /usr/local/www/cgi-bin/doorcontrol-main.cgi "$QUERY_STRING"