!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_led/php/consola/comandos/   drwxrwxr-x
Free 14.52 GB of 61.93 GB (23.45%)
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_silenciosa.php (15.24 KB)      -rwxrwxr-x
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
require_once('comando_toba.php');

class 
comando_instalacion_silenciosa extends comando_toba
{    
    function 
recuperar_contenido_archivo($nombre)
    {
        
$resultado '';
        if (
file_exists($nombre)) {
            
$resultado file_get_contents($nombre);
        }
        return 
$resultado;
    }
    
    
//-------------------------------------------------------------
    // Opciones
    //-------------------------------------------------------------
    
    /**
     * Ejecuta una instalacion completa del framework para desarrollar un nuevo proyecto
     * @consola_parametros Opcionales: [-d 'iddesarrollo'] [-t 0| 1] [-n 'nombre inst'] [-h 'ubicacion bd'] [-p 'puerto'] [-u 'usuario bd'] [-b nombre bd] [-c 'archivo clave bd'] [-k 'archivo clave usuario admin']  [--usuario-admin 'usuario admin'][--alias-nucleo 'aliastoba'][--schema-toba 'schemaname'].
     * @gtk_icono instalacion.png
     */
    
function opcion__instalar()
    {        
        
$nombre_toba 'toba_'.toba_modelo_instalacion::get_version_actual()->get_release('_');        
        
        
//--- Verificar instalacion
        
$param $this->get_parametros();
        
        
//--- 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($param);
        
$tipo_instalacion $this->definir_tipo_instalacion_produccion($param);        
        
$nombre $this->definir_nombre_instalacion($param);
        
$alias $this->definir_alias_nucleo($param);
        if (
$alias ==  '/toba') {                                                //Si viene el alias por defecto, le agrego el nro de version
            
$alias $alias'_' toba_modelo_instalacion::get_version_actual()->get_release();
        }
        
        
toba_modelo_instalacion::crear($id_desarrollo$alias$nombre$tipo_instalacion);        
        
$id_instancia = ($tipo_instalacion == '1') ? 'produccion' $this->get_entorno_id_instancia(true);        
        
        
//--- Crea la definicion de bases
        
$base $nombre_toba;
        
$schema $this->definir_schema_toba($param$id_instancia);
        if (! 
$this->get_instalacion()->existe_base_datos_definida($base)) {
            
$datos = array(
                
'motor' => 'postgres7',
                
'profile' => $this->definir_profile_motor($param),
                
'usuario' => $this->definir_usuario_motor($param),
                
'clave' => $this->definir_clave_motor($param),
                
'base' => $this->definir_base_motor($param),
                
'puerto' => $this->definir_puerto_motor($param),
                
'encoding' => 'LATIN1',
                
'schema' => $schema
            
);            
            
$this->get_instalacion()->agregar_db($base$datos);
        }            
        
//--- Crea la instancia
        
$proyectos = array();    
        
toba_modelo_instancia::crear_instancia($id_instancia$base$proyectos);

        
//-- Carga la instancia
        
$instancia $this->get_instancia($id_instancia);
        
$instancia->cargar(true);    //Si no es interactivo, crea siempre la BD

        //--- Pido el password para el usuario por defecto
        
$pwd $this->definir_clave_usuario_admin($param);

        
$usr $this->definir_usuario_admin($param);
        
//--- Vincula un usuario a todos los proyectos y se instala el proyecto                
        
$instancia->agregar_usuario($usr'Usuario Administrador'$pwd);                
        
$instancia->exportar_local();
        
        
//--- Crea los nuevos alias
        
$instancia->crear_alias_proyectos();
        
        
$release toba_modelo_instalacion::get_version_actual()->get_release();
        
$instal_dir toba_modelo_instalacion::dir_base();
        if (
toba_manejador_archivos::es_windows()) {
            if (isset(
$_SERVER['USERPROFILE'])) {
                
$path $_SERVER['USERPROFILE'];
            } else {
                
$path $instal_dir;
            }
            
$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 TOBA_INSTALACION_DIR=$instal_dir\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);
        } else {
            
$path $instal_dir;
            
$path .= "/entorno_toba.env";
            
$bat "export TOBA_DIR=".toba_dir()."\n";
            
$bat .= "export TOBA_INSTANCIA=$id_instancia\n";
            
$bat .= "export TOBA_INSTALACION_DIR=$instal_dir\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);
        }
    }
    
    
/**
    * Crea una instalación básica.
    * @gtk_icono nucleo/agregar.gif
    */
    
