Source of file api.realipcontrol.php
Size: 7,788 Bytes - Last Modified: 2024-04-27T15:26:05+03:00
/tmp/current_snapshot/api/libs/api.realipcontrol.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 | <?php /** * Inactive users with white IP report */ class RealIPControl { /** * Contains mask of gray IP networks * * @var string */ protected $grayIpMask = 'RFC'; /** * Months debt count to free unused IP addresses * * @var int */ protected $debtLimit = 3; /** * Contains all available users userdata * * @var array */ protected $allUserData = array(); /** * Contains all available tariff prices * * @var array */ protected $allTrariffPrices = array(); /** * Local message helper object placeholder * * @var object */ protected $messages = ''; /** * Some predefined keys for further usage */ const OPT_GRAYIP = 'RIC_GRAYMASK'; const OPT_DEBTLIM = 'RIC_DEBTLIMIT'; const PROUTE_GRAYMASK = 'newgrayipmask'; const PROUTE_DEBTLIM = 'newdebtlimit'; const URL_ME = '?module=realipcontrol'; public function __construct() { $this->initMessages(); $this->loadSettings(); $this->loadUserData(); $this->loadTariffPrices(); } /** * Inits message helper object instance * * @return void */ protected function initMessages() { $this->messages = new UbillingMessageHelper(); } /** * Loads all available users data * * @return void */ protected function loadUserData() { $this->allUserData = zb_UserGetAllStargazerData(); } protected function loadTariffPrices() { $this->allTrariffPrices = zb_TariffGetPricesAll(); if (!empty($this->allTrariffPrices)) { $tariffPeriods = zb_TariffGetPeriodsAll(); foreach ($this->allTrariffPrices as $tariffName => $tariffFee) { if (isset($tariffPeriods[$tariffName])) { $tariffPeriod = $tariffPeriods[$tariffName]; if ($tariffPeriod == 'day') { // I'm too lazy to think, so we'll have like 30 days in a month. // And I don't care if you think otherwise. $tariffMontlyFee = $tariffFee * 30; // Yeah.. now we just updating tariff fees property with approximate monthly fee $this->allTrariffPrices[$tariffName] = $tariffMontlyFee; } } } } } /** * Loads some settings from database or sets some default values * * @return void */ protected function loadSettings() { $optionGrayIpMask = zb_StorageGet(self::OPT_GRAYIP); if (empty($optionGrayIpMask)) { //initial settings on 1st usage zb_StorageSet(self::OPT_GRAYIP, $this->grayIpMask); } else { $this->grayIpMask = $optionGrayIpMask; } $optionFeeLimit = zb_StorageGet(self::OPT_DEBTLIM); if (empty($optionFeeLimit)) { zb_StorageSet(self::OPT_DEBTLIM, $this->debtLimit); } else { $this->debtLimit = $optionFeeLimit; } } /** * Renders module configuration interface * * @return string */ public function renderConfigForm() { $result = ''; $helpLabel = __('For example') . ': 192.168.0.,172.16.,10.14.88. ' . __('(separator - comma)') . '. '; $helpLabel .= __('Or') . ' RFC ' . __('for all'); $helpLabel = wf_tag('abbr', false, '', 'title="' . $helpLabel . '"') . wf_img('skins/question.png') . wf_tag('abbr', true); $inputs = $helpLabel . ' '; $inputs .= wf_TextInput(self::PROUTE_GRAYMASK, __('Mask for non real IP in your network'), $this->grayIpMask, false, 20) . ' '; $inputs .= wf_TextInput(self::PROUTE_DEBTLIM, __('Month limit to withdraw real IP'), $this->debtLimit, false, 3); $inputs .= wf_Submit(__('Save')); $result .= wf_Form('', 'POST', $inputs, 'glamour'); return($result); } /** * Updates module configuration in database if required * * @return void */ public function saveSettings() { if (ubRouting::checkPost(array(self::PROUTE_GRAYMASK, self::PROUTE_DEBTLIM))) { $newMask = ubRouting::post(self::PROUTE_GRAYMASK, 'mres'); if ($newMask != $this->grayIpMask) { zb_StorageSet(self::OPT_GRAYIP, $newMask); } $newDebtLimit = ubRouting::post(self::PROUTE_DEBTLIM, 'int'); if ($newDebtLimit != $this->debtLimit) { zb_StorageSet(self::OPT_DEBTLIM, $newDebtLimit); } } } /** * Checks is IP private or public * * @param string $ip * * @return int 0/1 */ public function isPrivateIp($ip) { $pattern = '$(10(\.(25[0-5]|2[0-4][0-9]|1[0-9]{1,2}|[0-9]{1,2})){3}|((172\.(1[6-9]|2[0-9]|3[01]))|192\.168)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{1,2}|[0-9]{1,2})){2})$'; $result = preg_match($pattern, $ip); return($result); } /** * Renders report of users which need withdraw real IP * * @return void */ public function renderReport() { $result = ''; $tmpArr = array(); $tmpMbAlive = array(); if (!empty($this->allUserData)) { foreach ($this->allUserData as $io => $each) { if (!empty($each['IP'])) { $userLogin = $each['login']; $userTariff = $each['Tariff']; //Real IP? if ($this->grayIpMask == 'RFC') { $realIpFlag = ($this->isPrivateIp($each['IP'])) ? false : true; } else { $realIpFlag = true; $wildcardTmp = explode(',', $this->grayIpMask); if (!empty($wildcardTmp)) { foreach ($wildcardTmp as $maskIndex => $eachGrayIpMask) { $eachGrayIpMask = trim($eachGrayIpMask); if (!empty($eachGrayIpMask)) { if (ispos($each['IP'], $eachGrayIpMask)) { $realIpFlag = false; } } } } } if ($realIpFlag) { //Tariff exists if (isset($this->allTrariffPrices[$userTariff])) { $tariffPrice = $this->allTrariffPrices[$userTariff]; //Tariff isnt free if ($tariffPrice > 0) { $maxDebt = '-' . ($this->debtLimit * $tariffPrice); $curMoneyLimit = $each['Cash'] + $each['Credit']; if ($curMoneyLimit <= $maxDebt) { if ($each['U0'] == 0) { $tmpArr[$userLogin] = $userLogin; } else { $tmpMbAlive[$userLogin] = $userLogin; } } } } } } } show_window(__('May be withdraw some IPs from this users'), web_UserArrayShower($tmpArr)); show_window(__('This users is debtors but seems it alive'), web_UserArrayShower($tmpMbAlive)); } else { show_window('', $this->messages->getStyledMessage(__('Nothing to show'), 'warning')); } return($result); } } |