#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GuiButton.au3>
#include  <Crypt.au3>
#Include <Array.au3>

$sSalt = "Most recent sig. I made"
$aCorrect=IniReadSection(@ScriptDir&"\PW_List.ini","User")
_ArrayDelete($aCorrect,0)

$hGUI = GUICreate("Login Check", 500, 140)
GUICtrlCreateLabel("Benutzername:", 5, 5, 85, 21)
$idInpUser = GUICtrlCreateInput("", 95, 5, 190, 21)
GUICtrlCreateLabel("Passwort:", 5, 35, 85, 21)
$idInpPW = GUICtrlCreateInput("123456789", 95, 35, 190, 21, $ES_PASSWORD) ; Input mit Passwort Style
$idBtnLogin = GUICtrlCreateButton("&Login", 5, 60, 490, 30)
GUISetState(@SW_SHOW)
$iLoginTrys = 0
$iMaxTrys = 5
While 1
	$LoginState = GUICtrlGetState($idBtnLogin)
	;ermitteln welchen Status der Login-Button hat

	If GUICtrlRead($idInpPW) <> "" And GUICtrlRead($idInpUser) <> "" Then
		;Wenn Passwort und Benutzer dann
		If BitAND($LoginState, $GUI_DISABLE) = $GUI_DISABLE Then GUICtrlSetState($idBtnLogin, $GUI_Enable)
		;Wenn $LoginState nicht aktiv (also der Loginbutton nicht klickbar) ist dann Login-Button aktivieren
	Else
		;entweder Passwort ider Benutzer sind nicht ausgefüllt
		If BitAND($LoginState, $GUI_Enable) = $GUI_Enable Then GUICtrlSetState($idBtnLogin, $GUI_DISABLE)
		;Wenn $LoginState aktiv (also der Loginbutton klickbar) ist dann Login-Button deaktivieren
	EndIf
	$msg = GUIGetMsg()
	Switch $msg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $idBtnLogin
			;Loginbutton wurde geklickt
			$bCorect = False
			;diese Boolsche Variable auf FALSCH setzen
			For $i = 0 To UBound($aCorrect) - 1
				If GUICtrlRead($idInpUser) = $aCorrect[$i][0] Then
					;wenn das Arrayelement gleich dem eingegebenen Benutzer ist dann
					$bCorect = True
					;diese Boolsche Variable auf WAHR setzen
					ExitLoop
					;Schleife verlassen
				EndIf
			Next
			If $bCorect Then
				;Es wurde ein Benutzer mit Zugangsberechtigung eingegeben
				ConsoleWrite($aCorrect[$i][1] & @CRLF)
				$sPW = _Crypt_HashData(GUICtrlRead($idInpPW) & $sSalt, $CALG_MD5)
				;das eingegebene Passwort zusammen mit dem "Salz" verschüsseln
				ConsoleWrite($sPW & @CRLF)
				If $sPW <> $aCorrect[$i][1] Then $bCorect = False
				;der Schlüssel des eingebenen Passworts und der im Array hinterlegte Schlüssel
				;für das Passwort stimmen nicht überein also $bCorrect auf FALSCH setzen
			EndIf
			If Not $bCorect Then
				;entweder kein Benutzer mit Zugangsberechtigung
				;oder ungültige Passworteingabe
				$iLoginTrys += 1
				;Anzahl der Loginversuche um 1 erhöhen
				If $iLoginTrys > $iMaxTrys - 1 Then
					;Anzahl der maximal zuässigen Loginversuche wurde überschritten
					MsgBox(16, $iMaxTrys & " falsche Loginversuche", "Computer wird für 15 Min. gesperrt", 0, $hGUI)
					;Ausgabe
					Exit
					;deshalb Programm beenden
				Else
					;Anzahl der maximal zuässigen Loginversuche wurde nicht überschritten
					MsgBox(48, "noch " & $iMaxTrys - $iLoginTrys & " Loginversuch(e)!", "danach wird der Computer für 15 Min. gesperrt", 0, $hGUI)
					;Anzeige der restichen Loginversuche
				EndIf
			Else
				;Benutzer mit Zugangsberechtigung und gütiges Passwort wurden eingegeben
				MsgBox(64, "Login" & $iLoginTrys, "Sie haben sich erfolgreich angemeldet!", 0, $hGUI)
				GUIDelete()
				;Gui löschen
				ExitLoop
				;(GuiGetMsg-) Schleife verlassen
			EndIf
	EndSwitch
WEnd
;hier der zuschützende Skriptteil