changeset 5975:59842a3e8108

issue2550919 - Anti-bot signup using 4 second delay Oops another missing file 8-/.
author John Rouillard <rouilj@ieee.org>
date Sat, 09 Nov 2019 00:41:53 -0500
parents 98a8509ce45c
children 71c68961d9f4
files roundup/cgi/timestamp.py
diffstat 1 files changed, 28 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/roundup/cgi/timestamp.py	Sat Nov 09 00:41:53 2019 -0500
@@ -0,0 +1,28 @@
+'''Set of functions of adding/checking timestamp to be used to limit
+   form submission for cgi actions.
+'''
+
+import time, struct, binascii, base64
+from roundup.cgi.exceptions import FormError
+from roundup.i18n import _
+from roundup.anypy.strings import b2s, s2b
+
+def pack_timestamp():
+    return b2s(base64.b64encode(struct.pack("i", int(time.time()))).strip())
+
+def unpack_timestamp(s):
+    try:
+        timestamp = struct.unpack("i",base64.b64decode(s2b(s)))[0]
+    except (struct.error, binascii.Error, TypeError) as e:
+        raise FormError(_("Form is corrupted."))
+    return timestamp
+
+class Timestamped:
+    def timecheck(self,field,delay):
+        try:
+            created = unpack_timestamp(self.form[field].value)
+        except KeyError:
+            raise FormError(_("Form is corrupted, missing: %s."%field))
+        if time.time() - created < delay:
+            raise FormError(_("Responding to form too quickly."))
+        return True

Roundup Issue Tracker: http://roundup-tracker.org/