119 lines
4.6 KiB
Bash
Executable file
119 lines
4.6 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
MASTHOME='/var/lib/mastodon'
|
|
MASTENVFP="$MASTHOME/live/.env.production"
|
|
DOMBLOCKSFP="$MASTHOME/live/public/domain_blocks.txt"
|
|
|
|
HELP="SINTASSI
|
|
mastblocksdump.sh [opzioni]
|
|
DESCRIZIONE
|
|
Questo script rimedia all'attuale mancanza, in mastodon, di un endpoint
|
|
dell'API che ritorni una lista dei domini bloccati da un'istanza in un
|
|
formato univoco e parsabile. Legge i dati necessari alla connessione al
|
|
db di mastodon dal file di configurazione di mastodon, per default
|
|
\"$MASTENVFP\"
|
|
poi esegue tramite psql una query sulla tabella domain_blocks
|
|
e ne salva i risultati in un file di testo, per default
|
|
\"$DOMBLOCKSFP\"
|
|
che sarà accessibile da \"https://[dominio]/domain_blocks.txt\".
|
|
È pensato per essere eseguito periodicamente da un cron job, come
|
|
utente mastodon oppure root oppure altro utente che abbia accesso in
|
|
lettura al file di configurazione di mastodon e in scrittura a quello
|
|
in cui scrivere la lista delle istanze bloccate.
|
|
OPZIONI
|
|
-H, --home
|
|
Definisce la home di mastodon (per default \"$MASTHOME\")
|
|
e di conseguenza il percorso del suo file di configurazione
|
|
(per default \"$MASTENVFP\") e del file
|
|
in cui scrivere la lista delle istanze bloccate (per default
|
|
\"$DOMBLOCKSFP\").
|
|
È comunque possibile specificare individualmente il percorso
|
|
del file di configurazione di mastodon e di quello in cui scrivere
|
|
la lista delle istanze bloccate con le due opzioni che seguono.
|
|
-e, --envfp
|
|
Definisce il percorso del file di configurazione di mastodon in uso.
|
|
-b, --blocksfp
|
|
Definisce il percorso del file in cui scrivere la lista delle istanze
|
|
bloccate.
|
|
-h, --help
|
|
Mostra questo aiuto ed esce."
|
|
|
|
args=("$@")
|
|
i=0
|
|
while [ $i -lt ${#args[@]} ]; do
|
|
if [ "${args[$i]:0:1}" == "-" ]; then
|
|
case "${args[$i]}" in
|
|
"-H" | "--home" )
|
|
if [ -z "${args[$i+1]}" ]; then
|
|
echo "L'opzione \"${args[$i]}\" richiede un parametro (usa \"-h\" per l'aiuto)."
|
|
exit 1
|
|
else
|
|
((i++))
|
|
MASTHOME=$(echo "${args[$i]}" | sed -e 's/\/$//')
|
|
MASTENVFP="$MASTHOME/live/.env.production"
|
|
DOMBLOCKSFP="$MASTHOME/live/public/domain_blocks.txt"
|
|
fi
|
|
;;
|
|
"-e" | "--envfp" )
|
|
if [ -z "${args[$i+1]}" ]; then
|
|
echo "L'opzione \"${args[$i]}\" richiede un parametro (usa \"-h\" per l'aiuto)."
|
|
exit 1
|
|
else
|
|
((i++))
|
|
MASTENVFP="${args[$i]}"
|
|
fi
|
|
;;
|
|
"-b" | "--blocksfp" )
|
|
if [ -z "${args[$i+1]}" ]; then
|
|
echo "L'opzione \"${args[$i]}\" richiede un parametro (usa \"-h\" per l'aiuto)."
|
|
exit 1
|
|
else
|
|
((i++))
|
|
DOMBLOCKSFP="${args[$i]}"
|
|
fi
|
|
;;
|
|
"-h" | "--help" )
|
|
echo "$HELP"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "\"${args[$i]}\": opzione sconosciuta (usa \"-h\" per l'aiuto)."
|
|
exit 1
|
|
;;
|
|
esac
|
|
else
|
|
echo "\"${args[$i]}\": opzione sconosciuta (usa \"-h\" per l'aiuto)."
|
|
exit 1
|
|
fi
|
|
((i++))
|
|
done
|
|
|
|
[ ! -e "$MASTENVFP" ] && echo "\"$MASTENVFP\" non esiste, muoio (usa \"-h\" per l'aiuto)." && exit 1
|
|
[ ! -f "$MASTENVFP" ] && echo "\"$MASTENVFP\" non è un file, muoio (usa \"-h\" per l'aiuto)." && exit 1
|
|
[ ! -r "$MASTENVFP" ] && echo "\"$MASTENVFP\" non è leggibile, muoio (usa \"-h\" per l'aiuto)." && exit 1
|
|
|
|
DB_HOST=`grep 'DB_HOST' "$MASTENVFP"|sed -e 's/[^=]*=//'`
|
|
DB_PORT=`grep 'DB_PORT' "$MASTENVFP"|sed -e 's/[^=]*=//'`
|
|
DB_NAME=`grep 'DB_NAME' "$MASTENVFP"|sed -e 's/[^=]*=//'`
|
|
DB_USER=`grep 'DB_USER' "$MASTENVFP"|sed -e 's/[^=]*=//'`
|
|
DB_PASS=`grep 'DB_PASS' "$MASTENVFP"|sed -e 's/[^=]*=//'`
|
|
|
|
touch "$DOMBLOCKSFP" 2>/dev/null
|
|
[ ! $? -eq 0 ] && echo "Non posso creare/modificare il file \"$DOMBLOCKSFP\", muoio (usa \"-h\" per l'aiuto)." && exit 1
|
|
|
|
echo "# generato $(date -u)" > "$DOMBLOCKSFP"
|
|
echo "# formato di output: dominio bloccato|data ultima modifica blocco|tipo blocco|commento pubblico" >> "$DOMBLOCKSFP"
|
|
echo "# \"tipo blocco\" può essere 0=silenziato, 1=sospeso, 2=nessuno (solo, eventualmente, file media e rapporti)" >> "$DOMBLOCKSFP"
|
|
|
|
PGPASSWORD="$DB_PASS" psql -h "$DB_HOST" -p "$DB_PORT" -d "$DB_NAME" -U "$DB_USER" -c 'SELECT domain, updated_at, severity, public_comment FROM domain_blocks' -A -t >> "$DOMBLOCKSFP"
|