Mercurial > p > roundup > code
view roundup/cgi/timestamp.py @ 8019:16cc72cd9c17
fix: Send Vary: Accept-Encoding on any data that could be compressed
This allows upstream caches to return the correct data even when
compression is not in use. It is not sent if the content would never
be compressed. I.E. size < 100 bytes, dynamic compression
disabled, file would not benefit from compression (img/jpeg, img/png).
Fix setVary to add header to vary list only if it's not already there.
Found by redbot.org testing.
References:
https://www.stackpath.com/blog/accept-encoding-vary-important/
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sun, 02 Jun 2024 18:22:53 -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
