Mercurial > p > roundup > code
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
