From b4c5946719688baf6ff168ab393f0f4cd7c67d84 Mon Sep 17 00:00:00 2001 From: aschwarz Date: Mon, 6 Nov 2023 11:36:15 +0100 Subject: [PATCH] Smarty Template korrekt; LDAP Connects mit DB Connects --- .gitignore | 1 + config/datenbankanbindung.php | 1 - config/smarty.php | 19 ++ controller/admin_login.php | 253 +++++++++--------- controller/func_ldap_connect.php | 77 ++++++ html/login.html | 13 +- index.php | 3 + js/components/admin_login.js | 6 +- php/login.php | 10 +- ...0ef2309814fa6ee1285d_0.file_login.html.php | 235 ---------------- 10 files changed, 239 insertions(+), 379 deletions(-) create mode 100644 .gitignore create mode 100644 config/smarty.php create mode 100644 controller/func_ldap_connect.php create mode 100644 index.php delete mode 100644 smarty_tmp/templates_c/f9e2b78800181bf212fe0ef2309814fa6ee1285d_0.file_login.html.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..73758c7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +smarty_tmp/* diff --git a/config/datenbankanbindung.php b/config/datenbankanbindung.php index a505f89..67a1346 100644 --- a/config/datenbankanbindung.php +++ b/config/datenbankanbindung.php @@ -4,7 +4,6 @@ function dbconnect() //--Prozedur - kein return-Wert { $db = @new mysqli( 'localhost', 'root', '', 'ams_stammdaten' ); - //$db = @new mysqli( 'localhost', 'lgadmin', '!S1ge1nA', 'leitgedanken' ); $db->query("set sql_mode = 'ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'"); $db->set_charset('utf8mb4'); $db->query("SET NAMES 'utf8mb4'"); diff --git a/config/smarty.php b/config/smarty.php new file mode 100644 index 0000000..e9bbe2d --- /dev/null +++ b/config/smarty.php @@ -0,0 +1,19 @@ +template_dir = SMARTY_DIR.'html'; + $this->compile_dir = SMARTY_DIR.'smarty_tmp/templates_c'; + $this->config_dir = SMARTY_DIR.'smarty_tmp/config'; + $this->cache_dir = SMARTY_DIR.'smarty_tmp/cache'; + } + } +?> \ No newline at end of file diff --git a/controller/admin_login.php b/controller/admin_login.php index 900e265..fb7ce43 100644 --- a/controller/admin_login.php +++ b/controller/admin_login.php @@ -1,174 +1,175 @@ query("DELETE FROM lg_securitytokens + if ($_SESSION['angemeldet_bleiben'] == 1) { + $identifier = $_COOKIE['identifier']; + $securitytoken = $_COOKIE['securitytoken']; + $token_neu = sha1($securitytoken); + $sql1 = $db->query("DELETE FROM lg_securitytokens WHERE securitytoken ='$token_neu' AND identifier = '$identifier' "); - } - //Cookies entfernen - session_destroy(); - setcookie("identifier","",time()-(3600*24*365)); - setcookie("securitytoken","",time()-(3600*24*365)); - header("location:../php/login.php"); + } + //Cookies entfernen + session_destroy(); + setcookie("identifier", "", time() - (3600 * 24 * 365)); + setcookie("securitytoken", "", time() - (3600 * 24 * 365)); + header("location:../php/login.php"); } if ($function == 'login') { - $mail=mb_strtoupper($_POST["mail"]); //remove case sensitivity on the mail - $password=$_POST["password"]; - - # 2 Loginmöglichkeiten: 1) Datenbank ams_stammdaten oder 2) Hochschul-LDAP - - if($mail == "" OR $password == ""){ + $user = mb_strtoupper($_POST["user"]); //remove case sensitivity on the mail + $password = $_POST["password"]; + + # 2 Loginmöglichkeiten: 1) Datenbank ams_stammdaten oder 2) Hochschul-LDAP + + if ($user == "" OR $password == "") { echo '
Bitte füllen Sie alle Felder aus!
|***|error'; exit; - } - -## Basislogin für DBs - $result = $db->query("SELECT sid, uid, mail, pwd, durchgefallen FROM stud WHERE UPPER(mail)='$mail' or uid='$mail'"); - $row = $result->fetch_array(); - if(mysqli_num_rows($result) == 0) { - echo '
Der Account ist nicht verfügbar!
|***|error'; + } + + + $result = $db->query("SELECT sid, uid, mail, pwd, durchgefallen FROM stud WHERE UPPER(mail)='$user' or uid='$user'"); + $row = $result->fetch_array(); + if (mysqli_num_rows($result) == 0) { + echo '
Der Account ist im Anmeldesystem nicht verfügbar!
|***|error'; exit; - }else if ($row['durchgefallen'] != 'N'){ + } else if ($row['durchgefallen'] != 'N') { echo '
Der Account ist inaktiv!
|***|error'; exit; - }else if (md5($password) != $row['pwd']){ //verschlüsseltes Passwort überprüfen - echo '
Bitte prüfen Sie Ihre Zugangsdaten
|***|error'; - exit; - }else{ + } else if (studnet($user, $password) or hsnet($user, $password) or md5($password) == $row['pwd']) { echo "
Login wird durchgeführt
|***|success"; - } - - - -/* - else if (md5($password) != $row['passwort'] or $row['mail'] == ''){ //verschlüsseltes Passwort überprüfen + } else { echo '
Bitte prüfen Sie Ihre Zugangsdaten
|***|error'; exit; - }else{ - $VAID = $row['VAID']; - - //Möchte der Nutzer angemeldet beleiben? - if($_POST['angemeldet_bleiben'] == 1) { - - $identifier = random_string(); - $securitytoken = random_string(); - -# $insert = $pdo->prepare("INSERT INTO lg_securitytokens (user_id, identifier, securitytoken) VALUES (:user_id, :identifier, :securitytoken)"); -# $insert->execute(array('user_id' => $user['id'], 'identifier' => $identifier, 'securitytoken' => sha1($securitytoken))); - $token_neu = sha1($securitytoken); - $result_1 = $db->query("INSERT INTO lg_securitytokens (VAID, identifier, securitytoken) VALUES ('$VAID', '$identifier', '$token_neu')"); - setcookie("identifier",$identifier,time()+(3600*24*365)); //1 Jahr Gültigkeit - setcookie("securitytoken",$securitytoken,time()+(3600*24*365)); //1 Jahr Gültigkeit - $_SESSION['angemeldet_bleiben'] = 1; - }else{ - $_SESSION['angemeldet_bleiben'] = 0; - } - + } + + + /* + else if (md5($password) != $row['passwort'] or $row['mail'] == ''){ //verschlüsseltes Passwort überprüfen + echo '
Bitte prüfen Sie Ihre Zugangsdaten
|***|error'; + exit; + }else{ + $VAID = $row['VAID']; + + //Möchte der Nutzer angemeldet beleiben? + if($_POST['angemeldet_bleiben'] == 1) { + + $identifier = random_string(); + $securitytoken = random_string(); + + # $insert = $pdo->prepare("INSERT INTO lg_securitytokens (user_id, identifier, securitytoken) VALUES (:user_id, :identifier, :securitytoken)"); + # $insert->execute(array('user_id' => $user['id'], 'identifier' => $identifier, 'securitytoken' => sha1($securitytoken))); + $token_neu = sha1($securitytoken); + $result_1 = $db->query("INSERT INTO lg_securitytokens (VAID, identifier, securitytoken) VALUES ('$VAID', '$identifier', '$token_neu')"); + setcookie("identifier",$identifier,time()+(3600*24*365)); //1 Jahr Gültigkeit + setcookie("securitytoken",$securitytoken,time()+(3600*24*365)); //1 Jahr Gültigkeit + $_SESSION['angemeldet_bleiben'] = 1; + }else{ + $_SESSION['angemeldet_bleiben'] = 0; + } + $datum=date("Y-m-d H:i:s"); $ip=getenv("REMOTE_ADDR"); $agent=getenv("HTTP_USER_AGENT"); $_SESSION['userid'] = $VAID; $_SESSION["global_mail"] = $row['mail']; $result_1 = $db->query("INSERT INTO userlog (Datum, IP, user_agent, VAID) VALUES ('$datum', '$ip', '$agent', '$VAID')"); - echo "
Login wird durchgeführt
|***|success"; - } - } -*/ + echo "
Login wird durchgeführt
|***|success"; + } + } + */ } /* if ($function == 'passwortvergessen') { - $mailempf = $_POST['email']; - - $result_pw = $db->query("SELECT VAID, inaktiv, vorname, nachname, mail FROM admin WHERE UPPER(mail)=UPPER('$mailempf')"); - $row_pw = $result_pw->fetch_array(); - - if(!isset($_POST['email']) || empty($_POST['email'])) { - echo '
Bitte geben Sie eine E-Mail-Adresse ein.
|***|error'; - exit; - } elseif ($row_pw['mail'] == ''){ - echo '
Der Benutzer wurde nicht im System gefunden. Überprüfen Sie die Mailadresse
|***|error'; - exit; - }elseif($row_pw['inaktiv'] != 'N') { - echo '
Der Benutzer ist inaktiv. Melden Sie sich beim Administrator.
|***|error'; - exit; - }else{ - # function passwort_back - echo passwort_back($row_pw['VAID']); - } +$mailempf = $_POST['email']; + +$result_pw = $db->query("SELECT VAID, inaktiv, vorname, nachname, mail FROM admin WHERE UPPER(mail)=UPPER('$mailempf')"); +$row_pw = $result_pw->fetch_array(); + +if(!isset($_POST['email']) || empty($_POST['email'])) { +echo '
Bitte geben Sie eine E-Mail-Adresse ein.
|***|error'; +exit; +} elseif ($row_pw['mail'] == ''){ +echo '
Der Benutzer wurde nicht im System gefunden. Überprüfen Sie die Mailadresse
|***|error'; +exit; +}elseif($row_pw['inaktiv'] != 'N') { +echo '
Der Benutzer ist inaktiv. Melden Sie sich beim Administrator.
|***|error'; +exit; +}else{ +# function passwort_back +echo passwort_back($row_pw['VAID']); +} } if ($function == 'resetpasswort') { - - $password_new1 = $_POST['password_new1']; - $password_new2 = $_POST['password_new2']; - $vaid = $_POST['vaid']; - $code = $_POST['code']; - $result = $db->query("SELECT VAID, vorname, nachname, mail, inaktiv, passwortcode, passwortcode_time FROM admin WHERE VAID=$vaid"); - $row = $result->fetch_array(); - - #Fehlercheck - if(!isset($vaid) || !isset($code)) { - echo '
Leider wurde beim Aufruf dieser Website kein Code zum Zurücksetzen des Passworts übermittelt!
|***|error'; - exit; - }elseif ($row === null || $row['passwortcode'] === null ) { - echo '
Es wurde kein passender Benutzer gefunden!
|***|error'; - exit; - }elseif($row['inaktiv'] != 'N') { - echo '
Der Benutzer ist inaktiv. Melden Sie sich beim Administrator.
|***|error'; - exit; - }elseif($row['passwortcode_time'] === null || strtotime($row['passwortcode_time']) < (time()-24*3600) ) { - echo '
Der Code ist leider abgelaufen. Setzen Sie das Passwort erneut zurück!
|***|error'; - exit; - }elseif(sha1($code) != $row['passwortcode']) { - echo '
Der übergebene Code war ungültig.
Stellen Sie sicher, dass Sie den genauen Link in der URL aufrufen.
|***|error'; - exit; - }elseif ($password_new1 != $password_new2) { - echo '
Das neue Passwort stimmt nicht mit der Wiederholung überein!
|***|error'; - exit; - }elseif (strlen($password_new1) < 8) { - echo '
Das neue Passwort muss mindestens 8 Zeichen haben!
|***|error'; - exit; - }else{ - $password_md5 = md5($password_new1); - $update = $db->query("UPDATE admin - SET passwort ='$password_md5' - ,passwortcode = NULL - ,passwortcode_time = NULL - WHERE VAID=$vaid - "); - if (!$update) { - echo '
Es liegt ein Fehler in der Datenbank vor!
|***|error'; - exit; - }else{ - echo '
Das Passwort wurde geändert!
|***|success'; - exit; - } +$password_new1 = $_POST['password_new1']; +$password_new2 = $_POST['password_new2']; +$vaid = $_POST['vaid']; +$code = $_POST['code']; - } +$result = $db->query("SELECT VAID, vorname, nachname, mail, inaktiv, passwortcode, passwortcode_time FROM admin WHERE VAID=$vaid"); +$row = $result->fetch_array(); + +#Fehlercheck +if(!isset($vaid) || !isset($code)) { +echo '
Leider wurde beim Aufruf dieser Website kein Code zum Zurücksetzen des Passworts übermittelt!
|***|error'; +exit; +}elseif ($row === null || $row['passwortcode'] === null ) { +echo '
Es wurde kein passender Benutzer gefunden!
|***|error'; +exit; +}elseif($row['inaktiv'] != 'N') { +echo '
Der Benutzer ist inaktiv. Melden Sie sich beim Administrator.
|***|error'; +exit; +}elseif($row['passwortcode_time'] === null || strtotime($row['passwortcode_time']) < (time()-24*3600) ) { +echo '
Der Code ist leider abgelaufen. Setzen Sie das Passwort erneut zurück!
|***|error'; +exit; +}elseif(sha1($code) != $row['passwortcode']) { +echo '
Der übergebene Code war ungültig.
Stellen Sie sicher, dass Sie den genauen Link in der URL aufrufen.
|***|error'; +exit; +}elseif ($password_new1 != $password_new2) { +echo '
Das neue Passwort stimmt nicht mit der Wiederholung überein!
|***|error'; +exit; +}elseif (strlen($password_new1) < 8) { +echo '
Das neue Passwort muss mindestens 8 Zeichen haben!
|***|error'; +exit; +}else{ +$password_md5 = md5($password_new1); +$update = $db->query("UPDATE admin +SET passwort ='$password_md5' +,passwortcode = NULL +,passwortcode_time = NULL +WHERE VAID=$vaid +"); +if (!$update) { +echo '
Es liegt ein Fehler in der Datenbank vor!
|***|error'; +exit; +}else{ +echo '
Das Passwort wurde geändert!
|***|success'; +exit; +} + +} } */ -?> +?> \ No newline at end of file diff --git a/controller/func_ldap_connect.php b/controller/func_ldap_connect.php new file mode 100644 index 0000000..ce7c1c2 --- /dev/null +++ b/controller/func_ldap_connect.php @@ -0,0 +1,77 @@ + query("SELECT wert1, wert2 FROM parameter WHERE pid='13'"); + $row_ldapuser = $query_ldapuser->fetch_array(); + #hsnet + $ds = @ldap_connect("141.10.128.30", "389"); + ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); + ldap_set_option($ds, LDAP_OPT_NETWORK_TIMEOUT, 1); + + # bind wird benötigt, sonst werden die Umlaute bei Namen nicht richtig angezeigt ?!!? + $r = @ldap_bind($ds, $row_ldapuser['wert1'], $row_ldapuser['wert2']); + if ($r) { + $_ldap_dn = "ou=OUHochschulnetzwerk,dc=hsnet,dc=hs-ludwigsburg,dc=de"; + $sr = @ldap_search($ds, $_ldap_dn, "samaccountname=$user"); + $info = @ldap_get_entries($ds, $sr); + $anzahl = ldap_count_entries($ds, $sr); + + if ($anzahl > 0) { + $first = ldap_first_entry($ds, $sr); + $distinguishedName = ldap_get_dn($ds, $first); + if (@ldap_bind($ds, $distinguishedName, $password)) { + ldap_close($ds); + return TRUE; + } else { + ldap_close($ds); + return false; + } + } else { + ldap_close($ds); + return false; + } + } else { + ldap_close($ds); + return false; + } + +} + + +function studnet($user, $password) +{ + $db = dbconnect(); + $query_ldapuser = $db->query("SELECT wert1, wert2 FROM parameter WHERE pid='13'"); + $row_ldapuser = $query_ldapuser->fetch_array(); + # Studnet + $ds = ldap_connect("141.10.144.37", "389"); + ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); + ldap_set_option($ds, LDAP_OPT_NETWORK_TIMEOUT, 1); + $r = @ldap_bind($ds, $row_ldapuser['wert1'], $row_ldapuser['wert2']); + if ($r) { + $_ldap_dn = "ou=ouStudnet,dc=studnet,dc=hs-ludwigsburg,dc=de"; + $sr = @ldap_search($ds, $_ldap_dn, "samaccountname=$user"); + $info = @ldap_get_entries($ds, $sr); + $anzahl = ldap_count_entries($ds, $sr); + if ($anzahl > 0) { + $first = ldap_first_entry($ds, $sr); + $distinguishedName = ldap_get_dn($ds, $first); + if (@ldap_bind($ds, $distinguishedName, $password)) { + ldap_close($ds); + return true; + } else { + ldap_close($ds); + return false; + } + } else { + ldap_close($ds); + return false; + } + } else { + ldap_close($ds); + return false; + } +} +?> \ No newline at end of file diff --git a/html/login.html b/html/login.html index bca478e..0ed97cd 100644 --- a/html/login.html +++ b/html/login.html @@ -53,7 +53,7 @@
@@ -85,14 +84,14 @@

