#!/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