Модуль автоматического входа

Технические вопросы по UTM 5.0
Ответить
Аватара пользователя
marvin
Сообщения: 77
Зарегистрирован: Сб мар 24, 2007 11:18
Откуда: Нижняя Тура

Модуль автоматического входа

Сообщение marvin »

Может кому пригодится: простой, возможно несекьюрный, вариант модуля автоматического входа в личный кабинет на основе ip-адреса vpn клиента. Называем файл 02_login_auto.php и ложим рядом с 00_login.php.

Код: Выделить всё

<?php

$MOD_TITLE='login_user';
$MOD_GROUP='Автоматический вход';
$MOD_VISIBLE=true;
$MOD_CLASS='LoginAutoModule';
$MOD_LOGIN=true;
$MOD_SYSTEM=1;

if&#40;!class_exists&#40;$MOD_CLASS&#41;&#41; &#123;

class LoginAutoModule extends Module &#123;

    function init&#40;&#41; &#123;

        $config = file&#40;'/netup/utm5/utm5.cfg'&#41;;
        foreach&#40;$config as $line&#41;&#123;if&#40;preg_match&#40;"/^&#40;&#91;^#&#93;.+?&#41;=&#40;.*&#41;$/", $line, $param&#41;&#41;&#123;$$param&#91;1&#93;=$param&#91;2&#93;;&#125;&#125;

        mysql_connect&#40;$database_host, $database_login, $database_password&#41;;
        mysql_select_db&#40;$database&#41;;

        $client=ip2long&#40;$_SERVER&#91;'REMOTE_ADDR'&#93;&#41;;

        $result = mysql_query&#40;"SELECT users.login, users.password FROM ip_groups
            LEFT JOIN iptraffic_service_links ON iptraffic_service_links.ip_group_id = ip_groups.ip_group_id
            LEFT JOIN service_links ON service_links.id = iptraffic_service_links.id
            LEFT JOIN users_accounts ON users_accounts.id = service_links.account_id
            LEFT JOIN users ON users.id = users_accounts.uid
            WHERE ip_groups.ip LIKE &#40;$client & 4294967295&#41; AND ip_groups.is_deleted = 0 AND &#40;ip_groups.ip_type & 0x1&#41; = 0x0"&#41;;
        $credentials = mysql_fetch_assoc&#40;$result&#41;;
        mysql_free_result&#40;$result&#41;;

        global $MOD_TITLE,$MOD_GROUP,$MOD_VISIBLE,$MOD_LOGIN,$MOD_SYSTEM;
        parent&#58;&#58;init&#40;$MOD_TITLE,$MOD_GROUP,$MOD_VISIBLE,$MOD_LOGIN&#41;;
        if&#40;isset&#40;$credentials&#91;'login'&#93;&#41; && isset&#40;$credentials&#91;'password'&#93;&#41;&#41; &#123;
            if&#40;$credentials&#91;'login'&#93; == '' || $credentials&#91;'password'&#93; == ''&#41; &#123;
                $this->addErrorMessage&#40;langGet&#40;'login_or_password_is_empty'&#41;&#41;;
                return false;
            &#125;
            global $CONF_CORE_HOST,$CONF_CORE_PORT,$CONF_PATH;
            if&#40;$this->urfa->connect&#40;$CONF_CORE_HOST,$CONF_CORE_PORT&#41; != false&#41;
                    if&#40;$this->urfa->open_session&#40;$credentials&#91;'login'&#93;,trim&#40;$credentials&#91;'password'&#93;&#41;,false,$_SERVER&#91;'REMOTE_ADDR'&#93;&#41; != false && $this->urfa->call&#40;-0x4052&#41; && $this->urfa->send&#40;&#41;&#41; &#123;
                    setcookie&#40;'utm5',$this->urfa->get_key&#40;&#41;&#41;;
                    setcookie&#40;'user',$credentials&#91;'login'&#93;&#41;;
                    setcookie&#40;'system', $MOD_SYSTEM&#41;;

                    $this->urfa->close_session&#40;&#41;;
                    $this->urfa->disconnect&#40;&#41;;
                    header&#40;"Location&#58; ".$CONF_PATH&#41;;
                    return true;
                &#125; else &#123;
                    $this->addErrorMessage&#40;langGet&#40;'username_or_password_incorrect'&#41;&#41;;
                    return false;
                &#125;
        &#125;
    &#125;

    function writeBody&#40;&#41; &#123;
        global $MOD_TITLE,$MOD_GROUP,$MOD_VISIBLE;
        parent&#58;&#58;init&#40;$MOD_TITLE,$MOD_GROUP,$MOD_VISIBLE&#41;;
        global $CONF_PATH;
        $this->urfa->close_session&#40;true&#41;;
        $this->urfa->disconnect&#40;&#41;;
        setcookie&#40;'utm5','',time&#40;&#41;-3600&#41;;
        setcookie&#40;'system','',time&#40;&#41;-3600&#41;;
        header&#40;"Location&#58; ".$CONF_PATH&#41;;
        die;
    &#125;
