!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.93 GB of 61.93 GB (24.11%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     comando_instalacion.php (18.68 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
require_once('comando_toba.php');

class 
comando_instalacion extends comando_toba
{
    static function 
get_info()
    {
        return 
"Administracion de la INSTALACION";
    }

    function 
mostrar_observaciones()
    {
        
$this->consola->mensaje("Directorio BASE: " toba_dir() );
        
$this->consola->enter();
    }

    function 
get_info_extra()
    {
        
$salida "Path: ".toba_dir();
        
$salida .= "\nVersión: ".toba_modelo_instalacion::get_version_actual()->__toString();
        
$instalacion $this->get_instalacion();
        if (
$instalacion->existe_info_basica()) {
            
$grupo $instalacion->get_id_grupo_desarrollo();
            if (isset(
$grupo)) {
                
$salida .= "\nGrupo de desarrollo: ".$grupo;
            }
        }
        return 
$salida;
    }
    
    
//-------------------------------------------------------------
    // Opciones
    //-------------------------------------------------------------
    
    /**
     * Ejecuta una instalacion completa del framework para desarrollar un nuevo proyecto
     * @gtk_icono instalacion.png
     */
    
function opcion__instalar()
    {        
        
$nombre_toba 'toba_'.toba_modelo_instalacion::get_version_actual()->get_release('_');
        
$alias '/'.'toba_'.toba_modelo_instalacion::get_version_actual()->get_release();
        
$this->consola->titulo("Instalacion Toba ".toba_modelo_instalacion::get_version_actual()->__toString());

        
//--- Verificar instalacion
        /*
        if (get_magic_quotes_gpc()) {
            $this->consola->mensaje("------------------------------------");
            throw new toba_error("ERROR: Necesita desactivar las 'magic_quotes_gpc' en el archivo php.ini (ver http://www.php.net/manual/es/security.magicquotes.disabling.php)");    
        }*/
        
if (! extension_loaded('pdo')) {
            
$this->consola->mensaje("------------------------------------");
            throw new 
toba_error("ERROR: Necesita activar la extension 'pdo' en el archivo php.ini");
        }
        if (! 
extension_loaded('pdo_pgsql')) {
            
$this->consola->mensaje("------------------------------------");
            throw new 
toba_error("ERROR: Necesita activar la extension 'pdo_pgsql' en el archivo php.ini");
        }        
        
$version_php shell_exec('php -v');
        if (
$version_php == '') {
            
$this->consola->mensaje("------------------------------------");
            throw new 
toba_error("ERROR: El comando 'php' no se encuentra en el path actual del sistema");
        }

        
//--- Borra la instalacion anterior??
        
if (toba_modelo_instalacion::existe_info_basica() ) {
            
toba_modelo_instalacion::borrar_directorio();
        }
        
//--- Crea la INSTALACION        
        
$id_desarrollo $this->definir_id_grupo_desarrollo();
        
$tipo_instalacion $this->definir_tipo_instalacion_produccion();
        
toba_modelo_instalacion::crear($id_desarrollo$alias$tipo_instalacion);
        
$id_instancia = ($tipo_instalacion == '1') ? 'produccion' $this->get_entorno_id_instancia(true);        
        
        
//--- Crea la definicion de bases
        
$base $nombre_toba;
        
$puerto '5432';            //Asumo el puerto por defecto del servidor;
        
if (! $this->get_instalacion()->existe_base_datos_definida$base ) ) {
            do {
                
$profile $this->consola->dialogo_ingresar_texto'PostgreSQL - Ubicación (ENTER utilizará localhost)'false);
                if (
$profile == ''){
                    
$profile 'localhost';
                }                
                
$puerto_tmp $this->consola->dialogo_ingresar_texto"PostgreSQL - Puerto (ENTER utilizará: $puerto)"false);
                if (
$puerto_tmp != ''){        
                    
$puerto $puerto_tmp;
                }
                
$usuario $this->consola->dialogo_ingresar_texto'PostgreSQL - Usuario (ENTER utilizará postgres)'false);
                if (
$usuario == '') {
                    
$usuario 'postgres';
                }
                
$clave $this->consola->dialogo_ingresar_texto'PostgreSQL - Clave  (ENTER para usar sin clave)'false);
                
$base_temp $this->consola->dialogo_ingresar_texto"PostgreSQL - Base de datos (ENTER utilizará $base)"false);
                if (
$base_temp != ''){
                    
$base $base_temp;
                }
                if (
$puerto_tmp != ''){        
                    
$puerto $puerto_tmp;
                }
                
