#include <String.au3>

;===============================================================
; Name:				_SerialCheck_Valid
; Description: 		Schützt Scripte dadurch in dem man einen Lizenkey eingeben muss.
;             		man diese selbst am Script Anfang abfragen.
; Parameter(s): 	$Pattern = RegEx Such Pattern zum finden einer gültigen Seriennummer.
;					[Optional] $ini = Kompletter Datei Pfad zu einer .ini
;					[Optional] $Encrypt = Per _StringEncrypt Verschlüsseln
;					[Optional] $EncryptPass = Ecryption Passwort für _StringEncrypt Standard ist "_SerialCheck_Valid".
;					[Optional] $InvalidExit = Exit wenn ungültiger Code eingegeben wurde. Standard ist True
; Return Value(s):	@Error Values
; 				  	0 = Erfolgreich
;			   		1 = ungültiger Key
;			   		2 = Kein RegEx Pattern angegeben
;				   	Return Values:
;				   	0 = Erfolgreich
;				   	1 = ungültiger Key
;				   	2 = Kein RegEx Pattern angegeben
;
; Author(s):  		Molaynox <molaynox.bplaced.net> <black.eyes.soft@gmx.de>
; Version:			0.9 (BETA)
; Date:				09.11.2010
;===============================================================

Func _SerialCheck_Valid($Pattern, $ini = "", $Encrypt = False, $EncryptPass = "_SerialCheck_Valid",$InvalidExit = True)
	If $Pattern = "" Then
		SetError(2)
		Return 2
	EndIf
	$pass = InputBox("Authorization needed!", "Um das Script weiter benutzen zu können müssen sie einen Lizenkey eingeben!", "")
	$CheckKey = StringRegExp($pass, $Pattern, 1)
	If $CheckKey = 0 Then
		MsgBox(16 + 262144, "WARNUNG!", "Achtung ihr Lizenzkey ist ungültig. Bitte wiederholen sie den Vorgang." & _
				@CRLF & "WARNING! Your License Key is invalid. Please try again.")
		If $InvalidExit = True Then Exit
		If Not $ini = "" Then
			If $Encrypt = True Then
				$write = IniWrite($ini, "_SerialCheck_Valid", "Validation", _StringEncrypt(1, "invalid", $EncryptPass))
				If $write = 0 Then
					MsgBox(16, "ERROR", "Zum Registrieren des Programmes sind Admin Rechte erforderlich. Bitte als Admin wiederholen.")
					Exit
				EndIf
			Else
				$write = IniWrite($ini, "_SerialCheck_Valid", "Validation", "invalid")
				If $write = 0 Then
					MsgBox(16, "ERROR", "Zum Registrieren des Programmes sind Admin Rechte erforderlich. Bitte als Admin wiederholen.")
					Exit
				EndIf
			EndIf
		EndIf
		SetError(1)
		Return 1
		Exit
	Else
		MsgBox(262144, "License Key ist Gültig", "Ihr Lizenzkey ist gültig." & _
				@CRLF & "Your License Key is valid.")
		If Not $ini = "" Then
			If $Encrypt = True Then
				$write = IniWrite($ini, "_SerialCheck_Valid", "Validation", _StringEncrypt(1, "valid", $EncryptPass))
				If $write = 0 Then
					MsgBox(16, "ERROR", "Zum Registrieren des Programmes sind Admin Rechte erforderlich. Bitte als Admin wiederholen.")
					Exit
				EndIf
			Else
				$write = IniWrite($ini, "_SerialCheck_Valid", "Validation", "valid")
				If $write = 0 Then
					MsgBox(16, "ERROR", "Zum Registrieren des Programmes sind Admin Rechte erforderlich. Bitte als Admin wiederholen.")
					Exit
				EndIf
			EndIf
		EndIf
		SetError(0)
	EndIf
	Return 0
EndFunc   ;==>_SerialCheck_Valid

;===============================================================
; Name:				_IniCheckSerial_Valid
; Description: 		Prüft ob
;             		man diese selbst am Script Anfang abfragen.
; Parameter(s): 	$ini = Kompletter Datei Pfad zu einer .ini
;					[Optional] $Encrypt = Wenn ini in _SerialCheck_Valid verschlüsselt wurde auf True
;					[Optional] $EncryptPass = Ecryption Passwort für _StringEncrypt Standard ist "_SerialCheck_Valid".
; Return Value(s):	@Error Values
; 				  	0 = .ini existiert
;			   		1 = .ini existiert nicht
;				   	Return Values:
;				   	0 = valid Key
;				   	1 = invalid Key
;					2 = Problem mit .ini
;
; Author(s):  		Molaynox <molaynox.bplaced.net> <black.eyes.soft@gmx.de>
; Version:			0.9 (BETA)
; Date:				09.11.2010
;===============================================================

Func _IniCheckSerial_Valid($ini, $Encrypt = False, $EncryptPass = "_SerialCheck_Valid")
	If Not FileExists($ini) Then
		SetError(1)
		Return 2
	Else
		SetError(0)
	EndIf
	If $Encrypt = True Then
		$validation = IniRead($ini, "_SerialCheck_Valid", "Validation", "NotFound")
		$crypt = _StringEncrypt(0, $validation, $EncryptPass)
		If $crypt = "valid" Then
			Return 0
		ElseIf $crypt = "invalid" Then
			Return 1
		EndIf
	ElseIf $Encrypt = False Then
		$validation = IniRead($ini, "_SerialCheck_Valid", "Validation", "NotFound")
		If $validation = "valid" Then
			Return 0
		ElseIf $validation = "invalid" Then
			Return 1
		EndIf
	EndIf
EndFunc   ;==>_IniCheckSerial_Valid