==== XML ====
Регистрация MAC адреса
Kayfolom
ekorepov@ukhta-inform.ru
authorUrl
2011
c
license
1.0
Регистрация MAC адреса
mac_registration.php
==== PHP ====
registerEvent( 'onPrepareContent', 'plgMAC_Registration_UTM' );
function plgMAC_Registration_UTM(&$row, &$params, $page=0){
$pos = strpos($row->text, '{mac_registration}');
if ($pos===false) return;
include ("./urfa/URFAConfig.php");
$ip_temp_wildcart = '10.0.15.'; // маска пула адресов выдаваемого dhcp не зарегистрированному оборудованию
$grey_ip_wildcart = '10.0.';
$id_once_service_registration = 217;
$registration_notice = "Стоимость услуги 30 рублей. Сумма спишется с лицевого счета автоматически.";
$mac_registration_html = '';
// $row->text = preg_replace('/{mac_registration}/', '', $row->text);
function resolve_mac_for_ip($ip){
$found_mac = NULL;
$f_in = fopen("/proc/net/arp","r");
if ($f_in != NULL){
fgets($f_in);
while (!feof($f_in)){
$t = fgets($f_in);
if ($t != NULL){
$str_split = preg_split ("/[\s]+/", $t);
if ($str_split[0]==$ip) {
$found_mac = $str_split[3];
break;
};
};
};
fclose($f_in);
};
$found_mac = strtolower($found_mac);
return $found_mac;
};
$ip_current = $_SERVER["REMOTE_ADDR"];
$pos = strpos($ip_current, $ip_temp_wildcart);
if ($pos===false) {
$mac_registration_html = '
Ваш компьютер уже зарегистрирован. Дополнительные действия не требуются.';
$row->text = preg_replace('/{mac_registration}/', $mac_registration_html, $row->text);
return;
}
$mac_registration_html = '
';
// Форма начало ************************************
if (isset($uri->_vars['action'])) unset($uri->_vars['action']);
if (isset($uri->_vars['action_accept'])) unset($uri->_vars['action_accept']);
$form_body = "
".$registration_notice."
".'';
$mac_registration_html = $form_body;
// Форма конец ************************************
// Обработка POST начало
$action = JRequest::getVar('action');
$action_accept = JRequest::getVar('action_accept');
if (isset($action) && isset($action_accept)) {
$mac_registration_html = '';
try {
$urfa_admin = new URFAClient_Admin($UTMCore_Login, $UTMCore_Password);
} catch (Exception $exception) {
echo "Error in line ", $exception->getLine();
echo $exception->getMessage();
}
$mac_new = resolve_mac_for_ip($_SERVER['REMOTE_ADDR']);
$service_new['user_id'] = $_SESSION['URFA']['user_id'];
$service_new['account_id'] = $_SESSION['URFA']['basic_account'];
// Выясняем id сервисной связки
// echo $service_new['account_id'];
$services = $urfa_admin->rpcf_get_all_services_for_user($service_new['account_id']);
foreach ($services['services'] as $key => $value) {
if ($services['services'][$key]['type']==3) {
$slink_id = $services['services'][$key]['slink_id'];
$service_new['service_id'] = $services['services'][$key]['id'];
$service_new['service_type'] = $services['services'][$key]['type'];
$service_new['slink_id'] = $services['services'][$key]['slink_id'];
}
}
// получаем список сервисов и список связок ip&mac в том числе
$services_tariff = $urfa_admin->rpcf_get_iptraffic_service_link($slink_id); // { //0x2702
// Получаем первый ip вида 10.0.* ($grey_ip_mask)
$service_new['tariff_link_id'] = $services_tariff['tariff_link_id'];
$service_new['discount_period_id'] = $services_tariff['discount_period_id'];
$service_new['ip_groups_count'] = 1;
foreach ($services_tariff['ip_groups'] as $key => $value) {
$pos = strpos($services_tariff['ip_groups'][$key]['ip'], $grey_ip_wildcart);
if ($pos!==false) {
// echo "Адрес найден !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\r\n";
$service_new['ip_groups'][0]['ip_address'] = $services_tariff['ip_groups'][$key]['ip'];
$service_new['ip_groups'][0]['mask'] = $services_tariff['ip_groups'][$key]['mask'];
$service_new['ip_groups'][0]['mac'] = $services_tariff['ip_groups'][$key]['mac'];
$service_new['ip_groups'][0]['iptraffic_login'] = $services_tariff['ip_groups'][$key]['login'];
$service_new['ip_groups'][0]['iptraffic_allowed_cid'] = $services_tariff['ip_groups'][$key]['allowed_cid'];
$service_new['ip_groups'][0]['iptraffic_password'] = $services_tariff['ip_groups'][$key]['password'];
$service_new['ip_groups'][0]['ip_not_vpn'] = $services_tariff['ip_groups'][$key]['not_vpn'];
$service_new['ip_groups'][0]['dont_use_fw'] = $services_tariff['ip_groups'][$key]['dont_use_fw'];
$service_new['ip_groups'][0]['router_id'] = $services_tariff['ip_groups'][$key]['router_id'];
// print_r($service_new);
break;
}
}
if ($mac_new==$service_new['ip_groups'][0]['mac']) {
$mac_registration_html = "
Компьютер уже зарегистрирован, перезагрузите компьютер для вступления изменений в силу.";
} else {
$service_new['ip_groups'][0]['mac'] = $mac_new;
$report = $urfa_admin->rpcf_delete_from_ipgroup($service_new['slink_id'],$service_new['ip_groups'][0]['ip_address'],$service_new['ip_groups'][0]['mask']); //{ //0x5101
$report = $urfa_admin->rpcf_add_service_to_user($service_new); // { //0x2551
$urfa_admin->rpcf_add_once_service_to_user($service_new['user_id'],$service_new['account_id'],$id_once_service_registration,0,0,time(),1,0); //0x2555
$mac_registration_html = "
Регистрация завершена. Обязательно перезагрузите компьютер для вступления изменений в силу.";
}
}
// Обработка POST конец
$row->text = preg_replace('/{mac_registration}/', $mac_registration_html, $row->text);
}
?>
==== SQL ====
==== HTML ====
{mac_registration}