/** * Retourne un object utilisateur (si les information de connection sont valide) * @param string $_login nom d'utilisateur * @param string $_mdp motsz de passe en sha1 * @return user object user */ public static function connect($_login, $_mdp, $_passAlreadyEncode = false) { if ($_passAlreadyEncode) { $sMdp = $_mdp; } else { $sMdp = sha1($_mdp); } if (config::byKey('ldap:enable') == '1') { log::add("connection", "debug", __('Authentification par LDAP', __FILE__)); $ad = self::connectToLDAP(); if ($ad !== false) { log::add("connection", "debug", __('Connection au LDAP OK', __FILE__)); $ad = ldap_connect(config::byKey('ldap:host'), config::byKey('ldap:port')); ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($ad, LDAP_OPT_REFERRALS, 0); if (!ldap_bind($ad, 'uid=' . $_login . ',' . config::byKey('ldap:basedn'), $_mdp)) { log::add("connection", "info", __('Mot de passe erroné (', __FILE__) . $_login . ')'); return false; } log::add("connection", "debug", __('Bind user OK', __FILE__)); $result = ldap_search($ad, 'uid=' . $_login . ',' . config::byKey('ldap:basedn'), config::byKey('ldap:filter')); log::add("connection", "info", __('Recherche LDAP (', __FILE__) . $_login . ')'); if ($result) { $entries = ldap_get_entries($ad, $result); if ($entries['count'] > 0) { $user = self::byLogin($_login); if (is_object($user)) { $user->setPassword($sMdp); $user->setOptions('lastConnection', date('Y-m-d H:i:s')); $user->save(); return $user; } $user = new user(); $user->setLogin($_login); $user->setPassword($sMdp); $user->setOptions('lastConnection', date('Y-m-d H:i:s')); $user->save(); log::add("connection", "info", __('Utilisateur créé depuis le LDAP : ', __FILE__) . $_login); jeedom::event('user_connect'); log::add('event', 'event', __('Connexion de l\'utilisateur ', __FILE__) . $_login); return $user; } else { $user = self::byLogin($_login); if (is_object($user)) { $user->remove(); } log::add("connection", "info", __('Utilisateur non autorisé à accéder à Jeedom (', __FILE__) . $_login . ')'); return false; } } else { $user = self::byLogin($_login); if (is_object($user)) { $user->remove(); } log::add("connection", "info", __('Utilisateur non autorisé à accéder à Jeedom (', __FILE__) . $_login . ')'); return false; } return false; } else { log::add("connection", "info", __('Impossible de se connecter au LDAP', __FILE__)); } } $values = array('login' => $_login, 'password' => $sMdp); $sql = 'SELECT ' . DB::buildField(__CLASS__) . ' FROM user WHERE login=:login AND password=:password'; $user = DB::Prepare($sql, $values, DB::FETCH_TYPE_ROW, PDO::FETCH_CLASS, __CLASS__); if (is_object($user)) { $user->setOptions('lastConnection', date('Y-m-d H:i:s')); $user->save(); jeedom::event('user_connect'); log::add('event', 'event', __('Connexion de l\'utilisateur ', __FILE__) . $_login); if ($user->getOptions('validity_limit') != '' && strtotime('now') > strtotime($user->getOptions('validity_limit'))) { $user->remove(); return false; } } return $user; }
/** * Retourne un object utilisateur (si les information de connection sont valide) * @param string $_login nom d'utilisateur * @param string $_mdp motsz de passe en sha1 * @return user object user */ public static function connect($_login, $_mdp, $_hash = false) { if (!$_hash) { $sMdp = sha1($_mdp); } if (config::byKey('ldap:enable') == '1' && !$_hash) { log::add("connection", "debug", __('Authentification par LDAP', __FILE__)); $ad = self::connectToLDAP(); if ($ad !== false) { log::add("connection", "debug", __('Connection au LDAP OK', __FILE__)); $ad = ldap_connect(config::byKey('ldap:host'), config::byKey('ldap:port')); ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($ad, LDAP_OPT_REFERRALS, 0); if (!ldap_bind($ad, 'uid=' . $_login . ',' . config::byKey('ldap:basedn'), $_mdp)) { log::add("connection", "info", __('Mot de passe erroné (', __FILE__) . $_login . ')'); return false; } log::add("connection", "debug", __('Bind user OK', __FILE__)); $result = ldap_search($ad, 'uid=' . $_login . ',' . config::byKey('ldap:basedn'), config::byKey('ldap:filter')); log::add("connection", "info", __('Recherche LDAP (', __FILE__) . $_login . ')'); if ($result) { $entries = ldap_get_entries($ad, $result); if ($entries['count'] > 0) { $user = self::byLogin($_login); if (is_object($user)) { $user->setPassword($sMdp); $user->setOptions('lastConnection', date('Y-m-d H:i:s')); $user->save(); return $user; } $user = new user(); $user->setLogin($_login); $user->setPassword($sMdp); $user->setOptions('lastConnection', date('Y-m-d H:i:s')); $user->save(); log::add("connection", "info", __('Utilisateur créé depuis le LDAP : ', __FILE__) . $_login); jeedom::event('user_connect'); log::add('event', 'event', __('Connexion de l\'utilisateur ', __FILE__) . $_login); return $user; } else { $user = self::byLogin($_login); if (is_object($user)) { $user->remove(); } log::add("connection", "info", __('Utilisateur non autorisé à accéder à Jeedom (', __FILE__) . $_login . ')'); return false; } } else { $user = self::byLogin($_login); if (is_object($user)) { $user->remove(); } log::add("connection", "info", __('Utilisateur non autorisé à accéder à Jeedom (', __FILE__) . $_login . ')'); return false; } return false; } else { log::add("connection", "info", __('Impossible de se connecter au LDAP', __FILE__)); } } if (!$_hash) { $user = user::byLoginAndPassword($_login, $sMdp); } else { $user = user::byLoginAndHash($_login, $_mdp); } if (is_object($user)) { $user->getHash(); $user->setOptions('lastConnection', date('Y-m-d H:i:s')); $user->save(); jeedom::event('user_connect'); log::add('event', 'event', __('Connexion de l\'utilisateur ', __FILE__) . $_login); if ($user->getOptions('validity_limit') != '' && strtotime('now') > strtotime($user->getOptions('validity_limit'))) { $user->remove(); return false; } } return $user; }