openrat-cms

OpenRat Content Management System
git clone http://git.code.weiherhei.de/openrat-cms.git
Log | Files | Refs | README

LdapAuth.class.php (1860B)


      1 <?php
      2 
      3 namespace cms\auth;
      4 
      5 use cms\auth\Auth;
      6 use logger\Logger;
      7 use User;
      8 use util\Ldap;
      9 
     10 class LdapAuth implements Auth
     11 {
     12 
     13 	public function login($username, $password, $token)
     14 	{
     15 
     16 		// Falls Modul LDAP nicht vorhanden ist können wir gleich beenden.
     17 		if (!extension_loaded('ldap')) {
     18 
     19 			Logger::warn("LdapAuth: LDAP Login is not possible: LDAP-Extension ist not loaded.");
     20 			return false;
     21 		}
     22 
     23 		$conf = \cms\base\Configuration::rawConfig();
     24 		$db = \cms\base\DB::get();
     25 		$this->mustChangePassword = false;
     26 
     27 		// Lesen des Benutzers aus der DB-Tabelle
     28 		$sql = $db->sql(<<<SQL
     29 SELECT * FROM {{user}}
     30  WHERE name={name}
     31 SQL
     32 		);
     33 		$sql->setString('name', $username);
     34 
     35 		$row_user = $sql->getRow();
     36 		$userid = $row_user['id'];
     37 
     38 		$ldap = new Ldap();
     39 		$ldap->connect();
     40 
     41 		if (empty($conf['ldap']['dn'])) {
     42 			// Der Benutzername wird im LDAP-Verzeichnis gesucht.
     43 			// Falls gefunden, wird der DN (=der eindeutige Schl�ssel im Verzeichnis) ermittelt.
     44 			$dn = $ldap->searchUser($username);
     45 
     46 			if (empty($dn)) {
     47 				Logger::debug('User not found in LDAP directory');
     48 				return false; // Kein LDAP-Account gefunden.
     49 			}
     50 
     51 			Logger::debug('User found: ' . $dn);
     52 		} else {
     53 			$dn = str_replace('{user}', $username, $conf['ldap']['dn']);
     54 		}
     55 
     56 		// LDAP-Login versuchen
     57 		$ok = $ldap->bind($dn, $password);
     58 
     59 		Logger::debug('LDAP bind: ' . ($ok ? 'success' : 'failed'));
     60 
     61 		if (!$ok)
     62 			return false;
     63 
     64 		$sucheAttribut = $conf['ldap']['authorize']['group_name'];
     65 		$sucheFilter = str_replace('{dn}', $dn, $conf['ldap']['authorize']['group_filter']);
     66 
     67 		$this->groups = $ldap->searchAttribute($sucheFilter, $sucheAttribut);
     68 		$user = new User($userid);
     69 
     70 		// Html::debug($this->groups,'Gruppen/Ids des Benutzers');
     71 
     72 		// Verbindung zum LDAP-Server brav beenden
     73 		$ldap->close();
     74 
     75 		return true;
     76 	}
     77 
     78 	public function username()
     79 	{
     80 		return null;
     81 	}
     82 
     83 }
     84 
     85 ?>