!C99Shell v. 2.1 [PHP 8 Update] [02.02.2022]!

Software: Apache/2.4.53 (Unix) OpenSSL/1.1.1o PHP/7.4.29 mod_perl/2.0.12 Perl/v5.34.1. PHP/7.4.29 

uname -a: Linux vps-2738122-x 4.15.0-213-generic #224-Ubuntu SMP Mon Jun 19 13:30:12 UTC 2023 x86_64 

uid=1(daemon) gid=1(daemon) grupos=1(daemon) 

Safe-mode: OFF (not secure)

/opt/apex_tdfonline/php/consola/comandos/   drwxr-xr-x
Free 14.92 GB of 61.93 GB (24.1%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     comando_instancia.php (14.15 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
require_once('comando_toba.php');
/**
*    Publica los servicios de la clase INSTANCIA a la consola toba
*/
class comando_instancia extends comando_toba
{
    static function 
get_info()
    {
        return 
'Administracion de INSTANCIAS';
    }

    function 
mostrar_observaciones()
    {
        
$this->consola->mensaje("INVOCACION: toba instancia OPCION [-i id_instancia]");
        
$this->consola->enter();
        
$this->get_info_parametro_instancia();
        
$this->consola->enter();
    }

    function 
get_info_extra()
    {
        
$i $this->get_instancia();
        try {
            
$salida "Versión: ".$i->get_version_actual()->__toString();
        } catch (
toba_error_db $e) {
            
$salida $e->getMessage();
        }
        
$db $i->get_parametros_db();
        
$salida .= "\nBase: {$db['profile']} / {$db['base']}";
        return 
$salida;
    }
        
    
    
//-------------------------------------------------------------
    // Opciones
    //-------------------------------------------------------------

    /**
    * Crea una instancia NUEVA. 
    * @consola_parametros [-t mini] se crea una instancia reducida, útil para ejecutar proyectos compilados
    * @gtk_icono nucleo/agregar.gif 
    * @gtk_no_mostrar 1
    */
    
function opcion__crear($datos=null)
    {
        if (isset(
$datos)) {
            list(
$id_instancia$tipo$base$proyectos$usuario) = $datos;
        } else {
            
$id_instancia $this->get_id_instancia_actual();            
            
$tipo $this->get_tipo_instancia();
            
$usuario null;
        }
        
$instalacion $this->get_instalacion();
        if ( 
toba_modelo_instancia::existe_carpeta_instancia($id_instancia) ) {
            throw new 
toba_error("Ya existe una INSTANCIA con el nombre '$id_instancia'");
        }
        if ( ! 
$instalacion->hay_bases() ) {
            throw new 
toba_error("Para crear una INSTANCIA, es necesario definir al menos una BASE. Utilice el comando 'toba base registrar'");
        }
        
$this->consola->titulo("Creando la INSTANCIA: $id_instancia TIPO: $tipo");

        
//---- A: Creo la definicion de la instancia
        
$this->consola->enter();
        if (!isset(
$base)) {
            
$base $this->seleccionar_base();
        }
        if (!isset(
$proyectos)) {
            
$proyectos $this->seleccionar_proyectos();
        }
        
toba_modelo_instancia::crear_instancia$id_instancia$base$proyectos$tipo );

        
//---- B: Cargo la INSTANCIA en la BASE
        
$instancia $this->get_instancia($id_instancia);
        if(
$tipo == 'mini') {
            
$metodo_carga 'cargar_tablas_minimas';
        } else {
            
$metodo_carga 'cargar';
        }
        try {
            
$instancia->$metodo_carga();
        } catch ( 
toba_error_modelo_preexiste $e ) {
            
$this->consola->error'ATENCION: Ya existe una instancia en la base de datos seleccionada' );
            
$this->consola->lista$instancia->get_parametros_db(), 'BASE' );
            if ( 
$this->consola->dialogo_simple('Desea ELIMINAR la instancia y luego CARGARLA (La informacion local previa se perdera!)?') ) {
                
$instancia->$metodo_cargatrue );
            } else {
                return;    
            }
        } catch ( 
toba_error $e ) {
            
$this->consola->error'Ha ocurrido un error durante la importacion de la instancia.' );
            
$this->consola->error$e->getMessage() );
        }

        
//---- C: Actualizo la versión, Creo un USUARIO y lo asigno a los proyectos
        
$instancia->set_versiontoba_modelo_instalacion::get_version_actual());
        