&#125;

&#125;

?>

BasilKlyev
Сообщения: 15
Зарегистрирован: Чт ноя 24, 2011 06:39

Сообщение BasilKlyev »

В пхп не гений поэтому вопрос :
Часть абонентов сидят за натом и имеют серые айпишники.
Будет ли для них работать классический вход по логину-паролю ?

Аватара пользователя
marvin
Сообщения: 77
Зарегистрирован: Сб мар 24, 2007 11:18
Откуда: Нижняя Тура

Сообщение marvin »

Будет. При установке этого модуля просто появится дополнительный пункт в меню слева на странице входа.

Также должен заметить, что действие автоматического логина можно расширить и на не-vpn адреса (если они в вашей схеме используются), если убрать дополнительное условие "AND (ip_groups.ip_type & 0x1) = 0x0" в sql-запросе.

BasilKlyev
Сообщения: 15
Зарегистрирован: Чт ноя 24, 2011 06:39

Сообщение BasilKlyev »

Не соблаговолит ли уважаемый джин ... :D

Хорошая идея, но у нас в одном биллинге сидят еще и юрлица.
У них свои тарифы и им заблокирован доступ в ЛК замененным паролем от ЛК(дабы они себе не включили подешевле тариф для физлиц).
Возможно ли добавить в данный скрипт проверку наличия данных в ячейке "Квартира", и только для них разрешить доступ по IP?
Абонентов с частного сектора у которых ячейка "Квартира" пустая не так уж и много - они и по логину авторизуются.

Аватара пользователя
marvin
Сообщения: 77
Зарегистрирован: Сб мар 24, 2007 11:18
Откуда: Нижняя Тура

Сообщение marvin »

Для этого достаточно дописать "AND users.flat_number NOT LIKE ''".

Однако! Не логичнее ли проверять не по наличию номера квартиры (туда ведь можно и номер офиса случайно забить), а по флагу юридического лица? Тогда дополнительное условие будет выглядеть как "AND users.is_juridical = 0".

Впрочем это всё конечно зависит от вашей схемы данных и культуры ведения базы 8)

BasilKlyev
Сообщения: 15
Зарегистрирован: Чт ноя 24, 2011 06:39

Сообщение BasilKlyev »

marvin писал(а):туда ведь можно и номер офиса случайно забить
Ведение биллинга производится только мною. Так что никто не забьет ничего.
У нас уже устоялось, что офис вписывается в туже строчку что и фактический адрес.
А вот про поле юрлица я и не подумал :D
Спасибо за помощь.

kirush
Сообщения: 699
Зарегистрирован: Пт фев 04, 2005 13:58

Сообщение kirush »

А можно еще всех юр лиц добавить в группу Юридические лица и в настройках функции смена тарифа оставить только физ лиц.

BasilKlyev
Сообщения: 15
Зарегистрирован: Чт ноя 24, 2011 06:39

Сообщение BasilKlyev »

kirush писал(а):в настройках функции смена тарифа оставить только физ лиц.
Век живи век учись ))
Спасибо. Все получилось.
marvin не работает ...

Версия 5.2.1-008 u2 .

Код: Выделить всё

Неверное перенаправление на странице

Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится.

    Эта проблема может возникать при отключении или запрещении принятия кук.

Ответить