Beispiel #1
0
 /**
  * Iniciamos sessión con un usuario.
  * @param string $mail E-Mail
  * @param string $password Contraseña
  * @return int Estado de la cuenta. -1 Si los datos son inválidos.
  */
 public function login($mail, $password)
 {
     $rst = $this->db->query('SELECT id, nick, password, email, estado FROM usuario WHERE email = ? OR nick = ? LIMIT 1', array($mail, $mail));
     // Verificamos que exista el usuario.
     if ($rst->num_rows() > 0) {
         // Obtenemos la información.
         $data = $rst->get_record(Database_Query::FETCH_ASSOC, array('id' => Database_Query::FIELD_INT, 'estado' => Database_Query::FIELD_INT));
         // Verificamos la contraseña.
         $enc = new Phpass(8, FALSE);
         if (!$enc->check_password($password, $data['password']) == TRUE) {
             return -1;
         }
         // Verificamos el estado.
         switch ($data['estado']) {
             case self::ESTADO_SUSPENDIDA:
                 // Cuenta suspendida.
                 $this->primary_key['id'] = $data['id'];
                 $suspension = $this->suspension();
                 if ($suspension === NULL) {
                     $this->actualizar_estado(self::ESTADO_ACTIVA);
                     $data['estado'] = self::ESTADO_ACTIVA;
                 } else {
                     // Verificamos si terminó.
                     if ($suspension->restante() <= 0) {
                         $suspension->anular();
                         $this->actualizar_estado(self::ESTADO_ACTIVA);
                         $data['estado'] = self::ESTADO_ACTIVA;
                     } else {
                         break;
                     }
                 }
             case self::ESTADO_BANEADA:
                 // Cuenta baneada.
                 // Verificamos por paso de suspendida.
                 if ($data['estado'] == self::ESTADO_BANEADA) {
                     $this->primary_key['id'] = $data['id'];
                     if ($this->baneo() === NULL) {
                         $this->actualizar_estado(self::ESTADO_ACTIVA);
                         $data['estado'] = self::ESTADO_ACTIVA;
                     }
                     break;
                 }
             case self::ESTADO_ACTIVA:
                 // Cuenta activa.
                 // IP del usuario.
                 $ip = ip2long(IP::get_ip_addr());
                 // Seteamos el usuario actual.
                 $this->primary_key['id'] = $data['id'];
                 // Iniciamos la sessión.
                 Usuario::login($this, $ip);
                 // Actualizamos el inicio de session.
                 $this->db->update('UPDATE usuario SET lastlogin = ?, lastactive = ?, lastip = ? WHERE id = ?', array(date('Y/m/d H:i:s'), date('Y/m/d H:i:s'), $ip, $this->primary_key['id']));
                 break;
             case self::ESTADO_PENDIENTE:
                 // Cuenta por activar.
                 break;
             default:
                 throw new Exception("El estado del usuario {$data['id']} es {$data['estado']} y no se puede manejar.");
         }
         // Informamos el estado.
         return $data['estado'];
     } else {
         // No existe el usuario.
         return -1;
     }
 }
Beispiel #2
0
 /**
  * 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());
 }
Beispiel #3
0
// Verifico MCrypt.
extension_loaded('mcrypt') || die('Marifa necesita MCrypt para funcionar.');
// Inicio logs.
Log::setup(APP_BASE . DS . 'log', '%d-%m-%Y.log', PRODUCTION ? Log::INFO : Log::DEBUG);
// Iniciamos las cookies.
Cookie::start('secret_cookie_key');
// Iniciamos el usuario.
Usuario::start();
// Cargo el tema actual.
define('THEME', Theme::actual());
// Iniciamos el manejo de errores.
Error::get_instance()->start(DEBUG);
// Verificamos bloqueos.
$lock = new Mantenimiento();
if ($lock->is_locked()) {
    if ($lock->is_locked_for(IP::get_ip_addr())) {
        //TODO: utilizar vista para dar flexibilidad.
        die("Modo mantenimiento activado.");
    }
}
// Definimos el directorio temporal. Puede definir uno manualmente.
define('TMP_PATH', Update_Utils::sys_get_temp_dir() . DS);
// Comprobamos que exista la configuración de la base de datos.
if (!file_exists(CONFIG_PATH . DS . 'database.php')) {
    //TODO: lo mandamos al instalador.
    die("Falta configurar la base de datos");
}
// Cargamos la cache.
Cache::get_instance();
// Cargamos las configuraciones del gestor de actualizaciones.
if (file_exists(CONFIG_PATH . DS . 'update.php')) {