#!/bin/sh
# Esegue i comandi privilegiati quando velmod deposita una richiesta: lo schema
# delle unit .path di systemd in main (velmo-blocco.path, velmo-liste.path, …).
# velmod scrive senza privilegi in /var/run/velmo-richieste; qui root applica.
. /usr/lib/velmo/comune.sh

applica() {
	case "$1" in
	blocco-richiesto) /usr/lib/velmo/applica-blocco.sh ;;
	ammessi-richiesti) /usr/lib/velmo/applica-ammessi.sh ;;
	liste-richieste) /usr/lib/velmo/applica-liste.sh ;;
	finestra-richiesta) /usr/lib/velmo/applica-finestra.sh ;;
	televisori-richiesti) /usr/lib/velmo/applica-televisori.sh ;;
	coppie-richieste) /usr/lib/velmo/applica-coppie.sh ;;
	riavvio-richiesto) /usr/lib/velmo/applica-riavvio.sh ;;
	rete-chiave-richiesta) /usr/lib/velmo/applica-rete.sh ;;
	rete-casa-richiesta) /usr/lib/velmo/applica-rete-casa.sh ;;
	apparecchi-richiesta) /usr/lib/velmo/applica-apparecchi.sh ;;
	contratto-richiesta) /usr/lib/velmo/applica-contratto.sh ;;
	azzeramento-richiesto) /usr/lib/velmo/applica-azzeramento.sh ;;
	usb-richiesta) /usr/lib/velmo/applica-usb.sh ;;
	usb-prepara-richiesta) /usr/lib/velmo/applica-usb-prepara.sh ;;
	aggiornamento-richiesta) /usr/lib/velmo/applica-aggiornamento.sh ;;
	firma-contributo-richiesta) /usr/lib/velmo/applica-firma-contributo.sh ;;
	*) return 0 ;;
	esac
}

mkdir -p "$RICHIESTE"; chown velmo:velmo "$RICHIESTE"; chmod 0755 "$RICHIESTE"
# Gli insiemi delle modalità e i ritorni a tempo, dopo un avvio o un riavvio di
# questo servizio (velmo-insiemi di main).
/usr/sbin/velmo-modo --riapplica
/usr/lib/velmo/applica-coppie.sh --riapplica
NOMI="blocco-richiesto ammessi-richiesti liste-richieste finestra-richiesta televisori-richiesti coppie-richieste rete-chiave-richiesta rete-casa-richiesta apparecchi-richiesta contratto-richiesta riavvio-richiesto azzeramento-richiesto usb-richiesta usb-prepara-richiesta aggiornamento-richiesta firma-contributo-richiesta"
# Un'attesa alla volta, senza pipeline: procd ferma questo processo, e un
# «inotifywait -m | while» lasciava vivi i figli, che applicavano ogni richiesta
# due volte. Dopo ogni attesa si guardano tutti i nomi: una richiesta depositata
# mentre se ne applicava un'altra non si perde.
while :; do
	for f in $NOMI; do
		{ [ -e "$RICHIESTE/$f" ] || [ -L "$RICHIESTE/$f" ]; } && applica "$f"
	done
	inotifywait -q -t 600 -e close_write -e moved_to -e create "$RICHIESTE" >/dev/null 2>&1
done
