#!/bin/bash
#

# 23.07.2005	Version 0.1	Initiale Version
# 24.07.2005	Version 0.2	Pruefungen auf Plausibilitaet der LoginURL eingebaut 
#				(muss https://dbd.dslonair.de) sein



# Dieses Script prüft den Onlinestatus der DSLonAir Verbindung
# und fuehrt ggfs. einen erneuten Login aus
#
# Dabei stellt es sicher, dass die Anmeldung nur per HTTPS an dem Host dbd.dslonair.de erfolgt


# Hier die individuellen Parameter eintragen
TESTURL=http://dsl.leichsenring.net/ok.html
LOGINUSR=hier Dein DSL Username
LOGINPWD=hier Dein DSL Passwort

# Logile
LOGFILE=/var/log/dsl-logon.log

# Testen, ob eine http-Verbindung zum Internet (zur Test-URL) möglich ist
RESULT=$(curl --silent --output /dev/null --write-out "%{http_code}" $TESTURL)

if [ $RESULT == 302 ]; then
	
	# Wenn $RESULT = 302 ist, dann wurde von DSLonAir ein Redirect zur Anmeldeseite gesendet (http_code=302)
	# und es muss ein Login durchgeführt werden

	# temp File für Cookie erzeugen
	TMPCOOKIE=$(mktemp -t cookie.XXXXXX)

	# Die effective URL der Loginseite ermitteln (weil dynamisch) und Cookie speichern
	LOGINURL=$(curl --silent --cookie-jar $TMPCOOKIE --location --output /dev/null \
	                --write-out "%{url_effective}" $TESTURL)

	# Die ermittelte URL einigen Sicherheits- und Plausibilitaetsprüfungen unterziehen
	# Die Anmeldedaten sollen nur per https and das System dbd.dslonair.de gesendet werden

	# wir nehmen mal an die LoginURL sei nicht ok
	LOGINURL_OK=false

	# ermittel aus der LoginURL die Protokollangabe (http oder https)
	PROTOCOL=$(echo $LOGINURL | sed -e "s/:\/\/.*//")

	# ermittel aus der LoginURL den Hostanteil
	LOGINHOST=$(echo $LOGINURL | sed -e "s/.*:\/\///")
	LOGINHOST=$(echo $LOGINHOST | sed -e "s/\/.*//")

	# Wenn Protokoll "https" und Host "dbd.dslonair.de" ist, dann ist es ok
	if [ $PROTOCOL == "https" -a $LOGINHOST == "dbd.dslonair.de" ]; then
		LOGINURL_OK=true
	fi
	
	# Wenn die URL Pruefung soweit ok ist, dann die Anmeldung durchduehren
	if [ $LOGINURL_OK == true ]; then

		# Loginparameter (User/Password) per HTTP POST zusammen mit dem gespeicherten Cookie
		# an die ermittelte URL senden
		RESULT2=$(curl --silent --cookie $TMPCOOKIE --output /dev/null --write-out "%{http_code}" \
		               --data "__ac_name=$LOGINUSR" --data "__ac_password=$LOGINPWD" $LOGINURL)

		# http-Returncode des Anmeldevorgangs pruefen
		if [ $RESULT2 != 200 ]; then
			
			# http-code != 200 heisst grob gesehen "nicht in Ordnung"
			echo "$(date): Logonfehler! http_code = $RESULT2; URL = $LOGINURL" >>$LOGFILE
		else
			# http-code = 200 heisst grob gesehen "in Ordnung"
			echo "$(date): Logon erfolgreich! http_code = $RESULT2; URL = $LOGINURL" >>$LOGFILE
		fi
	else

		# Login URL ist nicht korrekt gewesen
		echo "$(date): Fehler! URL = $LOGINURL" >>$LOGFILE
	fi

	rm $TMPCOOKIE

elif [ $RESULT != 200 ]; then
	echo "$(date): unbekannter Fehler bei Online-Test! http_code = $RESULT" >>$LOGFILE
#else
#	echo "$(date): Online-Test ok! http_code = $RESULT" >>$LOGFILE
fi

# End of Script
