-- Leo's gemini proxy

-- Connecting to michan.es:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;lang=es-ES

Tutorial de bliz


¿Qué es bliz?

Bliz es un servidor para gemini, que añade funcionalidad de scripts del lado del servidor a las páginas Gemini - siempre que tenga la extensión ".bliz". Bliz funciona haciendo uso del intérpetre de comandos fish y está desarrollado por Cadence.


https://sr.ht/~cadence/bliz/


Instalando bliz


1. Obteniendo bliz

Bliz está disponible en sr.ht, así que sólo tenemos que clonar el repositorio:


> git clone https://git.sr.ht/~cadence/bliz/

> cd bliz


Es necesario que también instales el intérprete de comando "fish". Debería estar disponible en vuestra distribución. Por ejemplo, en Debian y derivadas:


> sudo apt install fish


2. Configurando bliz

Antes de continuar debéis preparar el servidor. Tenéis una plantilla con configuraciones en /src/config.fish que podéis sobreescribir editando /personal/config.fish

No es necesario que toquéis nada, pero debéis saber dos cosas:


1. Por defecto, las páginas se leerán de la carpeta "serve" (hay algunas de prueba)

2. Bliz necesita certificados SSL/TLS, que por defecto se buscan en la carpeta "certs" con los siguientes nombres:

2.1. El certificado "cert.pem"

2.2. La clave "key.pem"


Si no tenéis ningún certificado, ¡no os preocupéis! Bliz trae su propio generador de certificados, que podéis ejecutar con:


> fish certs.fish


Os pedirá rellenar en este orden:


Código de país (ES)

Estado o Provincia

Ciudad

Organización

Unidad de la Organización

Nombre

Dirección de correo


No es necesario rellenar todos los campos. Una vez listo, generará nuestro certificado en la carpeta por defecto.


3. Poniendo en marcha bliz

Ahora sí que sí, podemos comenzar el servidor:


> fish main.fish


Si todo ha ido bien, podemos probar las capacidades de bliz con nuestro navegador favorito


> gmni -j always gemini://localhost/scripting.bliz


Usando bliz

Muy bonito, ¿pero cómo se hace la magia?


0. Prerrequisitos


1. Lo primero que necesitamos es un archivo .bliz (evidentemenete).

2. A continuación, necesitamos una cabecera precedida y cerrada por "%%%". Echemos un vistazo a la cabecera de scripting.bliz:


> %%%

> gem_header 20 'text/gemini'

> set b_current_time (date +%c)

> set b_words (bliz_word_count)

> %%%

> # Welcome to Bliz


Aquí, aparte del formato de texto (text/gemini), hay algo más...


1. Funciones predefinidas

En la cabecera anterior se especifican un par de funciones:


1. b_current_time (que muestra la fecha y hora actual)

2. b_words (que cuenta el número de palabras).


Estas se pueden usar más adelante en el documento. Otra posibilidad es añadirlas a /personal/script-includes.fish, así estarán disponibles en todos los ficheros .bliz sin necesidad de incluirlas en la cabecera.

Por ejemplo, yo añadí la siguiente función:


> set cita (fortune -s)


Ahora puedo llamar a esta función en cualquier lugar del texto con "%funcion" (sin comillas). En mi caso, yo escribí:


Cita del día:

> %cita

Lo que me devuelve una cita aleatoria:


Cita del día:
> There's no such thing as a free lunch.                -- Milton Friedman

¡Genial! Pero eso no es todo.


2. Líneas de comandos

Aparte de funciones predefinidas, también puedes insertar una línea de comandos. Para esto, debes empezar la línea con un "%" + espacio + comando:


% ls -lpB (dirname $blizfile) # Inserta una lista de ficheros en el directorio actual


El resultado de esta línea ya lo habéis visto en la página de prueba.


3. Insertando variables

Por último, podemos insertar variables de shell usando "%$variable" (sin comillas) en cualquier parte del texto.


Notas adicionales

Aunque esto es magnífico, los scripts conllevan un pequeño - pero cuestionable - riesgo de seguridad. Para minizar este riesgo, es buena práctica que los scripts eviten usar parámetros de entrada (aunque en gemini sólo tengas uno - la URL).

En todo caso, dicho riesgo sólo se da en el lado del servidor. Los usuarios no tienen de qué preocuparse :-)


¡A disfrutar!

-- Response ended

-- Page fetched on Sun May 12 08:46:59 2024