$this->opcion__crear_usuario($usuariofalse$id_instancia);

        if(
$tipo != 'mini') {
            
//---- D: Exporto la informacion LOCAL
            
$instancia->exportar_local();
            
//-- Agregar los alias
            
$this->consola->enter();        
            
$crear_alias $this->consola->dialogo_simple("Desea crear automáticamente los alias de apache en el archivo toba.conf?"true);
            if (
$crear_alias) {
                
$instancia->crear_alias_proyectos();
            }
        }
        
//Creo el esquema basico de logs de Toba.
        //$instancia->crear_modelo_logs_toba();        
    
}

    
/**
    * Brinda informacion sobre la instancia.
    * @gtk_icono info_chico.gif 
    * @gtk_no_mostrar 1
    */
    
function opcion__info()
    {
        
$i $this->get_instancia();
        
$param $this->get_parametros();
        
$this->consola->titulo'INSTANCIA: ' $i->get_id() );
        if ( isset( 
$param['-u'] ) ) {
            
// Lista de USUARIOS
            
$this->consola->subtitulo('Listado de USUARIOS');
            
$this->consola->tabla$i->get_lista_usuarios(), array( 'Usuario''Nombre') );
        } else {                                        
            
// Informacion BASICA
            
$this->consola->subtitulo('Informacion BASICA');
            
//VERSION
            
$this->consola->lista(array($i->get_version_actual()->__toString()), "VERSION");
            
$this->consola->lista_asociativa$i->get_parametros_db() , array('Parametros Conexion''Valores') );
            
$this->consola->lista$i->get_lista_proyectos_vinculados(), 'Proyectos Vinculados' );
            
$this->consola->enter();
            
$this->consola->subtitulo('Reportes');
            
$subopciones = array( '-u' => 'Listado de usuarios' ) ;
            
$this->consola->coleccion$subopciones );            
        }
    }
    
    
/**
    * Crea un nuevo proyecto asociado a la instancia
    * @consola_no_mostrar 1 
    * @gtk_icono nucleo/proyecto.gif
    */    
    
function opcion__crear_proyecto()
    {
        
//------ESTO ES UN ALIAS DE PROYECTO::CREAR
        
require_once('comando_proyecto.php');
        
$comando = new comando_proyecto($this->consola);
        
$comando->set_id_instancia_actual($this->get_id_instancia_actual());
        
$comando->opcion__crear();
    }
    
    
/**
    * Carga un PROYECTO en la INSTANCIA (Carga metadatos y crea un vinculo entre ambos elementos).
    * @consola_no_mostrar 1 
    * @gtk_icono nucleo/proyecto.gif
    * @gtk_param_extra cargar_proyecto
    */    
    
function opcion__cargar_proyecto($datos null)
    {
        
//------ESTO ES UN ALIAS DE PROYECTO::CARGAR
        
require_once('comando_proyecto.php');
        
$comando = new comando_proyecto($this->consola);
        
$comando->set_id_instancia_actual($this->get_id_instancia_actual());
        
$comando->opcion__cargar($datos);        
    }    
    
    
/**
    * Importa y migra un proyecto desde otra instalacion de toba. Se asume que el código del proyecto se encuentra en la carpeta PROYECTOS de toba
    * @consola_no_mostrar 1 
    * @gtk_icono nucleo/proyecto.gif
    * @gtk_separador 1 
    * @gtk_param_extra importar_proyecto
    */    
    
function opcion__importar_proyecto($datos null)
    {
        
//------ESTO ES UN ALIAS DE PROYECTO::IMPORTAR
        
require_once('comando_proyecto.php');
        
$comando = new comando_proyecto($this->consola);
        
$comando->set_id_instancia_actual($this->get_id_instancia_actual());
        
$comando->opcion__importar($datos);
    }
    
    
    
/**
    * Exporta la instancia completa incluyendo METADATOS propios y de proyectos contenidos.
    * @gtk_icono exportar.png 
    */
    
function opcion__exportar()
    {
        
$this->get_instancia()->exportar();
    }

    
/**
     * Exporta los METADATOS propios de la instancia de la DB (exclusivamente la información local).
     * @gtk_icono exportar.png     
     */
    
function opcion__exportar_local()
    {
        
$this->get_instancia()->exportar_local();
    }

    
/**
     * Elimina la instancia y la vuelve a cargar.
     * @gtk_icono importar.png
     */
    
