view roundup/cgi/timestamp.py @ 7864:b080cdb8b199

fix: document/fix wrapped HtmlProperty method. The wrapped method was not documented in reference.txt. It is now documented in reference.txt. The docstring documented that it would not break up long words. Fixed by adding break_long_words=False to prevent breaking string longer than the wrap length. Wrapping was breaking the hyperlinking of long urls. Added columns argument to set the wrap length (default 80 columns).
author John Rouillard <rouilj@ieee.org>
date Sun, 07 Apr 2024 15:27:18 -0400
parents 216662fbaaee
children
line wrap: on
line source

'''Set of functions of adding/checking timestamp to be used to limit
   form submission for cgi actions.
'''

import base64
import binascii
import struct
import time

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/