67f058ce50f025231f2676324e68191373b034d7
[collab-maint/wiki.debian.org.git] / bin / kill-spammer
1 #!/bin/sh
2 #
3 # Simple shell script to help with automation of spam killing
4 #
5 # Copyright 2010 Steve McIntyre <93sam@debian.org>
6 # GPL V2 or later
7
8 BASE=/srv/wiki.debian.org
9 DENY=${BASE}/etc/moin/hosts_deny
10 DATE=`date -u "+%F %H:%M UTC"`
11 SPAMMER=$1
12
13 if [ "$1"x = ""x ] ; then
14     echo "No username given"
15     exit 1
16 fi
17
18 log () {
19     LOGDIR=${BASE}/var/log
20     LOGFILE=${LOGDIR}/kill-spammer
21     [ -d ${LOGDIR} ] || mkdir -p ${LOGDIR}
22     echo "$DATE: $@" >> $LOGFILE
23     echo "$@"
24 }
25
26 cd ${BASE}/var/moin/data/user/
27
28 ACCOUNTS=`grep -rlw "name=$SPAMMER" *`
29 NUM_ACCOUNTS=`echo $ACCOUNTS | wc -w`
30
31 if [ $NUM_ACCOUNTS -eq 0 ] ; then
32     log "No matches for username $SPAMMER"
33     exit 1
34 fi
35
36 log "$NUM_ACCOUNTS hit(s) for username $SPAMMER: $ACCOUNTS"
37
38 for ACCOUNT in $ACCOUNTS ; do
39     log "  Disabling account(s):"
40     sed -i -e 's/disabled=0/disabled=1/' $ACCOUNT
41     log "  And marking with the \"spammer\" quicklink:"
42     sed -i -e 's,quicklinks\[\]= *\(spammer\)*,quicklinks[]=spammer ,' $ACCOUNT
43     log Done
44
45     echo
46     LINES=`zcat -f ${BASE}/var/moin/data/edit-log* | grep -w $ACCOUNT | sort`
47     NUM_EDITS=`echo $LINES | wc -l`
48     log "Edits from $ACCOUNT: $NUM_EDITS"
49     log "$LINES"
50
51     IPS=`echo $LINES | grep -w $ACCOUNT | awk '{print $5}' | sort | uniq`
52     log "Banning IP address(es) involved: $IPS"
53     echo $IPS >> $DENY
54 done
55
56 cat <<EOF
57
58 Try a whois on the IP addresses to report the spammer to abuse addresses.
59
60 If the username involved looks spammy you can prevent creation of similar
61 usernames by appending the base username to this file:
62
63   ${BASE}/etc/moin/spam_usernames
64
65 Please touch the wsgi file to make the changes take effect:
66
67   touch ${BASE}/bin/moin.wsgi
68
69 EOF