$datos = array(
                    
'motor' => 'postgres7',
                    
'profile' => $profile,
                    
'usuario' => $usuario,
                    
'clave' => $clave,
                    
'base' => $base,
                    
'puerto' => $puerto,
                    
'encoding' => 'LATIN1',
                    
'schema' => $id_instancia
                
);
                
$this->get_instalacion()->agregar_db$base$datos );
                
//--- Intenta conectar al servidor
                
$puede_conectar $this->get_instalacion()->existe_base_datos($base, array('base' => 'template1'), true);
                if (
$puede_conectar !== true) {
                    
$this->consola->mensaje("\nNo es posible conectar con el servidor, por favor reeingrese la información de conexión. Mensaje:");
                    
$this->consola->mensaje($puede_conectar."\n");
                }                
            } while (
$puede_conectar !== true);
        }    
        
//--- Pido el password para el usuario por defecto
        
$pwd $this->definir_clave_usuario_admin();
                
        
//--- Si la base existe, pregunta por un nombre alternativo, por si no quiere pisarla
        
if ($this->get_instalacion()->existe_base_datos($base, array(), false$id_instancia)) {
            
$nueva_base $this->consola->dialogo_ingresar_texto("La base '$base' ya contiene un schema '$id_instancia', puede ingresar un nombre ".
                                                                
"de base distinto sino quiere sobrescribir los datos actuales: (ENTER sobrescribe la actual)"false);            
            if (
$nueva_base != '') {                                                                
                
$datos['base'] = $nueva_base;
                
$this->get_instalacion()->agregar_db$base$datos );
            }
        }
        
        
//--- Crea la instancia
        
$proyectos toba_modelo_proyecto::get_lista();
        if (isset(
$proyectos['toba_testing'])) {
            
//--- Elimina el proyecto toba_testing 
            
unset($proyectos['toba_testing']);
        }
        if (isset(
$proyectos['curso_intro'])) {
            
//--- Elimina el proyecto curso_intro 
            
unset($proyectos['curso_intro']);
        }        
        
toba_modelo_instancia::crear_instancia$id_instancia$base$proyectos );
        
        
//-- Carga la instancia
        
$instancia $this->get_instancia($id_instancia);
        
$instancia->cargartrue );

        
//--- Vincula un usuario a todos los proyectos y se instala el proyecto                
        
$instancia->agregar_usuario'toba''Usuario Toba'$pwd);
        foreach( 
$instancia->get_lista_proyectos_vinculados() as $id_proyecto ) {
            
$proyecto $instancia->get_proyecto($id_proyecto);
            
$grupo_acceso $proyecto->get_grupo_acceso_admin();
            
$proyecto->vincular_usuario('toba', array($grupo_acceso));
        }
        
        
//--- Crea el login y exporta el proyecto
        
if (isset($nuevo_proyecto)) {
            
$nuevo_proyecto->actualizar_login();    
            
$nuevo_proyecto->exportar();    
        }

        
$instancia->exportar_local();
        
        
//--- Crea los nuevos alias
        
$instancia->crear_alias_proyectos();
        
        
//--- Ejecuta instalaciones particulares de cada proyecto
        
foreach( $instancia->get_lista_proyectos_vinculados() as $id_proyecto ) {
            
$instancia->get_proyecto($id_proyecto)->instalar();
        }        

        
//--- Mensajes finales
        
$this->consola->titulo("Configuraciones Finales");
        
$toba_conf toba_modelo_instalacion::dir_base()."/toba.conf";
        if (
toba_manejador_archivos::es_windows()) {        
            
$toba_conf toba_manejador_archivos::path_a_unix($toba_conf);
            
$this->consola->mensaje("1) Agregar al archivo '\Apache2\conf\httpd.conf' la siguiente directiva: ");
            
$this->consola->mensaje("");
            
$this->consola->mensaje("     Include \"$toba_conf\"");;
        } else {
            
$this->consola->mensaje("1) Ejecutar el siguiente comando como superusuario: ");
            
$this->consola->mensaje("");            
            
$this->consola->mensaje("     ln -s $toba_conf /etc/apache2/sites-enabled/$nombre_toba.conf");
        }
        
$this->consola->mensaje("");
        
$url $instancia->get_proyecto('toba_editor')->get_url();
        
$this->consola->mensaje("Reiniciar el servicio apache e ingresar al framework navegando hacia ");
        
$this->consola->mensaje("");
        
$this->consola->mensaje("     http://localhost$url");        
        
$this->consola->mensaje("");
        
            
        
