# 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="<SITETITEL>"
siteurl="<SITEURL>"
siteadmin="<ADMINMAIL"
sitefrom="no-reply@<SITEDOMAIN>"
protectedusers="<space seperated list of protected accounts, eg: user1 user2>"
sqlprotectedusers="<same, but with delimiters for SQL, eg:'user1', 'user2'>"
case$1 in
"--dry-run")
mode="dryrun"
;;
"--dowhatimean")
mode="hotrun"
;;
*)
echo"Usage: "
echo" --dry-run \t: make a dry-run, no deletion will be done, no mails are sent."
echo" --dowhatimean \t: add this option if you really want to delete users."
exit0
;;
esac
#. /usr/local/etc/cleanup_friendica.conf
# make a list to be used for grep -E
protected=$(echo$protectedusers| sed 's/\"//g'| sed 's/\ /\\\|/g')
echo$protected
cd${mastodonpath}||exit0
# notify the user that s/he needs to re-login after 6 months to prevent account deletion
notifyUser (){
( cat <<EOF
Dear ${dispname},
you have registered your account on ${siteurl} at ${registered} and last time you logged in was at ${lastlogin}.
If you want to continue to keep your Mastodon account on ${SITE}then please log in at least every 6 months via web browser to keep your account alive. Otherwise we assume that you don't want to use it anymore and will cancel your account 7 months after your last login.
You can access your profile at ${profileurl} or you can cancel your account on your own when logged in at ${siteurl}removeme - however we would like to see you become an active user again and contribute to the Fediverse, but of course it's up to you.
Sincerely,
your ${site} admins
EOF
)| sed 's/_/\ /g'| /usr/bin/mail -s "The Fediverse misses you, ${username}!" -r "${sitefrom}" -- "${usermail}"
# add '-b "$siteadmin"' before the "--" above to receive BCC mails
}
# notify user that the account has been deleted because of inactivity
Since you haven't reacted to the previous mails and didn't login again, your account including all your data has now been deleted.
Sincerely,
your ${site} admins
EOF
)| sed 's/_/\ /g'| /usr/bin/mail -s "Your account ${username} on ${site} has been deleted!" -r "${sitefrom}" -- "${usermail}"
# add '-b "$siteadmin"' before the "--" above to receive BCC mails
}
for line in $(psql -U ${DB_USER} -w -h ${DB_HOST} -p ${DB_PORT} -t ${DB_NAME} -c "select concat(username||','||email) from accounts a, users u where domain is null and a.id=u.account_id and last_sign_in_at is null and u.created_at < now()-'2 weeks'::interval and username not in (${sqlprotectedusers})"| tr -d " ");do
#echo ${line}
username=$(echo${line}| cut -f1 -d",")
mail=$(echo${line}| cut -f2 -d",")
# if username is a protected user do nothing, else delete user
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