{$index_list}

- +
diff --git a/index.php b/index.php new file mode 100644 index 0000000..ad14005 --- /dev/null +++ b/index.php @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/js/components/admin_login.js b/js/components/admin_login.js index 494888b..65eda11 100644 --- a/js/components/admin_login.js +++ b/js/components/admin_login.js @@ -1,5 +1,5 @@ function login(){ - var mail = document.getElementById("mail").value; + var user = document.getElementById("user").value; var password = document.getElementById("password").value; // var angemeldet_bleiben = document.getElementById("angemeldet_bleiben"); @@ -14,14 +14,14 @@ function login(){ url: '../controller/admin_login.php', data: { 'function': 'login', - 'mail': mail, + 'user': user, 'password': password }, success: function(result) { //we got the response if(result!=''){ var a = result.split('|***|'); if(a[1]=="success"){ - document.getElementById("mail").value =""; + document.getElementById("user").value =""; document.getElementById("password").value =""; $('#msg').show().delay(1000).fadeOut(500); $('#msg').html(a[0]); diff --git a/php/login.php b/php/login.php index 5a98d87..4ca5891 100644 --- a/php/login.php +++ b/php/login.php @@ -1,15 +1,11 @@ setTemplateDir('../html') - ->setCompileDir('../smarty_tmp/templates_c') - ->setCacheDir('../smarty_tmp/cache'); +include_once '../config/smarty.php'; +$smarty = new SmartyAdmin(); require_once("../config/datenbankanbindung.php"); $templatename = substr(basename($_SERVER['PHP_SELF']),0,-3)."html"; + $smarty->display("$templatename"); ?> diff --git a/smarty_tmp/templates_c/f9e2b78800181bf212fe0ef2309814fa6ee1285d_0.file_login.html.php b/smarty_tmp/templates_c/f9e2b78800181bf212fe0ef2309814fa6ee1285d_0.file_login.html.php deleted file mode 100644 index e5b50c0..0000000 --- a/smarty_tmp/templates_c/f9e2b78800181bf212fe0ef2309814fa6ee1285d_0.file_login.html.php +++ /dev/null @@ -1,235 +0,0 @@ -getCompiled()->isFresh($_smarty_tpl, array ( - 'version' => '5.0.0-rc1', - 'unifunc' => 'content_6544b87728a874_63054470', - 'has_nocache_code' => false, - 'file_dependency' => - array ( - 'f9e2b78800181bf212fe0ef2309814fa6ee1285d' => - array ( - 0 => 'login.html', - 1 => 1699002485, - 2 => 'file', - ), - ), - 'includes' => - array ( - ), -))) { -function content_6544b87728a874_63054470 (\Smarty\Template $_smarty_tpl) { -$_smarty_current_dir = 'C:\\xampp_8.2.4\\htdocs\\kurs\\login\\html'; -?> - - - - - Login Anmeldesysteme - - - - - - - - src="../jquery/jquery-3.4.1.min.js"> -> - - - src="../bootstrap/data-table/datatables.min.js"> -> - - type="text/javascript" src="../bootstrap/data-table/moment.mon.js"> -> - - type="text/javascript" src="../bootstrap/data-table/datetime-moment.js"> -> - - - - src="../js/all.js" crossorigin="anonymous"> -> - - - - - - - - - - - - - - src="../bootstrap/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"> -> - - src="../assets/vendor/js/helpers.js"> -> - - - - src="../assets/js/config.js"> -> - -> - $(function() { - $("#mail").focus(); - }); - - $(document).ready(function(){ - $('[data-toggle="popover"]').popover(); - $ - }); - -> - - - - - - TEST - - src="../js/components/admin_login.js"> -> -
-
-
- -
-
- -
- Login Anmeldesysteme -
- -

getValue('index_list');?> -

-
- - -
-
-
- -
-
- - -
-
- -
-
- -
-
-
-
-
-
-
- - - - - src="../assets/vendor/libs/popper/popper.js"> -> - - src="../assets/vendor/js/bootstrap.js"> -> - - src="../assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.js"> -> - - src="../assets/vendor/js/menu.js"> -> - - - - - src="../assets/js/main.js"> -> - - -> - var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]')) - var popoverList = popoverTriggerList.map(function (popoverTriggerEl) { - return new bootstrap.Popover(popoverTriggerEl) - }) - -> - - - async defer src="../assets/js/buttons.js"> -> - - - - type="text/javascript"> - function keysave(ele) { - if(event.key === 'Enter') { - login(); - } - } - -> - - -