$this->consola->mensaje("");

        
$release toba_modelo_instalacion::get_version_actual()->get_release();
        if (
toba_manejador_archivos::es_windows()) {
            if (isset(
$_SERVER['USERPROFILE'])) {
                
$path $_SERVER['USERPROFILE'];
            } else {
                
$path toba_dir()."\\bin";
            }
            
$path .= "\\entorno_toba_$release.bat";
            
$bat "@echo off\n";
            
$bat .= "set TOBA_DIR=".toba_dir()."\n";
            
$bat .= "set TOBA_INSTANCIA=$id_instancia\n";
            
$bat .= "set PATH=%PATH%;%TOBA_DIR%/bin\n";
            
$bat .= "echo Entorno cargado.\n";
            
$bat .= "echo Ejecute 'toba' para ver la lista de comandos disponibles.\n";
            
file_put_contents($path$bat);
            
$this->consola->mensaje("2) Se genero el siguiente .bat:");
            
$this->consola->mensaje("");
            
$this->consola->mensaje("   $path");
            
$this->consola->mensaje("");
            
$this->consola->mensaje("Para usar los comandos toba ejecute el .bat desde una sesión de consola (cmd.exe)");
            
        } else {
            
$path toba_dir()."/bin";
            
$path .= "/entorno_toba_$release.sh";
            
$bat "export TOBA_DIR=".toba_dir()."\n";
            
$bat .= "export TOBA_INSTANCIA=$id_instancia\n";
            
$bat .= 'export PATH="$TOBA_DIR/bin:$PATH"'."\n";
            
$bat .= "echo \"Entorno cargado.\"\n";
            
$bat .= "echo \"Ejecute 'toba' para ver la lista de comandos disponibles.\"\n";
            
file_put_contents($path$bat);
            
chmod($path0755);
            
$this->consola->mensaje("2) Se genero el siguiente ejecutable:");
            
$this->consola->mensaje("");
            
$this->consola->mensaje("   $path");
            
$this->consola->mensaje("");
            
$sh basename($path);
            
$this->consola->mensaje("Para usar los comandos toba ejecute antes el .sh precedido por un punto y espacio");
            
        }
        
$this->consola->mensaje("");
        
$this->consola->mensaje("3) Entre otras cosas puede crear un nuevo proyecto ejecutando el comando");
        
$this->consola->mensaje("");
        
$this->consola->mensaje("   toba proyecto crear");        
    }
    
    
/**
    * Crea una instalación básica.
    * @gtk_icono nucleo/agregar.gif
    */
    
function opcion__crear()
    {
        if( ! 
toba_modelo_instalacion::existe_info_basica() ) {
            
$this->consola->titulo"Configurando INSTALACION en: " toba_modelo_instalacion::dir_base() );
            
$id_grupo_desarrollo self::definir_id_grupo_desarrollo();
            
$alias self::definir_alias_nucleo();
            
toba_modelo_instalacion::crear$id_grupo_desarrollo$alias );
            
$this->consola->enter();
            
$this->consola->mensaje("La instalacion ha sido inicializada");
            
$this->consola->mensaje("Para definir bases de datos, utilize el comando 'toba base registrar -d [nombre_base]'");
        } else {
            
$this->consola->enter();
            
$this->consola->mensaje'Ya existe una INSTALACION.' );
            
$this->consola->enter();
        }
    }
    
    
    
/**
     * Muestra información de la instalación.
     * @gtk_icono info_chico.gif
     * @gtk_no_mostrar 1
     * @gtk_separador 1 
     */
    
function opcion__info()
    {
        if ( 
toba_modelo_instalacion::existe_info_basica() ) {
            
$this->consola->enter();
            
//VERSION
            
$this->consola->lista(array(toba_modelo_instalacion::get_version_actual()->__toString()), "VERSION");
            
// INSTANCIAS
            
$instancias toba_modelo_instancia::get_lista();
            if ( 
$instancias ) {
                
$this->consola->lista$instancias'INSTANCIAS' );
            } else {
                
$this->consola->enter();
                
$this->consola->mensaje'ATENCION: No existen INSTANCIAS definidas.');
            }
            
// BASES
            
$this->mostrar_bases_definidas();
            
// ID de grupo de DESARROLLO
            
$grupo $this->get_instalacion()->get_id_grupo_desarrollo();
            if ( isset ( 
$grupo ) ) {
                
$this->consola->lista( array( $grupo ), 'ID grupo desarrollo' );
            } else {
                
$this->consola->enter();
                
$this->consola->mensaje'ATENCION: No esta definido el ID del GRUPO de DESARROLLO.');
            }
            
// PROYECTOS
            
