====== El objeto oCGI ====== El objeto oCGI sera el encargado de realizar las comunicaciones entre Apache y nuestra Aplicación, al instanciarlo con ''oCgi := TCgi():New()'' inicializa la conexión con Apache y se trae a nuestra aplicación todos los parámetros de la llamada realizada desde el navegador (por POST, GET o como [[tecnicas:urlamigable|URL Amigable]]), los cookies activos en la sesión y las variables de Apache. Como el oCGI es un MEMVAR que esta definido en Nefele.ch puede hacerse referencia a el desde cualquier parte de nuestra aplicación. ===== Propiedades ===== ^Nombre ^Init ^Descripción ^Versión ^ |[[ocgi:aCookies]]| | Array de las cookies recibidas. | 0.1| |[[ocgi:aParams]]| | Array de los parámetros recibidos. | 0.1| |[[ocgi:aSharedParams]] | {} | [[propiedades:aParams]] que serán añadidos a todos los controles que realicen llamas al CGI| 0.3| |[[ocgi:aRoutes]]| | Array con las rutas envidas como URL amigable. | 0.1| |cFunction| "FUNCTION" | Nombre de la propiedad que recibimos que contendrá la función a llamar de nuestro CGI, todos controles que generan llamadas le asignaran este nombre a la propiedad. | 0.1| |cFunctEndCookie| | Función a ejecutar cuando se recibe un cookie caducado. | 0.1| |cMainFunction| "MainFunction" | Método del oCGI que sera llamada por defecto si no se indica otra | 0.1| |cPathTmp| ".\tmp" | Carpeta temporal que utilizara nuestro CGI, por ejemplo para guardar los ficheros adjuntos | 0.1| |cSameSitePolicy | "lax" | Protección de cookies ([[https://www.tarlogic.com/blog/same-site-cookies-ataques-csrf/|info]])| 0.3| |lGetData | .t. | Admitimos parámetros pasados por GET | 0.1| |lGetFunction | .t. | Admitimos funciones pasadas por GET | 0.1| |lCheckNavigator| .t. | Comprobamos compatibilidad del navegador cliente | 0.1| |lSendTTFB | .t. | Adjunta al final del HTML, enviado como respuesta, los milisegundos desde la llamada como un comentario, solo funciona en modo [[tecnicas:debugger|Debug]] | 0.1| |lMsgSavePage| .f. | Nos graba en el fichero "SendPage.html" dentro de la carpeta cgi-bin de Apache, el código Html que se va ha enviar en [[ocgi:sendpage|SendPage()]], muy útil para depurar el código que se enviara al navegador, solo valida en [[tecnicas:debugger|modo Debuger]]. Cuando enviamos con [[ocgi:sendscript|SendScript()]] se guarda en SendScript.html y con [[ocgi:sendjson|SendJSon()]] como SendJSon.html | 0.3| |nDuracionCookie| | Duración de los cookies por defecto. | 0.1| |[[nefele:constantes#modos de llamada|nRequestMode]]| | Modo de llamada recibida desde el navegador ver valores posibles en [[nefele:constantes#modos de llamada|Constantes]] | 0.1| |aSecurityPolicy | {} | Políticas de seguridad a incluir en la cabecera de la conexión | 0.4| | **Tratamiento de variables de sesión** ||| |UserData | { => } | Hash con los datos de sesión | 0.5| |lServerSession | .t. | indica si guardamos las sesiones en un fichero del servidor o como cookies en el navegador del usuario | 0.5| |cServerSession | | Nombre del fichero donde guardamos la sesión, se genera aleatoriamente cuando utilizamos sessiones | 0.5| |nSessionExpire | 365 | Días a los que expira el cookie de sesión | 0.5| |cSessionCookie | "APPDATA" | Nombre del cookie de sesión y extensión de los ficheros de sesión | 0.5| |cPathSession | | Carpeta donde se guardan los ficheros de sesión ( por defecto: cgi-bin\sessions\ ) | 0.5| ===== Métodos ===== ^Método ^Descripción ^Versión ^ |**New** | Instanciación del objeto, lo habitual es asignarlo en este momento a oCGI. | 0.1| |**Run** | Este método comprobara si la propiedad indicada en ::cFunction contiene algún método declarado de la Clase TCgi, y en caso afirmativo lo ejecuta, en caso de no existir realizara una llamada al método [[ocgi:Pagina404]], lo que devolverá al navegador la indicación de que la página no existe. | 0.1| | **Tratamiento de parámetros recibidos** || | |[[ocgi:GetCgiValue]] | Recuperación del valor de un parámetro recibido. | 0.1| |[[ocgi:GetCgiValue|GetValue]] | | 0.5| |[[ocgi:GetCgiArray]] | Recuperación del array de selecciones de un parámetro recibido. | 0.1| |[[ocgi:GetCgiArray|GetArray]] | | 0.5| |[[ocgi:GetCgiType]] | Recuperación del tipo de valor de un parámetro recibido. | 0.1| |[[ocgi:GetCgiType|GetType]] | | 0.5| |[[ocgi:GetCgiFile]] | Recuperación del fichero temporal recibido en un parámetro recibido. | 0.1| |[[ocgi:GetCgiFile|GetFile]] | | 0.5| |[[ocgi:GetCgiMethod]] | Recuperación el método de recepción del Param (rmGET o rmPOST). | 0.4| |[[ocgi:GetCgiMethod|GetMethod]] | | 0.5| |[[ocgi:GetCgiBuffer]] | Recuperación del valor en Bruto sin tratar. | 0.5| |[[ocgi:GetCgiBuffer|GetBuffer]] | | 0.5| |[[ocgi:aParamsToHash]] | Nos retorna un Hash con todos los parámetros recibidos. | 0.1| | **Tratamiento de Cookies** || | |[[ocgi:SendHardCookie]] | Enviar cookie con fecha de caducidad. | 0.1| |[[ocgi:SendSoftCookie]] | Enviar una cookie de sesión. | 0.1| |[[ocgi:SendCodefCookie]] | Enviar cookie codificada. | 0.1| |[[ocgi:GetCodefCookie]] | Recuperar valor de un cookie encriptado. | 0.1| |[[ocgi:GetCookieValue]] | Recuperar valor de un cookie. | 0.1| |[[ocgi:DeleteCookie]] | Borrar cookies. | 0.1| | **Métodos de Envió** || | |[[ocgi:SendPage]] | Enviar código HTML al navegador. | 0.1| |[[ocgi:SendCachePage]] | Cachear código HTML y Enviar al navegador. | 0.1| |[[ocgi:SendPageNoCache]] | Enviar código HTML al navegador pero sin guardarlo en la caché. | 0.1| |[[ocgi:SendFile]] | Enviar un fichero al navegador. | 0.1| |[[ocgi:SendJSon]] | Enviar un JSon al navegador. | 0.1| |[[ocgi:SendScript]] | Enviar un Script JS al navegador. | 0.1| | **Tratamiento de aSharedParams** || | |[[ocgi:AddSharedParam]] | Añade a aSharedParams, si existe lo actualiza. | 0.3| |[[ocgi:GetSharedParam]] | Recupera el valor de un aSharedParams. | 0.3| |[[ocgi:DelSharedParam]] | Elimina un aSharedParams. | 0.3| | **Tratamiento de variables de sesión** || | |[[ocgi:GetUserData]] | Obtiene el valor de una variable de sesión del conjunto de variables almacenado en el Hash ::UserData | 0.5| |[[ocgi:GetUserDatas]] | Obtiene un array de {NombreVariable,Valor} con todas las variables de sesión del Hash ::UserData | 0.5| |[[ocgi:HasUserData]] | Devuelve si existe la variable en el hash ::UserData | 0.5| |[[ocgi:Params2UserData]] | Establece un valor Userdata para cada aParams del CGI | 0.5| |[[ocgi:ResetUserData]] | Borra todos los elementos del hash | 0.5| |[[ocgi:SetUserData]] | Añade al conjunto de variables de sesión una nueva variable | 0.5| |[[ocgi:UnsetUserData]] | Borra un elemento del hash | 0.5| | **Otros Métodos** || | |[[ocgi:Console]] | Podemos enviar mensajes a [[utilidades:nefeleconsole|Néfele Console]] para facilitar la depuración. | 0.1| |[[ocgi:Pagina404]] | Método que se ejecutara cuando sea llamada una función que no exista o no sea accesible. | 0.1| |[[ocgi:MainFunction]] | Función a ejecutar si no se indica ninguna en la llamada. | 0.1| |[[ocgi:Tiempos]] | Utilidad para poner puntos de control de tiempo de ejecución en nuestro CGI. | 0.1| |[[ocgi:AddDeprecated]] | Añade un mensaje a la lista de "Deprecated". | 0.1| ===== El Enrutador ===== Como ya comentamos antes solo son admitidas como llamadas a funciones de nuestro programa desde el navegador, las que correspondan con métodos de la clase TCgi, por lo que tendremos que crearnos nuestro enrutador [[https://info.xailer.com/es/?p=21|sobrecargando]] la clase TCgi. Podemos aprovechar dicha sobrecarga para definir también alguna de las propiedades de oCGI. CLASS TCgi FROM XCgi PROPERTY lGetData INIT .f. METHOD MainFunction() INLINE Menu() METHOD inicio() INLINE Menu() METHOD pruebaspedro() INLINE PruebasPedro() METHOD visparam() INLINE VisParam() METHOD visparam2() INLINE VisParam( .T. ) METHOD apachevars() INLINE ApacheVars() METHOD holamundo() END CLASS En este ejemplo utilizamos la técnica de tener nuestras PROCEDURE y mediante la clausula INLINE realizar el enrutamiento de las llamadas hacia dichas PROCEDURE, incluso haciendo dos llamadas al mismo PROCEDURE con parametros distintos dependiendo del método del oCGI llamado. También podemos desarrollar los métodos de la clase TCgi. METHOD holamundo() CLASS TCgi WITH OBJECT TWebPage():New() . . . oCGI:SendPage(:Create()) END WITH RETURN Nil Si utilizamos el [[utilidades:nefelewizard|NéfeleWizard]] para montar la estructura inicial de nuestra aplicación, este nos creara un enrutador básico en Main.prg, justo debajo del **PROCEDURE CGI_Init()** que es donde se instancia la clase TCgi asignándola a oCGI y se inicia con oCGI:Run(). ~~DISCUSSION|Comentarios oCGI~~ /* |[[ocgi:Cookie2Session]] | Carga de un archivo en disco las variables de sesión | 0.5| |[[ocgi:Session2Cookie]] | Graba las variables de sesión en un archivo en disco | 0.5| */