En el articulo de la publicación de Web Security de la ACM Paul Vixie hace una defensa del uso de páginas estáticas a la hora de proteger los servidores WWW ante las distintas amenazas existentes tanto ataques de denegación de servicio como intrusiones , modificación de páginas WWW , etc lo que nos lleva a comentar el funcionamiento de Webber.
Desde hace mucho tiempo (aproximadamente 1996 ) en RedIRIS se emplea un sistema para la generación de los contenidos en las páginas WWW llamado webber, (sin referencia ninguna al corredor de formula ;-), que aunque odiado por muchos sigue todavía se mantiene, webber hace las funciones de gestor de contenidos (CMS como lo suelen llamar en ingles) generando las páginas HTML de forma uniforme en base a una plantilla y de forma estática.
Webber ha pasado por varios cambios inicialmente era un simple programa en Perl que en base a una plantilla fija y un texto HTML sin cabeceras (el contenido de la página), generaba una página HTML con una apariencia definida, cabecera, pie de páginas, etc. la tipica página de «Hola Mundo» en webber era más o menos:
#title= Hola mundo
#athor= anonimo
#wbbIn=
Hola mundo<p>
¿Como estas ?
Donde los valores con corchete «#» indicaban el nombre de una variable (que podía tener varias lineas) que después se rellenaba en la plantilla. Había varias variables definidas, title para el titulo, wbbIn para el contenido la página, description para la descripción, keyword para las palabras clave , etc. Además y para facilitar se tenían ficheros de plantilla para incluir valores que iban a ser comunes dentro de un subdirectorio , como «author» y se tenía «herencia», ya que las plantillas se procesaban por todo el arbor de directorios desde la raíz del código.
En una primera evolución se paso a separar las funciones en diversos procesadores, de forma que se pudieran tener varias plantillas (el nombre de la plantilla a utilizar era al final otra variable «webber» ), se pudieran incluir tablas de forma rápida, colocar menus, separar el código fuente de las páginas finales, etc. Al final muchas funciones que la mayoría de las veces utilizamos pocas veces.
Siguiendo con la evolución y como al final la utilización del «vi» en sus diversas versiones era cada vez más compleja (entre otras cosas por la aparición de las distintas codificaciones, ISO-8859, UTF-8, etc) y porque las páginas WWW no solas las editaban usuarios «expertos» al final se creo una entorno de edición «web» para al menos poder editar las páginas WWW desde el servidor y después utilizar webber para generar el contenido en base a los ficheros estáticos.
Así el webber ha ido evolucionando dentro de RedIRIS tiene hasta página web en el servidor, pero su uso fuera de RedIRIS ha sido muy escaso , seguramente por la complejidad de montar unas páginas «desde cero» y el abuso de la terminología exotérica que tiene la documentación y es que como siempre lo documentar y actualizar las cosas nos da algo de pereza.
Aunque Webber ha sido código libre desde el principio, la gestión del código siempre ha sido algo complicada y por eso a finales del 2014 decidimos migrar el repositorio de código de Webber a github de forma que el código de webber este disponible en esta herramienta.
Coincidiendo con la publicación de esta entrada en el GitHub esta la versión 3.0 preliminar del webber, que permite una mayor flexibilidad a la hora de definir la entrada y salida y elimina algunos procesadores antiguos no utilizados, al ser una versión preliminar algunas cosas no están pulidas del todo , aunque es bastante funcional.
Un pequeño ejemplo de funcionamiento:
Descargar el fichero de github en un directorio y descomprimirlo ,
Editar el fichero webber.wbb y cambiar la entrada «wbbRoot» , por ejemplo,
#wbbRoot=/home/usuario/webber-master
Grabar el fichero.
El fichero de configuración será ahora mismo mas o menos.
##where the webber standard root start
#wbbRoot=/XXXX/XXXX/XXXX/webber-master/
## Where "standard" processors are located
#wbbProcLib= $var(wbbRoot)/proc
## Version
## Template dir name
#wbbTemplateName= wbbdir.cfg
#wbbFileNameRegExp = ^(.+).wbb$
#wbbFileLangRegExp = ^.+(es|en|ca|gl).wbb$
# Default extension
#wbbExtension = .html
#wbbDebugFile= $var(wbbRoot)debug.txt
##wbbDebugFile = ./debug.txt
#wbbDebug = 10
#wbbRun=File::SetTarget File::ReadVars wbbPre wbbProc wbbPost File::WriteVar
#File.WriteVar= wbbOut
#wbbPre=
#wbbProc= Webbo::webbo
#wbbPost=
#webbo.src=file:$var(wbbRoot)src/test.webbo
#webbo.dst=wbbOut
#wbbSourceRoot= $var(wbbRoot)src
#wbbTargetRoot= $var(wbbRoot)html
#wbbMakedir=1
Las variables tienen el siguiente significado:
- wbbRoot : Base donde se encuentra el código de webber
- wbbProc: Donde se encuentran los procesadores webber
- wbbDebugFile : Path al fichero de debug
- wbbDebug : Nivel de depuración
- wbbTemplateName Fichero de «plantilla» utilizado para definir variables que afecten a todos los ficheros que haya en un directorio (y subdirectorios de el)
wbbFileNameRegExp = Expresión regular para idenfitifcar los ficheros de fuentes webber
wbbFileLangRegExp = Expresion regular para idenficar los ficheros de lenguaje
wbbExtension = Extensión que tendran los ficheros destino
- wbbSourceRoot= Base donde se encuentran los fuentes webber
wbbTargetRoot= Base a partir de donde se escriben los ficheros webber
wbbMakedir Fuerza la creacion de directorios si no existen
- wbbRun: Listado de procesadores a ejecutar ya tiene definido una serie de procesadores para tener el funcionamiento de webber 1.X por defecto, los procesadores que se ejecutan son:
- File::SetTarget : Define en base una serie de variables cual es el fichero que se va a escribir
- File::ReadVars: Lee un fichero en formato webber y define las variables de forma apropiada
- wbbPre , wbbProc , wbbPost : listas de procesadores a ejecutar, con compatibilidad con webber 1.X
- File::WriteVar : Escribe en el fichero definido en la variable wbbTargetFile el contenido de una variable webber
- De todos las tres colas de procesadores solo wbbProc contiene un procesador y es el Webbo
- wbbProc = Webbo , Webbo es un procesador que reemplaza nombres de variables webber por su valor en un fichero / variable (apuntado en #webbo.src ) dejando el contenido final en webbo.dst , es utilizado a la hora tener una plantilla (ver el fichero src/(test.webbo) que después es rellenada, ahí se definen dos variables wbbIn y title
- webbo.dst= wbbOut
- webbo.src= file:$var(wbbRoot)src/test.webbo
Una vez modificada la variable wbbRoot para que apunte se puede hacer:
perl ./webber --config ./webber.wbb --help para ver el fichero de ayuda
con
perl ./webber --config ./webber.wbb --list-proc se puede obtener un listado de los procesadores instalados
y finalmente con:
perl ./webber --config ./webber.wbb src/* se procesan los dos ficheros ".wbb" que hay en el directorio src/ y se generan en el directorio html/ los ficheros "destinos.
En próximas entradas seguiremos detallando el uso de webber para la creación de páginas más complejas.