view roundup/cgi/timestamp.py @ 6632:e7143e4f6753

try to update to python 3.10.4 from 3.10.0 and try 3.11 Travis ci doesn't seem to tell us what python versions are supported. The one form that is supposed to show that doesn't work for me. Also it looks like nightly is suck at 3.10.0a5+ which isn't nightly. python 3.10.4 is released and current. 3.11 is pre-release/nightly so trying it to replace broken nightly. These upgrades may need to be reverted if invalid.
author John Rouillard <rouilj@ieee.org>
date Sat, 16 Apr 2022 17:04:20 -0400
parents 5ec3171580a6
children 07ce4e4110f5
line wrap: on
line source

'''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):
        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/