function opcion__regenerar()
    {
        if (
$this->get_instancia()->existe_modelo()) {
            
$timestamp $this->get_instancia()->get_fecha_exportacion_local();
            if (isset(
$timestamp)) {
                
$extra "Si responde NO, se utilizaran los exportados el ".date("D j-M-y \a \l\a\s h:m "$timestamp);
            } else {
                
$extra "Si responde NO, la instancia quedara sin usuarios y será inaccesible";
            }
            
$extra .= "\n";
            if ( 
$this->consola->dialogo_simple('Desea conservar datos locales como usuarios y logs?'true$extra) ) {
                
$this->opcion__exportar_local();
            }
        }                            
        
$this->consola->enter();
        
$i $this->get_instancia();
        
$this->consola->lista($i->get_parametros_db(), 'BASE');
        
$forzar false;
        
        
//Para ejecutar migraciones a la instancia mediante el instalador        
        
$this->get_instancia()->ejecutar_ventana_migracion_version();
        if (
$i->existe_modelo()) {
            
$this->consola->mensaje("Se guardaran los datos existentes en un schema backup");
            
$forzar true;
        }
        
$this->get_instancia()->cargar($forzar);
    }

    
    
/**
    * Carga una instancia en la DB referenciada, partiendo de los METADATOS en el sistema de archivos.
    * @gtk_icono importar.png 
    */
    
function opcion__cargar()
    {
        try {
            
$this->get_instancia()->cargar();
        } catch ( 
toba_error_modelo_preexiste $e ) {
            
$this->consola->error'Ya existe una instancia en la base de datos' );
            
$this->consola->lista$this->get_instancia()->get_parametros_db(), 'BASE' );
            if ( 
$this->consola->dialogo_simple('Desea ELIMINAR la instancia y luego CARGARLA?') ) {
                
$this->get_instancia()->cargartrue );
            }
        } catch ( 
toba_error $e ) {
            
$this->consola->error'Ha ocurrido un error durante la importacion de la instancia.' );
            
$this->consola->error$e->getMessage() );
        }
    }
    
    
/**
     * Importa los METADATOS locales desde otra instalacion/instancia
     * @consola_parametros Opcionales: [-o instancia origen] [-d 'directorio toba'] [-r 0|1 Reemplazar los metadatos actuales, por defecto 0]
     * @gtk_icono importar.png  
     * @gtk_param_extra importar_instancia
     */
    
function opcion__importar($datos=null)
    {
        
$path null;
        
$reemplazar false;
        if (! isset(
$datos)) {
            
$param $this->get_parametros();
            if ( isset(
$param['-o']) &&  (trim($param['-o']) != '') ) {
                
$origen $param['-o'];
            } else {
                
$origen $this->get_id_instancia_actual(true);
            }
            if ( isset(
$param['-d']) &&  (trim($param['-d']) != '') ) {
                
$path $param['-d'];
            }        
            if ( isset(
$param['-r']) &&  (trim($param['-r']) != '') ) {
                
$reemplazar $param['-r'];
            }                
        } else {
            list(
$origen$path$reemplazar) = $datos;
        }
        
$this->get_instancia()->importar_informacion_instancia($origen$path$reemplazar);
    }    
    
    
/**
    * Elimina la instancia.
    * @gtk_icono borrar.png
    */
    
function opcion__eliminar()
    {
        
$i $this->get_instancia();
        
$this->consola->lista$i->get_parametros_db(), 'BASE' );
        if ( 
$this->consola->dialogo_simple('Desea eliminar los datos de la INSTANCIA?') ) {
            
$i->eliminar_base();
        }
        if ( 
$this->consola->dialogo_simple('Desea eliminar la carpeta de datos y configuración de la INSTANCIA?') ) {
            
$i->eliminar_archivos();
        }        
    }

    
/**
     * Crea un usuario administrador y lo asigna a los proyectos
     * @gtk_icono usuarios/usuario_nuevo.gif
     * @gtk_param_extra crear_usuario
     */
    
function opcion__crear_usuario($datos=null$asociar_previsualizacion_admin=true$id_instancia=null)
    {
        
$instancia $this->get_instancia($id_instancia);
        if (!isset(
$datos)) {
            
$datos $this->get_datos_usuario();
        }
        
        
$instancia->get_db()->abrir_transaccion();
        
$instancia->agregar_usuario$datos['usuario'], $datos['nombre'], $datos['clave'] );
        foreach( 
$instancia->get_lista_proyectos_vinculados() as $id_proyecto ) {
            
$proyecto $instancia->get_proyecto($id_proyecto);
            
$grupo_acceso $this->seleccionar_grupo_acceso$proyecto );
            
$proyecto->vincular_usuario($datos['usuario'],array($grupo_acceso), null$asociar_previsualizacion_admin);
        }
        
$instancia->get_db()->cerrar_transaccion();        
    }
    
    
/**
     * Permite cambiar los grupos de acceso de un usuario 
     * @consola_parametros [-u usuario]
     * @gtk_icono usuarios/grupo.gif
     */
    
