/** * Verificamos si el bloqueo aplica al IP provisto. * @param string $ip * @return bool */ public function is_locked_for($ip) { if (!$this->is_locked()) { return FALSE; } // Cargamos los rangos. $range_list = file($this->lock_file); // Verificamos. foreach ($range_list as $range) { if ($ip == $range || IP::ip_in_range($ip, $range)) { // Existe en el rango. return FALSE; } } // No existe en los rangos. return TRUE; }
/** * Configuración del modo mantenimiento. */ public function action_mantenimiento() { // Cargamos la vista. $vista = View::factory('admin/configuracion/mantenimiento'); // Cargo manejador del modo mantenimiento. $mantenimiento = new Mantenimiento(); // Cargo listado de IP's que pueden acceder en modo mantenimiento. $model_configuracion = new Model_Configuracion(); $ips_matenimiento = unserialize($model_configuracion->get('ip_mantenimiento', 'a:0:{}')); // Pasamos los datos a la vista. $vista->assign('ip', implode(PHP_EOL, $ips_matenimiento)); $vista->assign('error_ip', FALSE); $vista->assign('success_ip', FALSE); if (Request::method() == 'POST') { // Obtengo el listado de IP's. $ips = isset($_POST['ip']) ? explode(PHP_EOL, trim($_POST['ip'])) : array(); // Verifico cada uno de los IP's. $error = FALSE; foreach ($ips as $k => $ip) { $ip = trim($ip); $ips[$k] = $ip; // Verifico IP. if ($ip == long2ip(ip2long($ip))) { continue; } // Verifico rango del tipo a.b.c.d-a.b.c.d if (strpos($ip, '-')) { list($a, $b) = explode('-', $ip); if ($a != long2ip(ip2long($a)) || $b != long2ip(ip2long($b))) { $error = TRUE; break; } else { continue; } } $error = TRUE; break; //TODO: agregar soporte a rangos faltantes (CIFS /netmask, *). } // Asigno valor a la vista. $vista->assign('ip', implode(PHP_EOL, $ips)); if ($error) { $vista->assign('error_ip', 'Los IP\'s ingresados no son válidos.'); } else { // Verifico si hay cambios. if (count(array_diff($ips, $ips_matenimiento)) > 0) { // Actualizo los valores. $model_configuracion->ip_mantenimiento = serialize($ips); $ips_matenimiento = $ips; // Actualizo si es necesario. if ($mantenimiento->is_locked()) { $mantenimiento->lock($ips); } // Informo resultado. $vista->assign('success_ip', 'Listado de IP\'s actualizada correctamente.'); } } } // Verifico si está habilitado el bloqueo. $vista->assign('is_locked', $mantenimiento->is_locked()); if ($mantenimiento->is_locked()) { $locked_for_me = $mantenimiento->is_locked_for(IP::get_ip_addr()); } else { $locked_for_me = TRUE; $my_ip = IP::get_ip_addr(); foreach ($ips_matenimiento as $ip) { if ($my_ip == $ip || IP::ip_in_range($my_ip, $ip)) { $locked_for_me = FALSE; break; } } unset($my_ip); } $vista->assign('is_locked_for_me', $locked_for_me); unset($locked_for_me); // Seteamos el menu. $this->template->assign('master_bar', parent::base_menu('admin')); // Cargamos plantilla administracion. $admin_template = View::factory('admin/template'); $admin_template->assign('contenido', $vista->parse()); unset($portada); $admin_template->assign('top_bar', Controller_Admin_Home::submenu('configuracion_mantenimiento')); // Asignamos la vista a la plantilla base. $this->template->assign('contenido', $admin_template->parse()); }