Revize 953
Přidáno uživatelem Michal Kliment před více než 13 roky(ů)
freenetis/branches/subnets_assigning/media/css/style.css | ||
---|---|---|
|
||
.help {
|
||
cursor: help;
|
||
}
|
||
|
||
.red {
|
||
color: red;
|
||
}
|
freenetis/branches/subnets_assigning/application/i18n/cs_CZ/texts.php | ||
---|---|---|
'address point has been successfully deleted' => 'Adresní bod byl úspěšně smazán.',
|
||
'address point has been successfully updated' => 'Adresní bod byl úspěšně aktualizován.',
|
||
'address points' => 'Adresní body',
|
||
'address ranges' => 'Adresní rozsahy',
|
||
'additional contacts have been successfully updated' => 'Další kontakty úspěšně uloženy',
|
||
'administrate additional contacts' => 'Přidávání/editace dalších kontaktních informací',
|
||
'administration' => 'Administrace',
|
||
... | ... | |
'item number' => 'Položka č.',
|
||
'item separator' => 'Oddělovač položek',
|
||
'item(s) have been successfully added' => 'položka(ek) bylo úspěšně přidáno',
|
||
'is not in system' => 'Není v systému',
|
||
'is not telephonists' => 'Není telefonista',
|
||
'is missing from' => 'chybí z',
|
||
'january' => 'Leden',
|
||
... | ... | |
'netmask' => 'Maska',
|
||
'network address' => 'Síťová adresa',
|
||
'network address does not match the mask' => 'Síťová adresa neodpovídá zadané masce.',
|
||
'network settings' => 'Nastavení sítě',
|
||
'networks' => 'Síť',
|
||
'never' => 'Nikdy',
|
||
'never redirect' => 'Nikdy nepřesměrovat',
|
freenetis/branches/subnets_assigning/application/helpers/network.php | ||
---|---|---|
class network_Core {
|
||
|
||
/**
|
||
* Convert netmask in classic format (eg. 255.255.255.0] in CIDR format (/24)
|
||
* Converts netmask in classic format (eg. 255.255.255.0) to CIDR format (/24)
|
||
* @author Michal Kliment
|
||
* @param string
|
||
* @return string
|
||
*/
|
||
public static function netmask2cidr($netmask)
|
||
{
|
||
return 32 - log(~ip2long($netmask) + 1, 2);
|
||
return 32 - log((~ip2long($netmask) & 0xffffffff) + 1, 2);
|
||
}
|
||
|
||
/**
|
||
* Converts netmask in CIDR format (eg. /24) to classic format (255.255.255.0)
|
||
*
|
||
* @author Michal Kliment
|
||
* @param string $cidr
|
||
* @return string
|
||
*/
|
||
public static function cidr2netmask ($cidr)
|
||
{
|
||
return long2ip(~(pow(2,32 - $cidr)-1) & 0xffffffff);
|
||
}
|
||
|
||
/**
|
||
* Formats size
|
||
*
|
||
* @author Michal Kliment
|
||
... | ... | |
return ($size) ? $size.' '.$unit : '0 '.$unit;
|
||
}
|
||
|
||
/**
|
||
* Checks whether ip address belongs to default address ranges
|
||
*
|
||
* @author Michal Kliment
|
||
* @param string $ip_address
|
||
* @return boolean
|
||
*/
|
||
public static function ip_address_in_ranges ($ip_address)
|
||
{
|
||
// default address range is not set, return true
|
||
if (($ranges = Settings::get('address_ranges')) == '')
|
||
return true;
|
||
|
||
// transform ip to long
|
||
$ip_address = ip2long($ip_address);
|
||
|
||
// transform string to array
|
||
$ranges = explode(',',$ranges);
|
||
|
||
foreach ($ranges as $range_address)
|
||
{
|
||
// address contains / => it's in CIDR format
|
||
if (strpos($range_address, '/') !== FALSE)
|
||
// split address and mask
|
||
list ($range_address, $range_mask) = explode('/', $range_address);
|
||
// address is without / => it's single address
|
||
else
|
||
$range_mask = 32;
|
||
|
||
$net = ip2long($range_address);
|
||
$mask = ip2long(network::cidr2netmask($range_mask));
|
||
|
||
// success
|
||
if (($ip_address & $mask) == $net)
|
||
return true;
|
||
}
|
||
return false;;
|
||
}
|
||
|
||
}
|
freenetis/branches/subnets_assigning/application/helpers/valid.php | ||
---|---|---|
return preg_match ("/^\/([^\/]+\/)*$/", $str);
|
||
}
|
||
|
||
/**
|
||
* Checks whether a string is valid network address range (in format eg. 10.0.0.0/8)
|
||
*
|
||
* @author MIchal Kliment
|
||
* @param string $str
|
||
* @return boolean
|
||
*/
|
||
public static function address_ranges ($str)
|
||
{
|
||
if (!preg_match("/^((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])(\/([0-9]|([1-2][0-9])|(3[0-2])))?(,((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])(\/([0-9]|([1-2][0-9])|(3[0-2])))?)*$/",$str,$matches))
|
||
return false;
|
||
else
|
||
{
|
||
$ranges = explode (',', $str);
|
||
|
||
foreach ($ranges as $address)
|
||
{
|
||
if (strpos($address, '/') !== FALSE)
|
||
{
|
||
list ($address, $mask) = explode ('/',$address);
|
||
|
||
if ((ip2long($address) & ip2long(network::cidr2netmask ($mask))) != ip2long($address))
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
|
||
|
||
} // End valid
|
freenetis/branches/subnets_assigning/application/helpers/callback.php | ||
---|---|---|
* @param unknown_type $item
|
||
* @param unknown_type $name
|
||
*/
|
||
static function member_field($item, $name)
|
||
static function member_field($item, $name, $args = array())
|
||
{
|
||
if ($item->member_id)
|
||
echo html::anchor(url_lang::base()."members/show/$item->member_id", $item->member_name);
|
||
elseif (isset($args[0]))
|
||
echo $args[0];
|
||
else
|
||
echo ' ';
|
||
}
|
||
... | ... | |
)
|
||
);
|
||
}
|
||
|
||
/**
|
||
* Callback function to print traffic field in ulogd
|
||
*
|
||
*@author Michal Kliment
|
||
* @param <type> $item
|
||
* @param <type> $name
|
||
*/
|
||
public static function ulogd_traffic_field($item, $name)
|
||
{
|
||
echo "<span";
|
||
if (!$item->member_id && network::ip_address_in_ranges($item->ip_address)) echo " class='red'";
|
||
echo ">";
|
||
self::traffic_field($item, $name);
|
||
echo "</span>";
|
||
}
|
||
|
||
/**
|
||
* Callback function to print order number field in ulogd
|
||
*
|
||
* @author Michal Kliment
|
||
* @param <type> $item
|
||
* @param <type> $name
|
||
* @param <type> $args
|
||
*/
|
||
public static function ulogd_order_number_field($item, $name, $args = array())
|
||
{
|
||
echo "<span";
|
||
if (!$item->member_id && network::ip_address_in_ranges($item->ip_address)) echo " class='red'";
|
||
echo ">";
|
||
self::order_number_field($item, $name, $args);
|
||
echo "</span>";
|
||
}
|
||
|
||
/**
|
||
* Callback function to print ip address field in ulogd
|
||
*
|
||
* @author Michal Kliment
|
||
* @param <type> $item
|
||
* @param <type> $name
|
||
*/
|
||
public static function ulogd_ip_address_field($item, $name)
|
||
{
|
||
echo "<span";
|
||
if (!$item->member_id && network::ip_address_in_ranges($item->ip_address)) echo " class='red'";
|
||
echo ">";
|
||
echo $item->ip_address;
|
||
echo "</span>";
|
||
}
|
||
|
||
/**
|
||
* Callback function to print member field in ulogd
|
||
*
|
||
* @author Michal Kliment
|
||
* @param <type> $item
|
||
* @param <type> $name
|
||
* @param <type> $args
|
||
*/
|
||
public static function ulogd_member_field($item, $name, $args = array())
|
||
{
|
||
echo "<span";
|
||
if (!$item->member_id && network::ip_address_in_ranges($item->ip_address)) echo " class='red'";
|
||
echo ">";
|
||
self::member_field($item, $name, $args);
|
||
echo "</span>";
|
||
}
|
||
}
|
freenetis/branches/subnets_assigning/application/controllers/subnets.php | ||
---|---|---|
function valid_netip($input) {
|
||
$netip=ip2long($input->value);
|
||
$mask=ip2long($_POST['netmask']);
|
||
|
||
// default network adress ranges are set
|
||
if (($ranges = Settings::get('address_ranges')) != '')
|
||
{
|
||
$net_start = ip2long($input->value);
|
||
$net_end = $net_start + (~ip2long($this->input->post('netmask')) & 0xffffffff)+1;
|
||
|
||
// transform string to array
|
||
$ranges = explode(',',$ranges);
|
||
|
||
$matches = 0;
|
||
foreach ($ranges as $range_address)
|
||
{
|
||
// address contains / => it's in CIDR format
|
||
if (strpos($range_address, '/') !== FALSE)
|
||
// split address and mask
|
||
list ($range_address, $range_mask) = explode('/', $range_address);
|
||
// address is without / => it's single address
|
||
else
|
||
$range_mask = 32;
|
||
|
||
$range_start = ip2long($range_address);
|
||
$range_end = $range_start + (~ip2long(network::cidr2netmask($range_mask)) & 0xffffffff)+1;
|
||
|
||
// match
|
||
if ($net_start >= $range_start && $net_end <= $range_end)
|
||
$matches++;
|
||
}
|
||
|
||
// no matches - error!
|
||
if (!$matches)
|
||
$input->add_error('required', url_lang::lang('texts.Network address does not match any address ranges.'));
|
||
}
|
||
|
||
if ($netip==0)
|
||
$input->add_error('required', url_lang::lang('texts.Invalid network address.'));
|
freenetis/branches/subnets_assigning/application/controllers/scheduler.php | ||
---|---|---|
// update ulogd
|
||
self::update_ulogd();
|
||
|
||
// update allowed subnets
|
||
self::update_allowed_subnets();
|
||
|
||
}
|
||
|
||
/**
|
||
... | ... | |
Settings::set('ulogd_update_last', time());
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Updates allowed subnets
|
||
*
|
||
* @author Michal Kliment
|
||
*/
|
||
function update_allowed_subnets ()
|
||
{
|
||
// it's time to update
|
||
if (Settings::get('allowed_subnets_enabled') && Settings::get('allowed_subnets_update_last') + Settings::get('allowed_subnets_update_interval') < time())
|
||
{
|
||
$ip_addresses_model = new Ip_address_Model();
|
||
|
||
// updates allowed ips
|
||
$ip_addresses_model->update_allowed_ips();
|
||
|
||
$subnets_owner_model = new Subnets_owner_Model();
|
||
|
||
// updates allowed subnets
|
||
$subnets_owner_model->update_allowed_subnets();
|
||
|
||
// updates variable
|
||
Settings::set('allowed_subnets_update_last', time());
|
||
}
|
||
}
|
||
}
|
freenetis/branches/subnets_assigning/application/controllers/members.php | ||
---|---|---|
// saving account
|
||
$account->member_id = $member->id;
|
||
$account->save_throwable();
|
||
|
||
// save allowed subnets count of member
|
||
$allowed_subnets_count = new Allowed_subnets_count_Model();
|
||
$allowed_subnets_count->member_id = $member->id;
|
||
$allowed_subnets_count->count = Settings::get('allowed_subnets_default_count');
|
||
$allowed_subnets_count->save();
|
||
|
||
// insert regular member access rights
|
||
Controller::insert_phpgacl($user->id,$user->surname.' '.$user->name,$user->login, $form_data['type']);
|
||
unset($form_data);
|
||
... | ... | |
|
||
if ($this->acl_check_edit(get_class($this),'debit',$member->id))
|
||
$member->debt_payment_rate = $form_data['debt_payment_rate'];
|
||
|
||
if (isset($form_data['allowed_subnets_count']))
|
||
{
|
||
// posted value is not null
|
||
if ($form_data['allowed_subnets_count'])
|
||
{
|
||
// count of allowed subnets is not set
|
||
if ($member->allowed_subnets_count->id == 0)
|
||
{
|
||
$allowed_subnets_count = new Allowed_subnets_count_Model();
|
||
$allowed_subnets_count->member_id = $member->id;
|
||
$allowed_subnets_count->count = $form_data['allowed_subnets_count'];
|
||
$allowed_subnets_count->save();
|
||
}
|
||
// count of allowed subnets is already set
|
||
else
|
||
{
|
||
$member->allowed_subnets_count->count = $form_data['allowed_subnets_count'];
|
||
$member->allowed_subnets_count->save();
|
||
}
|
||
}
|
||
// delete null count
|
||
elseif ($member->allowed_subnets_count)
|
||
$member->allowed_subnets_count->delete();
|
||
|
||
Allowed_subnets_Controller::update_enabled ($member->id);
|
||
}
|
||
|
||
$member_saved = $member->save();
|
||
|
freenetis/branches/subnets_assigning/application/controllers/settings.php | ||
---|---|---|
|
||
$this->form->radio('clean_urls')->label(url_lang::lang('texts.Clean URLs').':')->options(array('1'=>url_lang::lang('texts.Yes'),'0'=>url_lang::lang('texts.No')))->default(!$this->settings->get('index_page'))->help(url_lang::lang('texts.URL addresses without index.php.'));
|
||
|
||
$this->form->group('')->label(url_lang::lang('texts.Network settings'));
|
||
|
||
$this->form->input('address_ranges')->label(url_lang::lang('texts.Address ranges').':')->rules('valid_address_ranges')->value(Settings::get('address_ranges'));
|
||
|
||
// load .htaccess sample file
|
||
$htaccessFile = file('.htaccess-sample');
|
||
foreach ($htaccessFile as $line_num => $line)
|
freenetis/branches/subnets_assigning/application/controllers/ulogd.php | ||
---|---|---|
// direction for order number field
|
||
$direction = ($order_by_direction == 'DESC') ? 1 : -1;
|
||
|
||
$grid->order_callback_field(Settings::get('ulogd_active_type'))->label(url_lang::lang('texts.Order'))->callback('callback::order_number_field',$first_number,$direction)->help(help::hint('ulogd_order'))->class('right');
|
||
$grid->field('ip_address')->label(url_lang::lang('texts.Ip address'))->class('right')->order(FALSE);
|
||
$grid->order_callback_field('upload')->label(url_lang::lang('texts.Upload'))->callback('callback::traffic_field')->class('right');
|
||
$grid->order_callback_field('download')->label(url_lang::lang('texts.Download'))->callback('callback::traffic_field')->class('right');
|
||
$grid->order_callback_field('total')->label(url_lang::lang('texts.Total'))->callback('callback::traffic_field')->class('right');
|
||
$grid->order_callback_field('member_id')->label(url_lang::lang('texts.Member'))->callback('callback::member_field');
|
||
$grid->order_callback_field(Settings::get('ulogd_active_type'))->label(url_lang::lang('texts.Order'))->callback('callback::ulogd_order_number_field',$first_number,$direction)->help(help::hint('ulogd_order'))->class('right');
|
||
$grid->callback_field('ip_address')->label(url_lang::lang('texts.Ip address'))->class('right')->order(FALSE)->callback('callback::ulogd_ip_address_field');
|
||
$grid->order_callback_field('upload')->label(url_lang::lang('texts.Upload'))->callback('callback::ulogd_traffic_field')->class('right');
|
||
$grid->order_callback_field('download')->label(url_lang::lang('texts.Download'))->callback('callback::ulogd_traffic_field')->class('right');
|
||
$grid->order_callback_field('total')->label(url_lang::lang('texts.Total'))->callback('callback::ulogd_traffic_field')->class('right');
|
||
$grid->order_callback_field('member_id')->label(url_lang::lang('texts.Member'))->callback('callback::ulogd_member_field', url_lang::lang('texts.Is not in system').'!');
|
||
|
||
$grid->datasource($ip_addresses_traffics);
|
||
|
freenetis/branches/subnets_assigning/application/libraries/Settings.php | ||
---|---|---|
// type of traffic of members to find, default download traffic
|
||
private static $ulogd_active_type = 'download';
|
||
|
||
private static $allowed_subnets_enabled = 1;
|
||
|
||
// time of last update of allowed subnets
|
||
private static $allowed_subnets_update_last = 0;
|
||
|
||
// interval of updating of allowed subnets, default 60s
|
||
private static $allowed_subnets_update_interval = 60;
|
||
|
||
// default count of allowed subnets
|
||
private static $allowed_subnets_default_count = 1;
|
||
|
||
/**
|
||
* @author Michal Kliment
|
||
* Function to get value from settings by given key
|
Také k dispozici: Unified diff
Dalsi sada zmen ve vetvi prirazeni podsiti k clenum.