function opcion__editar_acceso()
    {
        
$instancia $this->get_instancia();
        
$param $this->get_parametros();
        if ( isset(
$param['-u']) &&  (trim($param['-u']) != '') ) {
            
$usuario $param['-u'];
        } else {
            
$usuarios $instancia->get_lista_usuarios();
            
$usuarios rs_convertir_asociativo($usuarios, array('usuario'),'nombre');
            
$usuario $this->consola->dialogo_lista_opciones$usuarios'Seleccionar Usuario'false'Nombre de usuario'
                                                        
true);            
        }
        if (! isset(
$usuario)) {
            throw new 
toba_error("Es necesario indicar el usuario con '-u'");            
        }
        
$acceso = array();
        foreach( 
$instancia->get_lista_proyectos_vinculados() as $id_proyecto ) {
            
$this->consola->enter();            
            
$proyecto $instancia->get_proyecto($id_proyecto);
            
$grupos $proyecto->get_lista_grupos_acceso();
            
$grupos rs_convertir_asociativo($grupos, array('id'), 'nombre');
            
$grupos $this->consola->dialogo_lista_opciones($grupos"Proyecto $id_proyecto"true'Descripción'false);
            if (! isset(
$grupos)) {
                return;
            }
            
$acceso[$id_proyecto] = $grupos;
        }
        
$instancia->cambiar_acceso_usuario($usuario$acceso);
    }
    
    
/**
     * Limpia la tabla de ips bloqueadas
     * @gtk_icono desbloquear.png
     */
    
function opcion__desbloquear_ips()
    {
        
$instancia $this->get_instancia();
        
$instancia->desbloquear_ips();
    }
    
    
/**
     * Migra un instancia entre dos versiones toba.
     * @consola_parametros Opcionales: [-d 'desde']  [-h 'hasta'] [-R 0|1] [-m metodo puntual de migracion]
     * @gtk_icono convertir.png
     */
    
function opcion__migrar_toba()
    {
        
$instancia $this->get_instancia();
        
//--- Parametros
        
$param $this->get_parametros();
        
$desde = isset($param['-d']) ? new toba_version($param['-d']) : $instancia->get_version_actual();
        
$hasta = isset($param['-h']) ? new toba_version($param['-h']) : toba_modelo_instalacion::get_version_actual();
        
$recursivo = (!isset($param['-R']) || $param['-R'] == 1);
        
        if (
$recursivo) {
            
$texto_recursivo " y proyectos contenidos";
        }
        
$desde_texto $desde->__toString();
        
$hasta_texto $hasta->__toString();
        
$this->consola->titulo("Migración de la instancia '{$instancia->get_id()}'".$texto_recursivo." desde la versión $desde_texto hacia la $hasta_texto.");

        if (! isset(
$param['-m'])) {
            
$versiones $desde->get_secuencia_migraciones($hasta);
            if (empty(
$versiones)) {
                
$this->consola->mensaje("No es necesario ejecutar una migración entre estas versiones para la instancia '{$instancia->get_id()}'");
                return ;
            }

            
$instancia->migrar_rango_versiones($desde$hasta$recursivo);
        } else {
            
//Se pidio un método puntual
            
$this->consola->mensaje("Ejecutando método particular:"trim($param['-m']));
            
$instancia->ejecutar_migracion_particular($hastatrim($param['-m']));
        }        
    }
    
    function 
get_tipo_instancia()
    {
        
$tipo 'normal';
        
$param $this->get_parametros();
        if ( isset(
$param['-t'] ) && ( trim$param['-t'] ) == 'mini') ) {
            
$tipo 'mini';
        }        
        return 
$tipo;
    }
    
    function 
get_datos_usuario()
    {
        
//Verifico que la clave cumpla ciertos requisitos basicos
        
do {
            
$hubo_error false;
            if (!isset(
$datos)) {
                
$datos $this->definir_usuario"Crear USUARIO" );
            }
            if (
$this->get_instalacion()->es_produccion()) {
                try {
                    
toba_usuario::verificar_composicion_clave($datos['clave'], apex_pa_pwd_largo_minimo);            //Hay que brindar la posibilidad de marcar produccion antes
                
} catch(toba_error_pwd_conformacion_invalida $e) {
                    
$this->consola->mensaje($e->getMessage(), true);
                    
$hubo_error true;
                    unset(
$datos);
                }
            }
        } while (
$hubo_error);
        return 
$datos;        
    }
}
?>

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.1 [PHP 8 Update] [02.02.2022] maintained byC99Shell Github | Generation time: 0.3031 ]--