💾 Archived View for sl1200.dystopic.world › art › notes_from_the_address_bar.gmi captured on 2023-09-08 at 16:10:39. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2023-01-29)

-=-=-=-=-=-=-

Notas desde la barra de direcciones con TOTP y servidor Agate

2023-01-15

#gemini #agate #notas #journalctl #totp #bash

Objetivo:

Publicar un diario o anotaciones directamente desde la barra de direcciones de cualquier cliente gémini, con el servidor Agate y con acceso a través de un código TOTP.

Cómo funciona

	En el terminal:
	echo micontraseña | base32
	NVUWG33OORZGC43FYOYWCCQ=

	En el script:
	v=$(oathtool -b -d 8 -s 60 --totp 'NVUWG33OORZGC43FYOYWCCQ')

	En el móvil o PC deberás configurar tu app con ese mismo código en base32.

Ejemplo de sintaxis

	Para publicar: gemini://sl1200.dystopic.world/39372698/Esto es una anotación. 
	Para borrar  : gemini://sl1200.dystopic.world/85426565/2023-01-10 10:35/rm

Script en Bash

#!/bin/bash

NOTAS=/home/usuario/gemini/content/diario.gmi

# Cálculo el TOTP
v=$(oathtool -b -d 8 -s 60 --totp 'clave en base32')

# Doy 59 segundos para introducir la url y que se genere el log antes de seguir con el script
sleep 59

# Función de decodificación de la url
function urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; }

# Filtro el contenido de los registros del último minuto
post=$(journalctl --since "1 min ago" | grep 'gemini' | sed '1,5!d' | grep "$v" | cut -d "\"" -f 2 | \
 sed 's|gemini://usuario.dystopic.world||g' | sed "s/\/$v\///g" )

# Decodifico el contenido filtrado
post2=$( urldecode $post )

# Si post2 acaba en aaaa-mm-dd/rm, borro /rm de post2 y borro la fila de diario.gmi que incluya post2
if [[ $post2 == *"/rm" ]]; then
	post2=$( echo $post2 | sed 's/\/rm//g')
	sed -i "/$post2/{N;N;d;}" $NOTAS
    exit
	else	

# Si el contenido está vacio finalizo el script para que no añada filas en blanco
if [ "$post2" = "" ];
	then exit
	else
	# Si pongo una url http o gemini el contenido se publique como un enlace con =>
	if [[ $post2 == http* || $post2 == gemini* ]]; then
	# Inserto el contenido decodificado, junto con la fecha, en la línea 6 del documento diario.gmi
	sed -i "6i \#\#\# $(date +"%Y-%m-%d %H:%M")" $NOTAS
	sed -i "7i => $post2 " $NOTAS
	# Depuro algunas cosas que no deben salir
	sed -i -e '7s/https\:\//https\:\/\//' $NOTAS
	sed -i -e '7s|\/\/\/|\/\/|' $NOTAS
	sed -i -e '7s|gemini\:\/|gemini\:\/\/|' $NOTAS
	# Inserto una fila en blanco tras el comentario recién publicado
	sed -i '8i\ ' $NOTAS 
		else
		# Inserto el contenido decodificado, junto con la fecha, en la línea 6 del documento diario.gmi
		sed -i "6i \#\#\# $(date +"%Y-%m-%d %H:%M")" $NOTAS
		sed -i "7i 💬 $post2" $NOTAS
		# inserto una fila en blanco tras el comentario recién publicado
		sed -i '8i\ ' $NOTAS
	fi  

# limito el número de líneas del documento a 500
sed -i '500,$d' $NOTAS
fi		
fi

Finalmente programas el script con cron para que se ejecute cada minuto.

This work by SL1200 is licensed under CC BY 4.0

◄ BACK

🏠 Home