BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 22 май 2024, 05:32

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Radius - аутентификация(BGBS)
СообщениеДобавлено: 16 апр 2009, 14:24 
Не в сети
Клиент

Зарегистрирован: 20 мар 2008, 20:20
Сообщения: 676
Откуда: Россия, Иваново
Карма: 36
Реализовал вот такую логику:
Для договоров pfid=2 и fc=0 разрешено подключаться к VPN серверу только с определенных сетей.
Код:
import bitel.billing.server.call.bean.*;
import bitel.billing.server.radius.*;
import bitel.billing.server.dialup.bean.*;
import bitel.billing.server.contract.bean.*;
import bitel.billing.server.script.event.*;
import bitel.billing.server.util.*;

import java.sql.*;
import java.util.*;

private getLogin_( req, resp )
{
      result = null;
      userName = req.getStringAttribute( RadiusStandartAttributes.User_Name );

      if ( userName != null )
      {
            int pos = userName.indexOf( '\\' );
            if( pos >= 0 )
            {
                userName = userName.substring( pos + 1 );
            }

         try
         {
          date_ = new java.util.Date();
            result = new DialUpLoginManager( con, mid ).findLogin( userName,date_ );
         }
         catch ( Exception ex )
         {
            ex.printStackTrace();
         }
         finally
         {
            //setup.returnConToPool( con );
         }
      }

      return result;
}
private WriteErrorLogin()
{
   query = "SELECT max(id) FROM log_server_"+mid+"_"+TimeUtils.format(DateNow, "yyyyMM")+" WHERE requests LIKE '%User-Name="+User_Name+"\n%'";
   ps = con.prepareStatement(query);
   rs = ps.executeQuery();
   if ( !rs.next() )
   {
      return;
   }
   log_rec_id = rs.getInt(1);
   query = "SELECT id FROM nas_"+mid+" WHERE inet_ntoa(ipaddr)='"+nas_ip+"'";
   ps = con.prepareStatement(query);
   rs = ps.executeQuery();
   if ( !rs.next() )
   {
      return;
   }
   nas_id = rs.getInt(1);
   query = "SELECT * FROM log_error_"+mid+"_"+TimeUtils.format(DateNow, "yyyyMM")+" WHERE log_rec_id='"+log_rec_id+"'";
   ps = con.prepareStatement(query);
   rs = ps.executeQuery();
   if ( rs.next() )
   {
      return;
   }
   query = "INSERT INTO log_error_"+mid+"_"+TimeUtils.format(DateNow, "yyyyMM")+" (dt,cid,lid,login,nas_id,error_code,log_rec_id) "+
   "VALUES ('"+TimeUtils.format(DateNow, "yyyy-MM-dd HH:mm:ss")+"', '"+cid+"', '"+login_id+"', '"+User_Name+"', '"+nas_id+"', '27', '"+log_rec_id+"')";
   psUpdate = con.prepareStatement( query );
   psUpdate.executeUpdate();
}

mid = 1;
//Не проверять Calling_Station_Id
GROUP_NOT_Calling_Station_Id = 20;

request  = event.getRequest();
response = event.getResponse();
con = setup.getDBConnectionFromPool();

User_Name = request.getStringAttribute(RadiusStandartAttributes.User_Name);
nas = request.getNAS();
nas_ip = nas.getNASIPAddress();
login = getLogin_(request,response);
login_ip = request.getStringAttribute(RadiusStandartAttributes.Calling_Station_Id);
login_id = login.getId();

cid = login.getCid();
contract = new ContractManager(con).getContractByID(cid);
contract_firma = contract.getFirmID();
contract_fc = contract.getFc();
contract_groups = contract.getGroups();

DateNow = new GregorianCalendar();
if (contract_firma == null)
{
   setup.returnConToPool( con );
   return;
};
if (nas_ip.indexOf("172.16.128.4") != -1)
{
   setup.returnConToPool( con );
   return;
};
if ((contract_groups & (1L<<GROUP_NOT_Calling_Station_Id )) > 0)
{
   setup.returnConToPool( con );
   return;
};

//ISPU физики
if (contract_firma == 2 && contract_fc == 0 && !login_ip.matches("^10\\.[1-4]\\.[0-9]{1,3}\\.[0-9]{1,3}$"))
{
   response.setPacketType(RadiusPacket.AUTHENTICATION_REJECT);
   print("Drop "+User_Name+" "+login_ip);
   WriteErrorLogin();
   setup.returnConToPool( con );
   return;
}

//Обязательно закрыть соединение, иначе беда :)
setup.returnConToPool( con );


Все работает так как планировалось. Но мне не нравится функция WriteErrorLogin(), которая запивывае код ошибки в таблицу log_error_<mid>_<yyyymm>.
Возможно ли записать ошибку используя API?
Если можно, то подскажите как?

Спасибо.

вер. 4.5


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 апр 2009, 17:12 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Нет, к сожалению API для этого нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 апр 2009, 17:15 
Не в сети
Клиент

Зарегистрирован: 20 мар 2008, 20:20
Сообщения: 676
Откуда: Россия, Иваново
Карма: 36
Жаль.
Закинуть в wiki?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 17 апр 2009, 17:46 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Да, если не трудно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 18 апр 2009, 18:53 
Не в сети
Клиент

Зарегистрирован: 12 фев 2008, 18:10
Сообщения: 3951
Карма: 249
делал почти тоже самое, только с VLAN-ами ... сейчас переписал все из скрипта авторизации в скрипт предобработки и разделил всех по услугам времени :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.073s | 28 Queries | GZIP : On ]