Ejemplo n.º 1
0
    /**
     *	@author Anthony Boutinov
     *	
     *	@param string $login_or_email		Логин или email
     *	@retval array|false					Ассоциативный массив с ключами EMAIL, LOGIN, PASSWORD_RESET_TOKEN. Если пользователь с таким логином или email не найден, возвращается false
     */
    public function initiatePasswordReset($login_or_email)
    {
        $is_email = filter_var($login_or_email, FILTER_VALIDATE_EMAIL);
        $this->sanitize($login_or_email);
        $password_restore_token = CommonFunctions::generateRandomString(64);
        $this->sanitize($password_restore_token);
        $sql = 'update CM$DB_USER set PASSWORD_RESET_TOKEN=\'' . password_hash($password_restore_token, PASSWORD_BCRYPT) . '\' where ';
        if ($is_email) {
            $sql = $sql . 'ID_DB_USER=(
					select ID_DB_USER
					from SP$VAR
					where
						VALUE=\'' . $login_or_email . '\'
						and ID_DICTIONARY=(
							select ID_DICTIONARY
							from CM$DICTIONARY
							where SHORT_NAME=\'EMAIL\'
						)
				)';
        } else {
            $sql = $sql . 'login=\'' . $login_or_email . '\'';
        }
        $this->getQueryResultWithErrorNoticing($sql);
        $login = $login_or_email;
        $email = $login_or_email;
        if ($is_email) {
            $email = $login_or_email;
            $sql = 'select LOGIN
				from CM$DB_USER
				where ID_DB_USER=(
					select ID_DB_USER
					from SP$VAR
					where
						VALUE=\'' . $login_or_email . '\'
						and ID_DICTIONARY=(
							select ID_DICTIONARY
							from CM$DICTIONARY
							where SHORT_NAME=\'EMAIL\'
						)
				)';
            $result = $this->getQueryFirstRowResultWithErrorNoticing($sql, null, true);
            if (!$result) {
                return false;
            } else {
                $login = $result['LOGIN'];
            }
        } else {
            $sql = 'select VALUE as EMAIL from SP$VAR
				where ID_DB_USER=(
						select ID_DB_USER from CM$DB_USER
						where LOGIN=\'' . $login_or_email . '\'
					) and ID_DICTIONARY=(
						select ID_DICTIONARY from CM$DICTIONARY
						where SHORT_NAME=\'EMAIL\'
					)';
            $result = $this->getQueryFirstRowResultWithErrorNoticing($sql, null, true);
            if (!$result) {
                return false;
            } else {
                $email = $result['EMAIL'];
            }
        }
        return ['PASSWORD_RESET_TOKEN' => $password_restore_token, 'LOGIN' => $login, 'EMAIL' => $email];
    }