From 1725ecd4c7451a162cb7cb428a80a71d34a1800e Mon Sep 17 00:00:00 2001 From: Tyler Hallada Date: Sun, 3 Dec 2017 15:54:30 -0500 Subject: [PATCH] WIP Limit one chat every 30 seconds per IP --- chat/server.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/chat/server.py b/chat/server.py index 2686f93..4847e82 100644 --- a/chat/server.py +++ b/chat/server.py @@ -1,8 +1,12 @@ +import calendar import logging import subprocess +from datetime import datetime, timedelta +import redis from flask import Flask, request +conn = redis.Redis('localhost') app = Flask(__name__) @@ -15,6 +19,12 @@ def setup_logging(): @app.route('/chat/', methods=['POST']) def send_chat(): if request.method == 'POST': + ip = request.headers.get('X-Forwarded-For', request.remote_addr) + recent_ips = conn.hgetall("minecraft_chat_recent_ips") + now = datetime.utcnow() + if ip in recent_ips: + if (now - datetime.fromutctimestamp(recent_ips[ip])) > timedelta.seconds(30): + recent_ips[ip] = calendar.timegm(now.utctimetuple()) if request.form.get('email', None): return 'Text was entered into honeypot!', 200 if not request.form.get('say-text', None): @@ -27,5 +37,6 @@ def send_chat(): '/say {}\015'.format(request.form['say-text'])]) return 'Sending chat: ' + request.form.get('say-username', '') + ': ' + request.form['say-text'] + if __name__ == "__main__": app.run(host='0.0.0.0', port="8888")