Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
Алексей Пикуров
Итак, задача: необходимо реализовать специальный "белый список" IP адресов, но не общий, абсолютно для всех, который уже реализован в MyChat Server, а специальный, индивидуально под определённых пользователей, которые будут подключаться к серверу.

То есть, говоря проще, пользователю с UIN 6 разрешено подключаться строго с 127.0.0.1 и с 192.168.10.1, а пользователю с UIN 13 - только с 127.0.0.1 и с 213.1308.24.149. Как это реализовать?

Нам нужно событие скриптового движка OnUserLogin. Схема простая: пользователь подключается к серверу, авторизуется, потом мы смотрим, подходит ли IP адрес, и если нет - отключаем юзера без лишних разговоров.
scriptwhitelist.png
Индивидуальный "белый список" IP адресов для подключения пользователей к MyChat Server

А вот и сам текст скрипта:
Код: Выделить всё
const
  n = 2;

type
  UserData = record
    iUIN: integer;
    sIPWhiteList: string;
  end;

var
  iUIN, iState, i: integer;
  sIP, sMAC, sHardwareID, sCompName, sVersion: string;
  UsersWhiteList: array[1..n] of UserData;
 
begin
  UsersWhiteList[1].iUIN := 6;
  UsersWhiteList[1].sIPWhiteList := '"127.0.0.1", "192.168.10.1"';
  UsersWhiteList[2].iUIN := 13;
  UsersWhiteList[2].sIPWhiteList := '"127.0.0.1", "213.130.24.149"';

  mGetCurrentUserLoginData(iUIN, iState, sIP, sMAC, sHardwareID, sCompName, sVersion);

    for i := 1 to n do
      if UsersWhiteList[1].iUIN = iUIN then
        if pos('"' + sIP + '"', UsersWhiteList[1].sIPWhiteList) = 0 then
          mKillMyChatClient(iUIN);
end.

В примере для простоты и скорости в тексте скрипта вбиты UIN-ы и списки разрешённых адресов, обрамлённые двойными кавычками.

Можно было бы загружать этот список из файла, однако, если к серверу будет подключаться большое количество пользователей - мы получим нежелательные "тормоза", потому что обрабатывать подключения сервер должен максимально быстро.
korol_ru
а он с AD пользовотелями работает? А то у нас всё равно с других айпишников подключается юзер((
Аватара пользователя
Алексей Пикуров
Скрипту всё равно, с какими пользователями работать. По тексту же видно, что он UIN-ы обрабатывает. UIN есть у любого MyChat-пользователя.
А то у нас всё равно с других айпишников подключается юзер((

Не понял, вы о чём?
korol_ru
я в скрипте прописал ID и IP ,но всё равно этот пользователь подключается с других IP, я наверное, что-о не так делаю
korol_ru
да, установили поверх
Аватара пользователя
Алексей Пикуров
Скрипт включен? Покажите ваш текст скрипта и скриншот окна сервера со скриптом. В логах сервера прописывается, что скрипт успешно отработал? Вы проверяли его корректность (Ctrl+F9) ?
korol_ru
извиняюсь, косанул, не в том событии код написал. Щас проверили, получается как...юзер в онлайне, заходим с другого ip, идёт подключение и сразу отключение, но при этом юзер вылетает из чата, сидя на белом ip
Аватара пользователя
Алексей Пикуров
Ещё раз, совершенно не важно, какой IP у юзера, белый или не белый. Скрипту это не интересно, он просто смотрит IP подключающегося пользователя и всё.
Да, пользователь будет отключаться, если вы логинитесь тем же UIN-ом с другого компьютера, при условии, что у вас стоит настройка на сервере "Администрирование" - "Разные настройки" - "Автозавершение работы MyChat клиента при логине с другого компьютера".

Если вы эту настройку снимете, пользователь-дубль вообще не законнектится, пока его "оригинал" не выйдет из чата, это логично.
korol_ru
теперь всё ясно, спасибо за помощь)
Аватара пользователя
Xornz
Здравствуйте.
А этот скрипт на версии 6.0 работает ? Синтаксис не поменялся ???
Хочу его изменить, добавив список Белых MAC-ов юзверям (у вас там переменная sMAC похоже за это отвечает).
Аватара пользователя
Алексей Пикуров
Добрый день. Да, конечно работает. Меняйте, без проблем :) Сделайте новую тему в форуме, если будут неясности, я помогу.