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.
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
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:
No es necesario rellenar todos los campos. Una vez listo, generará nuestro certificado en la carpeta por defecto.
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
Muy bonito, ¿pero cómo se hace la magia?
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...
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.
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.
Por último, podemos insertar variables de shell usando "%$variable" (sin comillas) en cualquier parte del texto.
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!