init
This commit is contained in:
commit
01910e3f75
18 changed files with 6676 additions and 0 deletions
64
src/cgi-bin/kraut.space
Executable file
64
src/cgi-bin/kraut.space
Executable file
|
@ -0,0 +1,64 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
header() {
|
||||
printf 'Content-type: text/html\nStrict-Transport-Security: max-age=86400000\n\n'
|
||||
}
|
||||
|
||||
# extract parameters
|
||||
# tr -cd removes all characters, this prevents things like xss
|
||||
getp() {
|
||||
echo "$REQUEST_URI" | sed 's/.*?//' | sed 's/%20/ /g' \
|
||||
| tr '?&' '\n' | tr --complement --delete '0-9a-z_= \n' \
|
||||
| grep --extended-regexp "^$1=" | sed "s/^$1=//"
|
||||
}
|
||||
|
||||
ACCESS_LIST=/etc/tuer3.0/door_access_list
|
||||
secret="$(getp secret)"
|
||||
secret_length="$(echo "$secret" | wc --chars)"
|
||||
hashed_secret="$(echo "$secret" | sha512sum | cut -f1 -d\ )"
|
||||
cmd=$(getp cmd)
|
||||
|
||||
# check secret
|
||||
# the secrets file has to contain the hashes on a single line, comments are allowed on seperate lines
|
||||
# secrets can only contain the characters that are allowed in getp() with tr -cd
|
||||
if [ -z "$secret" ] \
|
||||
|| [ "$secret_length" -lt 30 ] \
|
||||
|| ! grep -v -e '^[ \t]*#' "$ACCESS_LIST" | grep -q ";$hashed_secret$"
|
||||
then
|
||||
header
|
||||
|
||||
CABBAGE=""
|
||||
[ -z "$secret" ] || CABBAGE="Ich bin mir nicht sicher. Mir scheint, du bist doch ein Kohlkopf oder Anderes!"
|
||||
|
||||
# shellcheck disable=SC2002
|
||||
cat ../tpl/secret.html | sed 's/<!--XCABBAGEX-->/'"$CABBAGE"'/'
|
||||
|
||||
exit
|
||||
fi
|
||||
|
||||
# control relais card
|
||||
if [ -n "$cmd" ]; then
|
||||
case "$cmd" in
|
||||
indoor_lock) keyble-sendcommand --address 00:1a:22:18:43:ed --user_id 3 --user_key 0e49fe15cffa15ed6520a224110f23e9 -c lock;;
|
||||
indoor_open) keyble-sendcommand --address 00:1a:22:18:43:ed --user_id 3 --user_key 0e49fe15cffa15ed6520a224110f23e9 -c open;;
|
||||
#outdoor_buzz) pin=22; delay1=15; delay2=5;;
|
||||
*) header; echo 'Do not hack the hackerspace!'"$cmd"; exit;;
|
||||
esac
|
||||
|
||||
# execute long-running ppio job in background shell
|
||||
#( sleep $delay1
|
||||
# /usr/local/bin/gpio -g write $pin on
|
||||
# sleep $delay2
|
||||
# /usr/local/bin/gpio -g write $pin off
|
||||
#) </dev/null >/dev/null 2>/dev/null &
|
||||
|
||||
header
|
||||
sed 's/XTIMEOUTX/'"$((delay1 + delay2))"'/' ../tpl/wait.html | sed 's/XSECRETX/'"$secret"/
|
||||
|
||||
exit
|
||||
fi
|
||||
|
||||
# show feature page
|
||||
header
|
||||
sed 's/XSECRET_HEREX/'"$secret"'/' ../tpl/features.html
|
||||
exit
|
21
src/html/404.html
Normal file
21
src/html/404.html
Normal file
File diff suppressed because one or more lines are too long
6
src/html/media/.gitignore
vendored
Normal file
6
src/html/media/.gitignore
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
BC546_48-CDIL.pdf
|
||||
en-g6d.pdf
|
||||
HM-RC-4-2_UM_GE_EQ-3_130906.pdf
|
||||
HM_SECKEYS_ANL.pdf
|
||||
mXtwxrt.pdf
|
||||
|
49
src/html/media/genpw.sh
Executable file
49
src/html/media/genpw.sh
Executable file
|
@ -0,0 +1,49 @@
|
|||
#!/bin/bash
|
||||
|
||||
QUESTTEXT='Wie ist dein Name/Nick?'
|
||||
HELPTEXT="Nickname"
|
||||
|
||||
DLG=`which zenity`
|
||||
if [[ $? -ne 0 ]] ; then
|
||||
if [[ "$1" == "" ]] ; then
|
||||
echo "Passphrasengenerierung abgebrochen. Bitte einen Nutzernamen als Kommandoparameter angeben."
|
||||
exit 1
|
||||
else
|
||||
USER=$1
|
||||
DIALOG=cmd
|
||||
fi
|
||||
else
|
||||
if [[ "$1" == "" ]] ; then
|
||||
USER=`zenity --entry --text="$QUESTTEXT" --entry-text=$HELPTEXT`
|
||||
else
|
||||
USER=`zenity --entry --text="$QUESTTEXT" --entry-text="$1"`
|
||||
fi
|
||||
if [[ $? -ne 0 || "$USER" == "$HELPTEXT" ]] ; then
|
||||
echo "Passphrasengenerierung abgebrochen."
|
||||
exit 1
|
||||
fi
|
||||
DIALOG=zenity
|
||||
fi
|
||||
|
||||
STAMP=`date +%Y-%m-%dT%T`
|
||||
FILE="$PWD/$USER.$STAMP.keyhash"
|
||||
PASSPHRASE=`tr -dc _a-z0-9 </dev/urandom | head -c 31`
|
||||
PPHASH=`echo "$PASSPHRASE" | sha512sum | tr --delete " -"`
|
||||
|
||||
echo "$USER;$STAMP;$PPHASH">>$FILE
|
||||
|
||||
# Ausgabe
|
||||
TEXT="Hallo $USER,\ndeine neue Passphrase ist:\n\n\t$PASSPHRASE\n
|
||||
Hinweis:\tDie Passphrase erscheint nur in diesem Dialog und im Terminal\n\t\tund wird sonst nirgendwo gespeichert. Sichere sie dir bitte!\n\n
|
||||
Es wurde eine Datei mit deinen Schlüsseldaten generiert. Ihr Name lautet:
|
||||
\n\t$FILE\n\nÜbergib sie bitte vertrauensvoll an einen Schließsystemverantwortlichen.\n"
|
||||
|
||||
case "$DIALOG" in
|
||||
zenity)
|
||||
zenity --info --text="$TEXT" --window-icon=warning
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
echo -e "$TEXT"
|
1675
src/html/media/tuer1.3.svg
Normal file
1675
src/html/media/tuer1.3.svg
Normal file
File diff suppressed because it is too large
Load diff
After Width: | Height: | Size: 100 KiB |
1633
src/html/media/tuer3.0.svg
Normal file
1633
src/html/media/tuer3.0.svg
Normal file
File diff suppressed because it is too large
Load diff
After Width: | Height: | Size: 94 KiB |
1249
src/html/media/tuer3.1.svg
Normal file
1249
src/html/media/tuer3.1.svg
Normal file
File diff suppressed because it is too large
Load diff
After Width: | Height: | Size: 67 KiB |
42
src/html/style.css
Normal file
42
src/html/style.css
Normal file
|
@ -0,0 +1,42 @@
|
|||
@-o-viewport { width:device-width }
|
||||
@-moz-viewport { width:device-width }
|
||||
@-webkit-viewport { width:device-width }
|
||||
@-ms-viewport { width:device-width }
|
||||
@-viewport { width:device-width }
|
||||
|
||||
body {
|
||||
margin:0px;
|
||||
padding: 5%;
|
||||
background-color: #242943;
|
||||
color: white;
|
||||
font-family: sans-serif;
|
||||
background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIGJ5IGp0ZiAtLT4KCjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMiIKICAgd2lkdGg9IjE2IgogICBoZWlnaHQ9IjE2IgogICB2aWV3Qm94PSIwIDAgMTYgMTYiCiAgIHNvZGlwb2RpOmRvY25hbWU9InR1ZXIuc3ZnIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjkyLjEgcjE1MzcxIj4KICA8cGF0aAogICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjFweDtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjtzdHJva2Utb3BhY2l0eToxO2ZpbGwtb3BhY2l0eTowLjEzNzI1NDkxIgogICAgIGQ9Ik0gNiAxIEwgNiA2LjQwMDM5MDYgTCA0IDUgTCA0IDcgTCAxIDcgTCAxIDEwIEwgNCAxMCBMIDQgMTIgTCA2IDEwLjU5OTYwOSBMIDYgMTUgTCA3IDE1IEwgNyA5LjkwMDM5MDYgTCA5IDguNSBMIDcgNy4wOTk2MDk0IEwgNyAyIEwgOSAyIEwgOSA4LjUgTCA5IDEzIEwgMTQgMTUgTCAxNSAxNSBMIDE1IDEgTCA2IDEgeiAiCiAgICAgaWQ9InBhdGgzNiIgLz4KPC9zdmc+Cg==");
|
||||
background-attachment: fixed;
|
||||
background-repeat: no-repeat;
|
||||
background-size: auto 100%;
|
||||
}
|
||||
h2 {font-size: 17px; color: white}
|
||||
input, button { width: 45%; height:3em; margin-bottom: 1em; }
|
||||
input { width: 95%; opacity: 0.95;}
|
||||
.main_button { height: 7em;}
|
||||
.main_open { background-color: #006600}
|
||||
.main_close { background-color: #660000}
|
||||
button {
|
||||
border: 0px solid lightgrey;
|
||||
background-color: #314159;
|
||||
color: white;
|
||||
font-size: 15px;
|
||||
font-weight: bold;
|
||||
border-radius: 11px;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 640px) {
|
||||
body { margin:0 }
|
||||
button { width:100%; height:3em;}
|
||||
input { width:95%; height:3em;}
|
||||
}
|
||||
|
||||
a{color: #a5b7e0}
|
||||
|
||||
.footnote { font-size: 75%;}
|
21
src/tpl/features.html
Normal file
21
src/tpl/features.html
Normal file
|
@ -0,0 +1,21 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Tür 3.1: Schließfunktionswahl</title>
|
||||
<meta name="viewport" content="width=device-width, target-densitydpi=device-dpi">
|
||||
<link rel="stylesheet" href="/style.css">
|
||||
<link rel="favicon icon" type="image/png" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAACVBMVEUAAAAAAAD///+D3c/SAAAAAXRSTlMAQObYZgAAADpJREFUCFtjYNBatYqBQTU0jIFBbSqUYFoGItKAxKowIDE1FEyEQllgMbAsWB2D2koQwTWNgUGLYRUAd4kWEUPUxjwAAAAASUVORK5CYII=">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<form method="GET" action="">
|
||||
<input type=hidden name=secret value="XSECRET_HEREX">
|
||||
<h2>Schließfunktionen</h2>
|
||||
<button class="main_button main_open" type="submit" name="cmd" value="indoor_open">Tür öffnen</button><br/>
|
||||
<!--<button class="main_button" type="submit" name="cmd" value="outdoor_buzz">Haustüröffner</button><br/>-->
|
||||
<button class="main_close" type="submit" name="cmd" value="indoor_lock">Tür abschließen</button>
|
||||
</form>
|
||||
</body>
|
||||
|
||||
</html>
|
26
src/tpl/secret.html
Normal file
26
src/tpl/secret.html
Normal file
|
@ -0,0 +1,26 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Tür 3.1: Tokenabfrage</title>
|
||||
<meta name="viewport" content="width=device-width, target-densitydpi=device-dpi">
|
||||
<link rel="stylesheet" href="/style.css">
|
||||
<link rel="favicon icon" type="image/png" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAACVBMVEUAAAAAAAD///+D3c/SAAAAAXRSTlMAQObYZgAAADpJREFUCFtjYNBatYqBQTU0jIFBbSqUYFoGItKAxKowIDE1FEyEQllgMbAsWB2D2koQwTWNgUGLYRUAd4kWEUPUxjwAAAAASUVORK5CYII=">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<form method="GET" action=""> <!--/cgi-bin/kraut.space"-->
|
||||
<h2>Sprich Sterblicher!</h2>
|
||||
<p><!--XCABBAGEX--></p>
|
||||
<p>Bist du ein menschliches Wesen und kein Kohlkopf oder Anderes?</p>
|
||||
<input id="secret" class="textfield" name="secret" accesskey="t" required autofocus placeholder=" Wie ist dein Token? ">
|
||||
<br>
|
||||
<button type="submit" accesskey="E"><span class="accesskey">E</span>rleuchte mich!</button>
|
||||
</form>
|
||||
<p>Dies ist ein Service des Hackspace Jena e. V. und aufschließlich für Mitglieder des Krautspace™.</p>
|
||||
<p>Dieses Netzwerk liefert keinen Zugang zum Internet.</p>
|
||||
<p>Für Interessierte gibt es eine <a href="../doc/index.html">Systemdokumentation</a>.</p>
|
||||
<p class="footnote">©2017–2019 Hackspace Jena e. V. – https://kraut.space<p>
|
||||
</body>
|
||||
|
||||
</html>
|
18
src/tpl/wait.html
Normal file
18
src/tpl/wait.html
Normal file
|
@ -0,0 +1,18 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="XTIMEOUTX; URL=?secret=XSECRETX">
|
||||
<title>Tür 3.1: Anfrage in Arbeit</title>
|
||||
<meta name="viewport" content="width=device-width, target-densitydpi=device-dpi">
|
||||
<link rel="stylesheet" href="/style.css">
|
||||
<link rel="favicon icon" type="image/png" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAACVBMVEUAAAAAAAD///+D3c/SAAAAAXRSTlMAQObYZgAAADpJREFUCFtjYNBatYqBQTU0jIFBbSqUYFoGItKAxKowIDE1FEyEQllgMbAsWB2D2koQwTWNgUGLYRUAd4kWEUPUxjwAAAAASUVORK5CYII=">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
Anforderung wird ausgeführt Bitte warten. (XTIMEOUTXs)
|
||||
<p><b>Für die Hauseingangstür ab jetzt bitte mindestens einmal klingeln!</b></p>
|
||||
<p> Die Türanlage wurde umgestellt. Unser KTA kann jetzt nur noch aufschließen wenn vorher unten jemand geklingelt hatte.</p>
|
||||
</body>
|
||||
|
||||
</html>
|
Loading…
Add table
Add a link
Reference in a new issue