diff --git a/cleanup-mastodon-users.sh b/cleanup-mastodon-users.sh new file mode 100755 index 0000000..b6a0817 --- /dev/null +++ b/cleanup-mastodon-users.sh @@ -0,0 +1,164 @@ +#!/bin/sh + +# LOWERLIMIT="'6 months'" or "'24 weeks'" +# UPPERLIMIT="'7 months'" or "'28 weeks'" +# this defines the range of inactivity where users get notified +# before the account will be deleted when UPPERLIMIT is surpassed. +LOWERLIMIT="6 months" +UPPERLIMIT="7 months" + +TOOTCTL="~/live/bin/tootctl" + +set -f + +# get some settings from the Mastodon config and write it to another file, so that we can source it and make use of it +grep -e ^"DB_" -e ^"LOCAL_DOMAIN" /home/mastodon/live/.env.production > /home/mastodon/bin/cleanup-mastodon-users.conf +. /home/mastodon/bin/cleanup-mastodon-users.conf + +# the following lines should be moved to a config file, eg. /usr/local/etc/cleanup_friendica.conf +mastodonpath="/home/mastodon/live" +#DB_HOST=127.0.0.1 +#DB_PORT=6432 +#DB_NAME=mastodon +#DB_USER=mastodon +#DB_PASS= + +site="" +siteurl="" +siteadmin="6 months and send mail to log in again +for mode2 in $(echo "warn delete"); do + #echo "mode2: $mode2" + case ${mode2} in + "warn") + #echo "in warn" + SQLSTATE="last_sign_in_at between now()-'${UPPERLIMIT}'::interval and now()-'${LOWERLIMIT}'::interval" + ;; + "delete") + #echo "in delete" + SQLSTATE="last_sign_in_at < now()-'${UPPERLIMIT}'::interval" + ;; + esac + #echo "SQL: $SQLSTATE" + for u in $( psql -U ${DB_USER} -w -h ${DB_HOST} -p ${DB_PORT} -t ${DB_NAME} -c "select concat(username||';'||display_name||';'||email||';'||to_char(a.created_at, 'YYYY-MM-DD')||';'||to_char(last_sign_in_at,'YYYY-MM-DD')) from accounts a, users u where domain is null and a.id=u.account_id and ${SQLSTATE} and username not in ($sqlprotectedusers) order by last_sign_in_at" | tr -d " " ); do + #echo ${u} + username=$(echo "${u}" | awk -F ";" '{print $1}') + dispname=$(echo "${u}" | awk -F ";" '{print $2}') + profileurl="https://nerdculture.de/@${username}" + usermail=$(echo "${u}" | awk -F ";" '{print $3}') + registered=$(echo "${u}" | awk -F ";" '{print $4}') + lastlogin=$(echo "${u}" | awk -F ";" '{print $5}') + case ${mode2} in + "warn") + if [ "${mode}" = "hotrun" ]; then + #echo -n "hotrun " + notifyUser + elif [ "${mode}" = "dryrun" ]; then + echo "Check ${username}: notify skipped because of dryrun." + fi + ;; + "delete") + # delete account when last login is older than 7 months and send mail about deletion + # you should copy & paste the text from 6 months for the first runs of this script + # and later change the text to a notification that the account has been deleted. + # if username is a protected user do nothing, else delete user + echo -n "${username} : " + if [ "${mode}" = "hotrun" ]; then + #echo -n "hotrun " + ${mastodonpath}/bin/tootctl accounts delete "${username}" + notifyUserDeletion + #echo "deleted." + elif [ "${mode}" = "dryrun" ]; then + echo "skipped because of dryrun." + fi + ;; + esac + done +done +