$proyectos toba_modelo_proyecto::get_lista();
            if ( 
$proyectos ) {
                
$lista_proyectos = array();
                foreach (
$proyectos as $dir => $id) {
                    
$lista_proyectos[] = "$id ($dir)";
                }
                
$this->consola->lista$lista_proyectos'PROYECTOS (sólo en la carpeta por defecto)' );
            } else {
                
$this->consola->enter();
                
$this->consola->mensaje'ATENCION: No existen PROYECTOS definidos.');
            }
        } else {
            
$this->consola->enter();
            
$this->consola->mensaje'La INSTALACION no ha sido inicializada.');
        }
    }
    
    
/**
    * Crea una instancia
    * @consola_no_mostrar 1 
    * @gtk_icono instancia.gif 
    * @gtk_param_extra crear_instancia
    */    
    
function opcion__crear_instancia($datos)
    {
        
//------ESTO ES UN ALIAS DE INSTANCIA::CREAR
        
require_once('comando_instancia.php');
        
$comando = new comando_instancia($this->consola);
        
$comando->opcion__crear($datos);
    }
    
    
/**
     * Cambia los permisos de los archivo para que el usuario Apache cree directorios y pueda crear y leer carpetas navegables 
     * @consola_parametros [-u usuario apache, se asume www-data] [-g grupo de usuarios, no se asume ninguno]
     * @gtk_icono  password.png
     */
    
function opcion__cambiar_permisos()
    {
        
//Si es produccion dar permisos solo a apache, sino a usuario y grupo
        
$subject $this->get_instalacion()->es_produccion() ? "u" "ug";
        
$param $this->get_parametros();
        
$grupo = isset($param['-g']) ? $param['-g'] : null;
        
$usuario = isset($param['-u']) ? $param['-u'] : 'www-data';
        
$toba_dir toba_dir();
        
$this->consola->subtitulo('Cambiando permisos de archivos navegables');
        
$comandos = array(
            array(
"chown -R $usuario $toba_dir/www""Archivos navegables comunes:\n"),
            array(
"chmod -R $subject+rw $toba_dir/www"''),            
            array(
"chown -R $usuario $toba_dir/instalacion""Archivos de configuración:\n"),
            array(
"chmod -R $subject+rw $toba_dir/instalacion"''),            
            array(
"chown -R $usuario $toba_dir/temp""Archivos temporales comunes:\n"),
            array(
"chmod $subject+rw $toba_dir/temp"'')
        );
        foreach (
toba_modelo_instalacion::get_lista_proyectos() as $proyecto) {
            
$id_proyecto basename($proyecto);
            
$comandos[] = array("chown -R $usuario $proyecto/www""Archivos navegables de $id_proyecto:\n");
            
$comandos[] = array("chmod -R $subject+rw $proyecto/www"'');
            
$comandos[] = array("chown -R $usuario $proyecto/temp""Archivos temporales de $id_proyecto:\n");
            
$comandos[] = array("chmod -R $subject+rw $proyecto/temp"'');
        }        
        foreach (
$comandos as $comando) {
            
$this->consola->mensaje($comando[1], false);
            
$this->consola->mensaje("   ".$comando[0]. exec($comando[0]));
        }
        
        if (isset(
$grupo)) {
            
$comando "chgrp -R $grupo $toba_dir";
            
$this->consola->subtitulo("\nCambiando permisos globales para el grupo $grupo");
            
$this->consola->mensaje("   ".$comandoexec($comando));
            
$comando "chmod -R g+rw $toba_dir";
            
$this->consola->mensaje("   ".$comandoexec($comando));
        }
    }

    
/**
     * Elimina los logs locales de la instalacion, instancias y proyectos contenidos
     */
    
function opcion__eliminar_logs()
    {
        
$this->get_instalacion()->eliminar_logs();
    }
    
    
/**
     * Cambia el número de desarrollador y deja las instancias listas
     */
    
function opcion__cambiar_id_desarrollador()
    {
        
$id_grupo_desarrollador $this->definir_id_grupo_desarrollo();
        
$this->get_instalacion()->set_id_desarrollador($id_grupo_desarrollador);        
    }
    

    
/**
     * Migra la instalación de versión. 
     * @consola_parametros Opcionales: [-d 'desde']  [-h 'hasta'] [-R 0|1].
     * @gtk_icono convertir.png
     */
    
