/**
* Проверяем логин-пароль используя AD. Если в БД такого пользователя нет, до добавляем
* @param type $username
* @param type $password
* @return null/int если авторизация удалась возвращаем id из БД.
*/
public static function AuthByAD($username,$password){
$params = require(__DIR__ . '/../config/web.php');
$value = \yii\helpers\ArrayHelper::getValue($params, 'params');
$ldap_con = ldap_connect($value["ldap_server"]) or die("Could not connect to LDAP server.");
// Устанавливаем флажки протокола
ldap_set_option($ldap_con, LDAP_OPT_PROTOCOL_VERSION, 3); // AD Windows 2003 и выше
ldap_set_option($ldap_con, LDAP_OPT_REFERRALS, 0); //Определяет, следовать ли автоматически рефералам, возвращенным сервером LDAP. Зачем нужно - не понятно
// авторизуемся в AD
$ldapbind = @ldap_bind($ldap_con, $username."@".$value["ldap_server"], $password);
if ($ldapbind==false) return null;
$user_id=SELF::GetIdByLoginFromDB($username);
if ($user_id!=null) return $user_id;
//если такого логина нет в БД, то добавляем..
$res=(new \yii\db\Query())->createCommand()->insert('users', ['login' =>$username])->execute();
if ($res==false){
die("Не удалось вставить запись с новым пользователем..Увы и ах..");
};
$user_id=$this->GetIdByLoginFromDB($username);
if ($user_id!=null) return $user_id;
return null;
}
/**
* Получаем id пользователя по логину из БД
* @param type $login
* @return type null/id null если пользователь не найден
*/
public static function GetIdByLoginFromDB($login){
$rows = (new \yii\db\Query())->select(['id'])->from('users')->where(['login' => $login])->limit(1)->all();
if (count($rows)>0) {
return $rows[0]["id"];
} else {
return null;
};
}
/**
* Получить расширенную информацию о пользователе БД по его ID
* @param type $id
* @return string
*/
public static function GetExtendInfoByIdFromDB($id){
$rows = (new \yii\db\Query())->select(['id',"login","name","photo","email","last_updated"])->from('users')->where(['id' => $id])->limit(1)->all();
if (count($rows)>0) {
$rows[0]["username"]=$rows[0]["login"];
$rows[0]["password"]="";
$rows[0]["authKey"]=$rows[0]["id"]."key";
$rows[0]["accessToken"]=$rows[0]["id"]."-token";
return $rows[0];
} else {
return null;
};
}