aboutsummaryrefslogtreecommitdiff
path: root/host/secret_sauce.py
diff options
context:
space:
mode:
Diffstat (limited to 'host/secret_sauce.py')
-rw-r--r--host/secret_sauce.py56
1 files changed, 0 insertions, 56 deletions
diff --git a/host/secret_sauce.py b/host/secret_sauce.py
deleted file mode 100644
index 3682b0e..0000000
--- a/host/secret_sauce.py
+++ /dev/null
@@ -1,56 +0,0 @@
-
-from collections import defaultdict
-import signal
-
-
-RATELIMIT_THRESHOLD = 20
-GRAYLIST_LENGTH = 8
-
-class SpamError(ValueError):
- def __str__(self):
- return ' '.join(self.args)
-
-
-def loadlist(fn):
- try:
- with open(fn) as f:
- return [ l for l in ( l.strip() for l in f.readlines() if not l.startswith('#')) if l ]
- except:
- return []
-
-greenlist = set()
-
-graylist = []
-def do_graylist(msg):
- global graylist
- graylist = [msg] + graylist[:GRAYLIST_LENGTH-1]
-
-blacklist = loadlist('blacklist')
-badwords = loadlist('badwords')
-def signal_handler(_signum, _frame):
- global blacklist, badwords
- blacklist = load_blacklist()
- badwords = load_badwords()
-signal.signal(signal.SIGHUP, signal_handler)
-
-ratelimitdict = defaultdict(lambda: 0)
-def empty_ratelimit(_signum, _frame):
- global ratelimitdict
- ratelimitdict = defaultdict(lambda: 0)
-signal.signal(signal.SIGALRM, empty_ratelimit)
-signal.setitimer(signal.ITIMER_REAL, 60)
-
-def check_spam(addr, data):
- ratelimitdict[addr] += 1
- try:
- if ratelimitdict[addr] > RATELIMIT_THRESHOLD:
- raise SpamError('rate-limit')
- if any(word in data.lower() for word in badwords):
- raise SpamError('badwords filter')
- if addr not in greenlist and data in graylist:
- raise SpamError('graylist')
- except SpamError as err:
- do_graylist(data)
- blacklist.append(addr)
- raise err
- greenlist.add(addr)