function opcion__migrar_toba()
    {
        
$instalacion $this->get_instalacion();
        
//--- Parametros
        
$param $this->get_parametros();
        
$desde = isset($param['-d']) ? new toba_version($param['-d']) : $instalacion->get_version_anterior();
        
$hasta = isset($param['-h']) ? new toba_version($param['-h']) : $instalacion->get_version_actual();
        
$recursivo = (!isset($param['-R']) || $param['-R'] == 1);
        
//$verbose = (isset($param['-V']));

        
if ($recursivo) {
            
$texto_recursivo ", sus instancias y proyectos";
        }
        
$desde_texto $desde->__toString();
        
$hasta_texto $hasta->__toString();
        
$this->consola->titulo("Migración de la instalación actual".$texto_recursivo." desde la versión $desde_texto hacia la $hasta_texto.");

        
$versiones $desde->get_secuencia_migraciones($hasta);
        if (empty(
$versiones)) {
            
$this->consola->mensaje("No es necesario ejecutar una migración entre estas versiones");
            return ;
        } 
        
        
$instalacion->migrar_rango_versiones($desde$hasta$recursivo);
    }        
    
    
/**
    * Incluye en el archivo toba.conf las configuraciones de alias definidas en instalacion.ini e instancia.ini
    */
    
function opcion__publicar()
    {
        if (! 
$this->get_instalacion()->esta_publicado()) {
            
$this->get_instalacion()->publicar();
            
$this->consola->mensaje('OK. Debe reiniciar el servidor web para que los cambios tengan efecto');
        } else {
            throw new 
toba_error("La instalación ya se encuentra publicada. Debe despublicarla primero");
        }
    }    
    
    
/**
    * Quita del archivo toba.conf los alias de la instalacion y de los proyectos
    */
    
function opcion__despublicar()
    {
        if (
$this->get_instalacion()->esta_publicado()) {
            
$this->get_instalacion()->despublicar();
            
$this->consola->mensaje('OK. Debe reiniciar el servidor web para que los cambios tengan efecto');
        } else {
            throw new 
toba_error("La instalación no se encuentra actualmente publicada.");
        }
    }        
    
    
//-------------------------------------------------------------
    // Interface
    //-------------------------------------------------------------

    /**
    *    Consulta al usuario el ID del grupo de desarrollo
    */
    
protected function definir_id_grupo_desarrollo()
    {
        do {
            
$es_invalido false;
            
$id_desarrollo $this->consola->dialogo_ingresar_texto('Por favor, ingrese su número de desarrollador (ENTER utilizará 0)'false);
            
$mensaje "Debe ser un entero positivo, mas info en http://repositorio.siu.edu.ar/trac/toba/wiki/Referencia/CelulaDesarrollo";
            if (
$id_desarrollo == '') {
                
$id_desarrollo 0;
            }
            if (! 
is_numeric($id_desarrollo)) {
                
$es_invalido true;
                
$this->consola->mensaje($mensaje);
            }
            if (
$id_desarrollo 0) {
                
$es_invalido true;
                
$this->consola->mensaje($mensaje);
            }                
        } while (
$es_invalido);
        
$id_desarrollo = (int) $id_desarrollo;
        return 
$id_desarrollo;        
    }


    protected function 
definir_alias_nucleo()
    {
        
$this->consola->enter();        
        
$this->consola->subtitulo('Definir el nombre del ALIAS del núcleo Toba');
        
$this->consola->mensaje('Este alias se utiliza para consumir todo el contenido navegable de Toba');
        
$this->consola->enter();
        
$resultado $this->consola->dialogo_ingresar_texto'Nombre del Alias (por defecto "toba")'false );
        if ( 
$resultado == '' ) {
            return 
'/toba';
        } else {
            return 
'/'.$resultado;    
        }
        
    }
    
    protected function 
definir_tipo_instalacion_produccion()
    {
        
$tipo_desarrollo $this->consola->dialogo_simple('Se trata de una instalacion de producción?');
        return (
$tipo_desarrollo) ? 10;        
    }
    
    protected function 
definir_clave_usuario_admin()
    {
        do {
            
$es_invalido false;
            
$pwd $this->consola->dialogo_ingresar_texto('Toba - Clave (usuario "toba")'true);
            
//Verifico que la clave cumpla ciertos requisitos basicos
            
if ($this->get_instalacion()->es_produccion()) {
                try {
                    
toba_usuario::verificar_composicion_clave($pwdapex_pa_pwd_largo_minimo);            
                } catch (
toba_error_pwd_conformacion_invalida $e) {
                    
$es_invalido true;
                    
$this->consola->mensaje($e->getMessage(), true);
                }
            }            
        } while(
$es_invalido);
        if (
strtoupper($pwd) == 'TOBA') {
            
$this->consola->mensaje('Este password puede crear un OJO de seguridad, por favor cambialo lo antes posible'true);
        }
        return 
$pwd;
    }
}
?>

:: 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.6932 ]--