From 7aa79992f200eede2b83719cef2a606d26238823 Mon Sep 17 00:00:00 2001 From: ingoj Date: Thu, 9 Apr 2020 21:48:20 +0200 Subject: [PATCH] Update cleanup_friendica.sh removed bashisms and actually tested the process with protecteduser This script works so far (for me) --- cleanup_friendica | 104 +++++++++++++++++++++++++++++++++++++++++++ cleanup_friendica.sh | 15 +++---- 2 files changed, 111 insertions(+), 8 deletions(-) create mode 100644 cleanup_friendica diff --git a/cleanup_friendica b/cleanup_friendica new file mode 100644 index 0000000..c9396cd --- /dev/null +++ b/cleanup_friendica @@ -0,0 +1,104 @@ +#!/bin/sh +# v0.3.1 - "try to force Github to accept this change"-release + +set -f +# set the following variables accordingly to your site +# the admin will get a notification mail in BCC + +# the following lines should be moved to a config file, eg. /usr/local/etc/cleanup_friendica.conf +#friendicapath="/var/www/net/nerdica.net/friendica" +#site="SITE" +#siteurl="https://domain.tld/" +#siteadmin="admin@domain.tld" +#sitefrom="no-reply@domain.tld" +#protectedusers="admin1 admin2 admin3" + +. /usr/local/etc/cleanup_friendica.conf + + +cd ${friendicapath} || exit 0 + +# delete users that never logged in and never posted content +# filtering for "weeks" will result in accounts with 2 weeks old accounts, +# filter for just "week" will do the same after 1 week. +# same should apply to "month" and "months", but untested. +for username in $( ${friendicapath}/bin/console user list active -c 10000 | grep 'never.*never' | grep weeks | awk '{print $2}') ; do + # if username is a protected user do nothing, else delete user + if [ -n "${protectedusers}" ]; then + pcheck=0 + for s in $(echo ${protectedusers}) ; do + if [ "${s}" = "${username}" ]; then + pcheck=1 + fi + done + if [ ${pcheck} -eq 0 ]; then + #echo "Delete user ${username}" + ${friendicapath}/bin/console user delete "${username}" -q + fi + fi +done + +# find & notify users that didn't logged in >6 months and send mail to log in again +for u in $( ${friendicapath}/bin/console user list active -c 10000 | grep -v '.*---.*' | sed 's/|/;/g' | tr -s "\ " | sed 's/^;\ //g' | sed 's/\ ;\ /;/g' | sed 's/\ /_/g' | tail -n +2 ); do + username=$(echo "${u}" | awk -F ";" '{print $1}') + dispname=$(echo "${u}" | awk -F ";" '{print $2}') + profileurl=$(echo "${u}"| awk -F ";" '{print $3}') + usermail=$(echo "${u}" | awk -F ";" '{print $4}') + registered=$(echo "${u}" | awk -F ";" '{print $5}') + lastlogin=$(echo "${u}" | awk -F ";" '{print $6}') + lastpost=$(echo "${u}" | awk -F ";" '{print $7}') + #echo "Userinfo: ${username},${dispname},${profileurl},${usermail},${registered},${lastlogin},${lastpost}" + res=$(echo "${lastlogin}" | grep '[6-9]_months.*') + if [ -n "${res}" ]; then + num_months=$(echo "${res}" | awk -F "_" '{ print $1}') + #echo "months: ${num_months}" + if [ ${num_months} -ge 7 ]; then + # 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. + ( cat <