-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathtimestamp.py
More file actions
28 lines (23 loc) · 890 Bytes
/
timestamp.py
File metadata and controls
28 lines (23 loc) · 890 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import time, struct, base64
from roundup.cgi.actions import RegisterAction
from roundup.cgi.exceptions import *
def timestamp():
return base64.encodestring(struct.pack("i", time.time())).strip()
def unpack_timestamp(s):
return struct.unpack("i",base64.decodestring(s))[0]
class Timestamped:
def check(self):
try:
created = unpack_timestamp(self.form['opaque'].value)
except KeyError:
raise FormError("somebody tampered with the form")
if time.time() - created < 4:
raise FormError("responding to the form too quickly")
return True
class TimestampedRegister(Timestamped, RegisterAction):
def permission(self):
self.check()
RegisterAction.permission(self)
def init(instance):
instance.registerUtil('timestamp', timestamp)
instance.registerAction('register', TimestampedRegister)