diff --git a/scripts-pfc200/auto_cert.sh b/scripts-pfc200/auto_cert.sh new file mode 100644 index 0000000..7d8e192 --- /dev/null +++ b/scripts-pfc200/auto_cert.sh @@ -0,0 +1,28 @@ +#! /bin/bash + +## path: /home/script/auto_cert.sh + +## Fuer die manuelle Eingabe eines Geraetenamen +# echo "hallo , geben Sie ein Hostnamen fuer ihr Geraet ein" +# read CN + +## Erzeugung von rsa key files +CN=$1 +openssl req -x509 -nodes -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -subj "/CN=${CN}" + +## Ermittlung des primary fingerprint und uebermittlung per bluetooth +Fingerprint=$(openssl x509 -noout -fingerprint -sha256 -in cert.pem | sed -e "s|:||g" | sed -e "s|SHA256||g" | sed$ +echo $Fingerprint +echo "fingerprint ${Fingerprint}" > /dev/service + +## Anpassung der key files und verschiebung in das zugehoerige directory +chmod 600 key.pem +chmod 600 cert.pem +Pathssl=/etc/ssl +mv key.pem $Pathssl/private +mv cert.pem $Pathssl/certs +Pathcert=$Pathssl/certs/cert.pem +Pathkey=$Pathssl/private/key.pem + +## Configures the device for communication with the cloud +/home/script/auto_conf.sh -enabled true -clientid ${CN} -host mm-hfu-semesterprojekt.azure-devices.net -usetls fal$ diff --git a/scripts-pfc200/auto_conf.sh b/scripts-pfc200/auto_conf.sh new file mode 100644 index 0000000..108dbc3 --- /dev/null +++ b/scripts-pfc200/auto_conf.sh @@ -0,0 +1,320 @@ +#!/bin/bash + +eingabecheck(){ + if ! [[ "$1" =~ ^[a-zA-Z0-9\/\.\:\-]+$ ]] + then + echo ERROR: at "$2": "$1" has bad characters + exit 1; + fi + case "$3" in + bool) + if [[ "$1" != 'true' && "$1" != 'false' ]]; + then + echo ERROR at "$2": "$1" must be true or false + exit 1 + fi + ;; + cloud) + if [[ "$1" != 'Azure' && "$1" != 'ICloud' ]]; + then + echo ERROR at "$2": "$1" is not a supported Cloud + exit 1 + fi + ;; + port) + if ! [[ "$1" = [0-9]* ]]; + then + echo ERROR at "$2": "$1" ist not a valid Port + exit 1 + fi + ;; + path) + if ! [[ "$1" =~ .?\/.*\/*.+ ]]; + then + echo ERROR at "$2": "$1" is not a valid Path + exit 1 + fi + ;; + pem) + if ! [[ "$1" =~ .*\/.*.pem ]]; + then + echo ERROR at "$2": "$1" needs to be a .pem file + exit 1 + fi + ;; + esac +} + +flagarray=("Enabled" "CloudType" "Host" "Port" "ClientId" "User" "Password" "TransportProtocol" "KeepAliveInterval" "CleanSession" + "AuthenticationMethod" "UseTLS" "CaFile" "CertFile" "KeyFile" "ProxyType" "HttpProxyHost" "HttpProxyPort" "HttpProxyUser" + "HttpProxyPassword" "LastWillEnabled" "LastWillTopic" "LastWillPayload" "LastWillQoS" "LastWillRetain" "MessagingProtocol" + "MessageProperty" "Compression" "StandardCommandsEnabled" "SendDeviceInfo" "SendDeviceStatus" "TelemetryStopped" "CacheMode") + +length=${#flagarray[@]} + +for(( i=0; i < ${length}; i++)); do + + counter=$(grep -n -w -m 1 "${flagarray[i]}" /etc/dataagent/dataagent.config | cut -f1 -d:) + counter=$(grep -n -w -m 1 "${flagarray[i]}" /etc/dataagent/dataagent.config | cut -f1 -d:) + erase=1 + + if [[ $# -gt 0 ]]; + then + + checkflagarray=$(echo "${flagarray[i]}" | sed "s:.*:\L&:") + checkflagoption=$(echo "$1" | sed "s:-::") + + if [[ "$checkflagarray" = "$checkflagoption" ]]; + then + erase=0 + case "$1" in + -enabled) + shift + eingabecheck "$1" "${flagarray[i]}" bool + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -cloudtype) + shift + eingabecheck "$1" "${flagarray[i]}" cloud + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -host) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -port) + shift + eingabecheck "$1" "${flagarray[i]}" port + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -clientid) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -user) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -password) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -transportprotocol) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -keepaliveinterval) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -cleansession) + shift + eingabecheck "$1" "${flagarray[i]}" bool + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -authenticationmethod) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -usetls) + shift + eingabecheck "$1" "${flagarray[i]}" bool + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -cafile) + shift + eingabecheck "$1" "${flagarray[i]}" path + sed -i "$counter s+:\s\".*\"+: \""$(echo "$1" | sed 's:/:\\\\\\/:g')"\"+" /etc/dataagent/dataagent.config + sed -i "$counter s+:\s\".*\"+: \""$(echo "$1" | sed 's:/:\\\\\\/:g')"\"+" /etc/dataagent/dataagent.config + shift + ;; + -certfile) + shift + eingabecheck "$1" "${flagarray[i]}" path + eingabecheck "$1" "${flagarray[i]}" pem + sed -i "$counter s+:\s\".*\"+: \""$(echo "$1" | sed 's:/:\\\\\\/:g')"\"+" /etc/dataagent/dataagent.config + sed -i "$counter s+:\s\".*\"+: \""$(echo "$1" | sed 's:/:\\\\\\/:g')"\"+" /etc/dataagent/dataagent.config + shift + ;; + -keyfile) + shift + eingabecheck "$1" "${flagarray[i]}" path + eingabecheck "$1" "${flagarray[i]}" pem + sed -i "$counter s+:\s\".*\"+: \""$(echo "$1" | sed 's:/:\\\\\\/:g')"\"+" /etc/dataagent/dataagent.config + sed -i "$counter s+:\s\".*\"+: \""$(echo "$1" | sed 's:/:\\\\\\/:g')"\"+" /etc/dataagent/dataagent.config + shift + ;; + -proxytype) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -httpproxyhost) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -httpproxyport) + shift + eingabecheck "$1" "${flagarray[i]}" port + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -httpproxyuser) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -httpproxypassword) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -lastwillenabled) + shift + eingabecheck "$1" "${flagarray[i]}" bool + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -lastwilltopic) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -lastwillpayload) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -lastwillqos) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -lastwillretain) + shift + eingabecheck "$1" "${flagarray[i]}" bool + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -messagingprotocol) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -messageproperty) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -compression) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -standardcommandsenabled) + shift + eingabecheck "$1" "${flagarray[i]}" bool + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -senddeviceinfo) + shift + eingabecheck "$1" "${flagarray[i]}" bool + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -senddevicestatus) + shift + eingabecheck "$1" "${flagarray[i]}" bool + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -telemetrystopped) + shift + eingabecheck "$1" "${flagarray[i]}" bool + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + -cachemode) + shift + eingabecheck "$1" "${flagarray[i]}" + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \""$1"\"/" /etc/dataagent/dataagent.config + shift + ;; + esac + + if [[ $i == $length-1 ]] && [[ "$checkflagarray" = "$checkflagoption" ]]; + then + echo ERROR : FLAG: "$1" NOT FOUND + exit 1 + fi + fi + fi + + if [[ $erase = 1 ]]; + then + sed -i "$counter s/:\s\".*\"/: \"\"/" /etc/dataagent/dataagent.config + sed -i "$counter s/:\s\".*\"/: \"\"/" /etc/dataagent/dataagent.config + fi + unset flagarray[i] +done diff --git a/scripts-pfc200/auto_read.sh b/scripts-pfc200/auto_read.sh new file mode 100644 index 0000000..73dffd4 --- /dev/null +++ b/scripts-pfc200/auto_read.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +## path: /home/script/auto_read.sh + +## configures tty and listens for bluetooth input to pass it on +stty -F /dev/service 19200 parenb -parodd -cstopb cs8 +cat /dev/service | xargs -n 1 /home/script/auto_cert.sh diff --git a/scripts-pfc200/initBluetoothListener b/scripts-pfc200/initBluetoothListener new file mode 100644 index 0000000..856b9fd --- /dev/null +++ b/scripts-pfc200/initBluetoothListener @@ -0,0 +1,35 @@ +#!/bin/bash +# +# chkconfig: 2345 92 65 + +### BEGIN INIT INFO +# Provides: initBluetoothListener +# Required-Start: $local_fs $all +# Required-Stop: $syslog +# Default-Start: 2345 +# Default-Stop: +# Short-Description: Start a bluetooth listener +# Description: Start a listening section for bluetooth, so incoming commands can behandeled +### END INIT INFO + +## path symlink: /etc/rc.d/S99_init_bluetooth_listener +## path: /etc/init.d/initBluetoothListener + +case $1 in + start) + echo "auto_read.sh wird gestartet" + # Starte Programm + /home/script/auto_read.sh + ;; + stop) + echo "auto_read.sh wird beendet" + # Beende Programm + killall auto_read.sh + ;; + *) + echo "Usage: $0 {start|stop}" + exit 1 + ;; +esac + +exit 0