PageOnPage
En esta semana, seguramente como producto de las no-ganas de preparar finales, me puse a jugar en una cosa media bizarra (y que, supongo, alguien ya debe haber implementado muy-mucho mejor hace años... pero que no encontré en una primera búsqueda).
La cosa surge así: Estaba viendo de poder instalar una aplicación con base de datos en Aleph (especificamente este blog) y probé un par de cosas, todas sin éxito. La idea siguiente fue la de ver si era razonable y sencillo hacer una página que funcionara como repetidora de otra página, dando la impresión de ser local... y así empecé a tirar un par de líneas de código.
Anoche estaba aburrido y me puse a pulir el par de líneas iniciales que había tirado la semana pasada. El resultado de la trasnochada es este paquete; y la demostración del PageOnPage andando puede verse en este lugar, enmascarando el sitio web de FIUBA.
La aplicación es bastante sencilla, apenas unas 100 líneas en PHP. Básicamente tiene dos partes; una, un .htaccess con una reglita de mod_rewrite que redirije todo a la otra, el script _popwrapper.php. Este script conoce el host y el path en el que está corriendo el mod_rewrite y conoce el host y path de la pagina que debe enmascarar; con esos datos, la URI, el POST, el method y los headers del request, arma la URI de la página destino y un pedido que le envía al proxy web (no publiqué otra versión, que obvia el proxy). En base a lo que devuelve el proxy, se arma el request, reemplazando los enlaces absolutos del sitio y los dominios en las cookies. El resultado, navegar una pagina remota adentro de otra.
El codigo es desprolijo y tiene bastantes cosas sin hacer... a saber, no todos los headers se están reenviando, así que en el ida y vuelta se pierden cosas como referrers, archivos, headers de caché o fechas de modificación, etc.. El conjunto no es más que un mero juguete... pero implementa un par de features copadas. Por supuesto, todo muy bonitamente hardcodeado y bien bien poco genérico.
Cuando pude entrar a un foro, navegarlo, loguearme y dejar un par de mensajitos, consideré que era hora de irme a dormir, con la inquietud que me llevó a escribirlo ya satisfecha.