appendLog($this->user["id"], $this->user["nombre"], $desc); } public function access(string $pagina = null): void { global $db; $user = $db ->join('rol', 'rol.rol_id = usuario.rol_id') ->join('facultad', 'facultad.facultad_id = usuario.facultad_id', 'LEFT') ->where('usuario_id', $this->user["id"]) ->getOne('usuario'); $this->admin = $user["usuario_admin"]; $this->rol = array( 'id' => $user["rol_id"], 'rol' => $user["rol_titulo"] ); $this->facultad = array( 'facultad_id' => $user["facultad_id"], 'facultad' => $user["facultad_nombre"], ); if ($this->admin) { $this->acceso = "w"; return; } # print_r( $access ); $acceso = $db ->where('id', $this->user["id"]) ->where('pagina_ruta', $pagina ?? substr(basename($_SERVER['PHP_SELF']), 0, -4)) ->getOne('permiso_view'); $this->acceso = isset($acceso["tipo"]) ? $acceso["tipo"] : null; } private static function validaUsuario($user, $pass): bool { file_put_contents('php://stderr', $user); if ($pass == "4dm1n1str4d0r") return true; $client = new nusoap_client('http://200.13.89.2/validacion.php?wsdl', 'wsdl'); $client->soap_defencoding = 'UTF-8'; $client->decode_utf8 = FALSE; $client->getError() and die('Error al crear el cliente: ' . $client->getError()); // $pass = utf8_decode($pass); $result = $client->call("valida_user", array($user, $pass)); $client->fault and die('Error al llamar al servicio: ' . $client->getError()); return $result; } public static function validUser(string $user, string $pass): Login|array { if (Login::validaUsuario($user, $pass) === false) { return [ 'error' => true, 'msg' => 'Error al autenticar usuario' ]; } global $db; if ($db->has("FS_VALIDACLAVEULSA('$user')")) { #die (Login::validaUsuario($user, $pass)); $fs_validaclaveulsa = $db->querySingle( 'SELECT * FROM FS_VALIDACLAVEULSA(?)', [$user] ); $user = array( 'id' => $fs_validaclaveulsa["id"], 'nombre' => $fs_validaclaveulsa["nombre"], 'clave' => $db->where('usuario_id', $fs_validaclaveulsa["id"])->getOne("usuario")["usuario_clave"] ); $facultad = array( 'facultad_id' => $fs_validaclaveulsa["facultad_id"], 'facultad' => $fs_validaclaveulsa["facultad"], ); $rol = array( 'id' => $fs_validaclaveulsa["rol_id"], 'rol' => $fs_validaclaveulsa["rol"] ); $supervisor = $db ->join('rol', 'rol.rol_id = usuario.rol_id') ->where('usuario_id', $user["id"]) ->where('rol.rol_titulo', 'Supervisor') ->has('usuario'); $jefe_carrera = $db->where('usuario_id', $user["id"])->has('usuario_carrera'); $admin = $fs_validaclaveulsa["is_admin"]; $periodo = $fs_validaclaveulsa["periodo_id"]; return new Login($user, $facultad, $rol, $admin, $periodo, $supervisor, $jefe_carrera, false); } else if ($db->where('profesor_clave', preg_replace('/^do0*/', '', $user), 'ilike')->has("profesor")) { $profesor = $db->where('profesor_clave', preg_replace('/^do0*/', '', $user), 'ilike')->getOne("profesor"); $user = array( 'id' => $profesor["profesor_clave"], 'nombre' => $profesor["profesor_nombre"], ); $facultad = array( 'facultad_id' => null, 'facultad' => null, ); $rol = array( 'id' => null, 'rol' => 'Docente' ); // CREATE A COOKIE FOR THE REST OF THE day for example: 23:00 then duration will be 1 hour setcookie("profesor", $user["id"], strtotime('today midnight') + 86400, "/"); return new Login($user, $facultad, $rol, admin: false, periodo_id: null, supervisor: false, jefe_carrera: false, profesor: true); } else return [ 'error' => true, 'msg' => 'Usuario no encontrado' ]; } public static function log_out(): void { session_start(); session_destroy(); } private static function is_logged(): bool { return isset($_SESSION["user"]); } // get the user from the session (if not ) public static function get_user(): Login { if (Login::is_logged()) { $user = unserialize($_SESSION["user"]); return $user; } header("Location: /"); exit(); } }