dmesgdb/var/www/upload

125 lines
3.2 KiB
Bash
Executable File

#!/bin/sh
. /var/common.sh
LIST=/var/www/list
[ -e "$DB" ] || mkdir -p "$DB"
gen_user_token() {
get_param token
[ "$token" != "Unknown" ] && [ -e "$DB/$token" ] && {
echo -en "$token"
true
} || {
echo -en "$REMOTE_ADDR $REMOTE_PORT $HTTP_USER_AGENT $(date +%s) ${RANDOM}" | md5
}
}
save_dmesg() {
_to_file=$1
_length=$(expr $2 - 7)
_ret=0
stty -icanon -echo
_bsd_check="$(dd bs=1 count=7)"
[ "$_bsd_check" == "OpenBSD" ] && {
echo -en "$_bsd_check" > $_to_file
dd bs=1 count=$_length >> $_to_file #2>/dev/null
#if !OpenBSD or dd return error than _ret=1
} || _ret=1
stty icanon echo
return $_ret
}
check_dmesg_file() {
#_file="$1"
#_type="$(file -b $_file)"
#[ "$_type" = "ASCII text" ] return 0
# it was bad idea because "file: unknown user _file"
return 0
}
_RESULT=""
[ "$REQUEST_METHOD" = "POST" -a "$CONTENT_LENGTH" -gt 0 ] && {
[ "$CONTENT_LENGTH" -gt $MAX_DMESG_SIZE ] && fail "too much data size"
TOKEN="$(gen_user_token)"
HD="$DB/$TOKEN"
DFILE="$HD/dmesg"
mkdir -p "$HD"
[ "$TOKEN" != "Unknown" ] && {
_v="$(<$HD/vendor)"
_m="$(<$HD/model)"
_s="$(<$HD/state)"
_md5="$(<$HD/md5)"
_OLD_FLN="$_v-$_m[$_s]-${_md5}.txt"
_OLD_LN="$_m[$_s]-${_md5}.txt"
rm -f "$LIST/$_OLD_FLN"
rm -f "$LIST/#$vendor/$_OLD_LN"
}
#LINK_NAME="$(gen_names)"
get_param vendor
get_param model
get_param state
echo -en "$vendor" > "$HD/vendor"
echo -en "$model" > "$HD/model"
echo -en "$state" > "$HD/state"
date "+%Y.%m.%d %H:%M" > "$HD/date"
save_dmesg "$DFILE" "$CONTENT_LENGTH" || {
rm -rf "$HD"
fail "save dmesg error"
}
check_dmesg_file "$DFILE" || {
rm -rf "$HD"
fail "Bad dmesg type"
}
grep "not configured" "$DFILE" | wc -l | sed 's/ //g' > "$HD/notconf"
MD5="$(md5 -q "$DFILE")"
echo -en "$MD5" > "$HD/md5"
grep OpenBSD "$DFILE" > "$HD/uname"
FULL_LINK_NAME="$vendor-$model[$state]-${MD5}.txt"
LINK_NAME="$model[$state]-${MD5}.txt"
mkdir -p "$LIST/#$vendor"
ln -s "../../db/$TOKEN/dmesg" "$LIST/$FULL_LINK_NAME"
ln -s "../../../db/$TOKEN/dmesg" "$LIST/#$vendor/$LINK_NAME"
_RESULT="
Thank you, your dmesg was uploaded!
Link: http://$HTTP_HOST/list/$FULL_LINK_NAME
Token: $TOKEN
Edit: curl --data \"$(dmesg)\" '/upload?token=$TOKEN&vendor=$vendor&model=$model&state=$state'
Also you can add a comment:
ftp -V -o - 'http://$HTTP_HOST/comment?token=$TOKEN&comment=ethernet ok, storage ok'
"
}
echo -en "Status: 200 OK\r\n"
echo -en "Content-type: text/html\r\n\r\n"
[ ! -z "$_RESULT" ] && {
echo "$_RESULT"
exit 0
}
echo "<HTML><HEAD><title>OpenBSD dmesg database</title></HEAD>\n";
echo "<body>";
echo '
<h1>OpenBSD dmesg collection</h1>
<p><a href="/beautylist">Our dmesgs list</a></p>
<p>You can send your dmesg from command line:</p>
<p><i>curl --data "$(dmesg)" "http://'"$HTTP_HOST"'/upload?<b>vendor=Apple&model=MacBook_Pro_2017_13&state=Bad</b>"</i></p>
<p>
Or if you'"'"'re a cool hacker:<br>
<i>echo -ne "POST /upload?vendor=Apple&model=MacBook_Pro_2017_13&state=Bad HTTP/1.0\\r\\nHost: '"$HTTP_HOST"'\\r\\nContent-Type: application/x-www-form-urlencoded\\r\\nContent-Length: $(dmesg|wc -c|tr -d ' ')\\r\\n\\r\\n$(dmesg)\\r\\n" | nc '"$HTTP_HOST"' 80</i>
</p>
'
echo "</body></HTML>\n";