function opcion__crear()
    {
        if( ! 
toba_modelo_instalacion::existe_info_basica()) {
            
$param $this->get_parametros();
            
$id_grupo_desarrollo self::definir_id_grupo_desarrollo($param);
            
$alias self::definir_alias_nucleo($param);
            
$tipo_instalacion $this->definir_tipo_instalacion_produccion($param);
            
$nombre $this->definir_nombre_instalacion($param);
            
toba_modelo_instalacion::crear$id_grupo_desarrollo$alias$nombre$tipo_instalacion);
        }
    }
    
    
/**
     * 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();
        
$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) {
            
exec($comando[0]);
        }        
        if (isset(
$grupo)) {
            
$comando "chgrp -R $grupo $toba_dir";
            
exec($comando);
            
$comando "chmod -R g+rw $toba_dir";
            
exec($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);

        
$versiones $desde->get_secuencia_migraciones($hasta);
        if (empty(
$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();
        } 
    }    
    
    
/**
    * 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();
        } 
    }        
    
    
//----------------------------------------------------------------------------------------------------------------------------------//
    
protected function get_parametros()
    {
        
$parametros parent::get_parametros();
        if (isset(
$parametros['--archivo_configuracion'])) {
            
$resultado $this->parsear_yml($parametros['--archivo_configuracion']);                //Queda ver cual de los nodos tomaria    
        
} else {
            
$resultado $parametros;
        }
        return 
$resultado;        
    }    
    
    protected function 
parsear_yml($archivo
    {
        
$contenido sfYAML::load($archivo);                                                //Esta mas actualizado que el de PHP, que ademas requiere PECL
        //$contenido = yaml_parse_file($archivo);
        
return $contenido;
    }
    
    
//-------------------------------------------------------------
    // Interface
    //-------------------------------------------------------------
    
protected function recuperar_dato_y_validez($param$nombre_parametro)
    {
        
$resultado null;
        do {            
            
$ind current($nombre_parametro);
            
$es_invalido = (! isset($param[$ind]));
            if (! 
$es_invalido) {
                
$resultado $param[$ind];
            }
        } while (
$es_invalido && next($nombre_parametro) !== false);
        
        return array(
'invalido' => $es_invalido'resultado' => $resultado);
    }    
        
    protected function 
definir_alias_nucleo($param)
    {        
        if (! isset(
$param['--alias-nucleo']) || $param['--alias-nucleo'] == '' ) {
            return 
'/toba';
        } else {
            return 
$param['--alias-nucleo'];    
        }        
    }
        
    protected function 
definir_schema_toba($param$id_instancia)
    {        
        
$nombre_parametro = array('--schema-toba');
        
$result $this->recuperar_dato_y_validez($param$nombre_parametro);
        if (
$result['invalido']) {
            
toba::logger()->error('Se selecciono ' $id_instancia ' como nombre de schema para la base toba, ya que el mismo no fue provisto');
            return 
$id_instancia;
        }
        return 
$result['resultado'];        
    }
    
    
/**
    *    Consulta al usuario el ID del grupo de desarrollo
    */
    
protected function definir_id_grupo_desarrollo($param)
    {
        
$nombre_parametro = array( '-d''--id-desarrollador''toba-id-desarrollador');        
        do {            
            
$ind current($nombre_parametro);
            
$es_invalido = (! isset($param[$ind]));
            if (! 
$es_invalido) {
                
$id_desarrollo $param[$ind];
                if (! 
is_numeric($id_desarrollo) || $id_desarrollo 0) {
                    
$es_invalido true;
                }                
            }
        } while (
$es_invalido && next($nombre_parametro) !== false);        
        if (
$es_invalido) {                                    //Si aun sigue faltando el parametro, defaulteo.
            
toba::logger()->error('Se selecciono 0 cero como id de desarrollador, ya que uno válido no fue provisto');
            return 
0;            
        }        
        return (int)
$id_desarrollo;    
    }
    
    protected function 
definir_tipo_instalacion_produccion($param)
    {
        
$nombre_parametro = array('-t''-tipo-instalacion-produccion''toba-tipo-instalacion');
        
$result $this->recuperar_dato_y_validez($param$nombre_parametro);
        if (
$result['invalido']) {
            
toba::logger()->error('Se selecciono tipo de instalación de producción, ya que el tipo no fue provisto');
            return 
1;
        }
        return (
$result['resultado']) ? 10;        
    }
    
    protected function 
