!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/lib/rest/docs/   drwxr-xr-x
Free 13.43 GB of 61.93 GB (21.68%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     anotaciones_docs.php (5.61 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

namespace rest\docs;

use 
ReflectionClass;
use 
rest\lib\rest_instanciador;

class 
anotaciones_docs
{
    protected static 
$metodos_validos = array('get''put''post''delete');

    
/**
     * @var \ReflectionClass
     */
    
protected $reflexion;

    protected 
$anotaciones_clase;

    
/**
     * La clase no puede tener namespaces (esta pensada para las del modelo)
     * @param $archivo
     */
    
function __construct($archivo)
    {
        
$i = new rest_instanciador();
        
$i->archivo $archivo;
        
$obj $i->get_instancia();

        
$this->reflexion = new ReflectionClass($obj);
        
$this->get_annotations($this->reflexion);
    }

    
/**
     * Parsea una reflexion (metodo, clase) y devuelve las anotaciones en un arreglo
     * @param $reflexion
     * @return array formato ['nombre'][]
     */
    
protected function get_annotations($reflexion)
    {
        if (
$this->anotaciones_clase) {
            return 
$this->anotaciones_clase;
        }
        
$this->anotaciones_clase $this->get_annotations_metodo($reflexion);
        return 
$this->anotaciones_clase;
    }

    protected function 
get_annotations_metodo($reflexion)
    {
        
$doc $reflexion->getDocComment();
        
$doc $this->limpiar_doc_comment($doc);
        return 
$this->extraer_anotaciones($doc);
    }

    
/**
     * Limpia los asteriscos y espacios de un phpdoc
     * @param $doc string php doc
     * @return string el documento sin los caracteres
     */
    
protected function limpiar_doc_comment($doc)
    {
        
//remuevo /* */ y * de principio de linea
        
$doc preg_replace('#/\*+|\*/#'''$doc);
        
$doc preg_replace('#^\s*\*+#m'''$doc);
        
//remuevo separadores de mas
        
$doc preg_replace('#\s+#'' '$doc);
        return 
$doc;
    }

    
/**
     * En base a un string, extrae @ anotaciones
     * @param $doc string
     * @return array formato ['nombre'][]
     */
    
protected function extraer_anotaciones($doc)
    {
        
//remuevo lo que esta antes del primer @
        
$annotations explode('@'$doc);
        
array_shift($annotations);

        
$retorno = array();
        foreach (
$annotations as $annotation) {
            
$pos strpos($annotation' ');
            
$nombre substr($annotation0$pos);
            
$contenido substr($annotation$pos 1);
            
$retorno [$nombre][] = trim($contenido);
        }
        return 
$retorno;
    }

    function 
get_descripcion_clase()
    {
        if (isset(
$this->anotaciones_clase['description'])) {
            
$desc $this->anotaciones_clase['description'][0];
        } else {
            
$desc "[@description de la clase]";
        }
        return 
$desc;
    }

    function 
get_metodos()
    {
        
$mis_metodos = array();
        
$metodos $this->reflexion->getMethods();
        foreach (
$metodos as $metodo) {
            if (!
$this->es_metodo_de_api($metodo)) {
                continue;
            }

            
$parametros = array();
            
$parameters $metodo->getParameters();
            foreach (
$parameters as $p) {
                
$parametros[] = $p->getName();
            }

            
$anotaciones $this->get_annotations_metodo($metodo);

            
$nuevo_metodo = array(
                
'nombre'      => $metodo->getName(),
                
'parametros'  => $parametros,
                
'anotaciones' => $anotaciones
            
);
            
$mis_metodos[] = $nuevo_metodo;
        }
        return 
$mis_metodos;
    }

    
/**
     * @param $metodo
     * @return bool
     */
    
protected function es_metodo_de_api($metodo)
    {
        
$valido true;
        if (!
$metodo->isPublic()) {
            
$valido false;
        }

        
$partes_metodo explode('_'$metodo->getName());
        
$prefijo array_shift($partes_metodo);
        if (!
in_array($prefijo, static::$metodos_validos)) {
            
$valido false;
        }
        return 
$valido;
    }

    function 
get_parametros_metodo($metodo$type)
    {
        
$api_parameters = array();
        
$key 'param_' $type;
        
$anotaciones $metodo['anotaciones'];
        if (isset(
$anotaciones[$key])) {
            
$parametros $anotaciones[$key];
            foreach (
$parametros as $parameter) {
                
$param $this->get_parametro_tipo($parameter$type);
                if (
$param) {
                    
$api_parameters[] = $param;
                }
            }
//            unset($anotaciones['param_'. $type]);
        
}
        return 
$api_parameters;
    }

    protected function 
get_parametro_tipo($parametro$type)
    {
        
$matches = array();
        
preg_match('#(\$\w*)\b\s+(\w*)\s*(?:\[(.*?)\]\s+)?(.*)#'$parametro$matches);

        if (
count($matches) <= 3) {
            return array();
        }

        
$api_parameter = array();
        
$api_parameter['paramType'] = $type;
        
$api_parameter['name'] = ltrim($matches[1], '$');
        
$api_parameter['type'] = $matches[2];
        
$api_parameter['description'] = $matches[4] ? : '[sin descripcion]';

        if (!empty(
$matches[3])) {
            
$modificadores $matches[3];
            if (
preg_match('/required/'$modificadores)) {
                
$api_parameter['required'] = true;
            }
        }
        return 
$api_parameter;
    }

    function 
get_summary_metodo($metodo)
    {
        if (isset(
$metodo['anotaciones']['summary'])) {
            return 
$metodo['anotaciones']['summary'][0];
        }
        return 
'';
    }

    function 
get_notes_metodo($metodo)
    {
        if (isset(
$metodo['anotaciones']['notes'])) {
            return 
$metodo['anotaciones']['notes'][0];
        }
        return 
'';
    }

    function 
get_errores_metodo($metodo)
    {
        
$errores = array();
        if (isset(
$metodo['anotaciones']['errors'])) {
            foreach (
$metodo['anotaciones']['errors'] as $error) {
                
$code strtok($error' ');
                
$mje strtok('');
                
$errores[] = array('code' => $code'message' => $mje); //errores
            
}
        }
        return 
$errores;
    }

    function 
get_respuestas_metodo($metodo)
    {
        
$respuesta = array();
        if (isset(
$metodo['anotaciones']['response_type'])) {
            
$response $metodo['anotaciones']['response_type'][0];
            
$tipo strtok($response' ');
            if (
'array' == $tipo) {
                
$params strtok('');
                if (
false !== $params) {
                    
$params str_replace('\'''"'$params);
                    
$params json_decode($paramstrue);
                    
$respuesta['items'] = $params;
                    
$respuesta['type'] = 'array';
                }
            } else {
                
$respuesta['type'] = $response;
            }
        }
        return 
$respuesta;
    }

    protected function 
termina_con($needle$haystack)
    {
        return 
substr($haystack, -strlen($needle)) === $needle;
    }

}

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