definir_nombre_instalacion($param)
    {
        
$nombre_parametro = array('-n''--nombre-instalacion''toba-nombre-instalacion');
        
$result $this->recuperar_dato_y_validez($param$nombre_parametro);        
        if (
$result['invalido']) {
            
toba::logger()->error("Se selecciono el texto 'Sin nombre'  como nombre para la instalación, ya que uno válido no fue provisto");
            return 
'Sin nombre';
        }        
        return 
$result['resultado'];
    }
    
    protected function 
definir_profile_motor($param)
    {
        
$nombre_parametro = array('-h''--base-profile''toba-base-profile');
        
$result $this->recuperar_dato_y_validez($param$nombre_parametro);        
        if (
$result['invalido']) {
            
toba::logger()->error("Se selecciono 127.0.0.1 como ubicación por defecto, ya que una válida no fue provista");
            return 
'127.0.0.1';
        }        
        return 
$result['resultado'];
    }
    
    protected function 
definir_usuario_motor($param)
    {
        
$nombre_parametro = array('-u''--base-usuario''toba-base-usuario');
        
$result $this->recuperar_dato_y_validez($param$nombre_parametro);        
        if (
$result['invalido']) {
            
toba::logger()->error("Se selecciono postgres como nombre de usuario por defecto, ya que uno válido no fue provisto");
            return 
'postgres';
        }        
        return 
$result['resultado'];
    }    
    
    protected function 
definir_base_motor($param)
    {
        
$nombre_toba 'toba_'.toba_modelo_instalacion::get_version_actual()->get_release('_');
        
$nombre_parametro = array('-b''--base-nombre''toba-base-nombre');
        
$result $this->recuperar_dato_y_validez($param$nombre_parametro);        
        if (
$result['invalido']) {
            
toba::logger()->error("Se selecciono '$nombre_toba' como nombre de bd, ya que uno válido no fue provisto");
            return 
$nombre_toba;
        }        
        return 
$result['resultado'];
    }
    
    protected function 
definir_puerto_motor($param)
    {
        
$nombre_parametro = array('-p''--base-puerto''toba-base-puerto');
        
$result $this->recuperar_dato_y_validez($param$nombre_parametro);        
        if (
$result['invalido']) {
            
toba::logger()->error("Se selecciono el puerto 5432 por defecto, ya que uno válido no fue provisto");
            return 
'5432';
        }        
        return 
$result['resultado'];
    }    
    
    protected function 
definir_clave_motor($param)
    {
        
$nombre_parametro = array('-c''--archivo-clave-bd''toba-archivo-clave-bd');
        do {
            
$ind current($nombre_parametro);
            
$es_invalido = (! isset($param[$ind]));
            if (! 
$es_invalido) {
                
$clave $this->recuperar_contenido_archivo($param[$ind]);            
            }            
        } while(
$es_invalido && next($nombre_parametro) !== false);
        
        if (
$es_invalido) {
            
toba::logger()->error("Se selecciono postgres como clave por defecto, ya que una válida no fue provista");
            return 
'postgres';
        }        
        return 
$clave;
    }    
    
    protected function 
definir_clave_usuario_admin($param)
    {
        
$nombre_parametro = array('-k''--archivo-clave-admin''toba-archivo-clave-admin');
        
$esto_es_produccion $this->get_instalacion()->es_produccion();
        do {
            
$ind current($nombre_parametro);
            
$es_invalido = (! isset($param[$ind]));
            if (! 
$es_invalido) {
                
$pwd $this->recuperar_contenido_archivo($param[$ind]);
                if (
$esto_es_produccion) {                                            //Verifico que la clave recuperada posea ciertos requisitos.
                    
try {
                        
toba_usuario::verificar_composicion_clave($pwdapex_pa_pwd_largo_minimo);            
                    } catch (
toba_error_pwd_conformacion_invalida $e) {
                        
$this->consola->mensaje($e->getMessage(), true);
                        
$es_invalido=true;
                    }
                }                
            }            
        } while(
$es_invalido && next($nombre_parametro) !== false);
        
        if (
$es_invalido) {
            
$this->consola->mensaje('Se procede con un password no válido bajo su responsabilidad' true);
            
toba::logger()->error('Se procede con el password seleccionado a pesar que no cumple con las condiciones, su responsabilidad!');
        } 
        return 
$pwd;
    }    
    
    protected function 
definir_usuario_admin($param)
    {
        
$nombre_parametro = array('--usuario-admin''toba-usuario-admin');
        
$result $this->recuperar_dato_y_validez($param$nombre_parametro);
        
        if (
$result['invalido']) {
            
toba::logger()->error("Se selecciono toba como nombre del usuario administrador, ya que uno válido no fue provisto");
            return 
'toba';
        }
        return 
$result['resultado'];
    }    
}
?>

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