Skip to content

Commit

Permalink
Backed out [16356] due to later rejection of #16182.
Browse files Browse the repository at this point in the history
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16426 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
andrewgodwin committed Jun 17, 2011
1 parent 222a5ed commit 838a16e
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 24 deletions.
10 changes: 3 additions & 7 deletions django/core/signing.py
Expand Up @@ -158,12 +158,8 @@ def unsign(self, signed_value):


class TimestampSigner(Signer):
def __init__(self, *args, **kwargs):
self.time_func = kwargs.pop('time', time.time)
super(TimestampSigner, self).__init__(*args, **kwargs)

def timestamp(self):
return baseconv.base62.encode(int(self.time_func() * 10000))
return baseconv.base62.encode(int(time.time()))

def sign(self, value):
value = smart_str('%s%s%s' % (value, self.sep, self.timestamp()))
Expand All @@ -172,10 +168,10 @@ def sign(self, value):
def unsign(self, value, max_age=None):
result = super(TimestampSigner, self).unsign(value)
value, timestamp = result.rsplit(self.sep, 1)
timestamp = baseconv.base62.decode(timestamp) / 10000.0
timestamp = baseconv.base62.decode(timestamp)
if max_age is not None:
# Check timestamp is not older than max_age
age = self.time_func() - timestamp
age = time.time() - timestamp
if age > max_age:
raise SignatureExpired(
'Signature age %s > %s seconds' % (age, max_age))
Expand Down
34 changes: 17 additions & 17 deletions tests/regressiontests/signing/tests.py
@@ -1,3 +1,5 @@
import time

from django.core import signing
from django.test import TestCase
from django.utils.encoding import force_unicode
Expand Down Expand Up @@ -96,21 +98,19 @@ class TestTimestampSigner(TestCase):

def test_timestamp_signer(self):
value = u'hello'
signer = signing.TimestampSigner('predictable-key',
time=lambda: 123456789)
ts = signer.sign(value)
self.assertNotEqual(ts,
signing.Signer('predictable-key').sign(value))
_time = time.time
time.time = lambda: 123456789
try:
signer = signing.TimestampSigner('predictable-key')
ts = signer.sign(value)
self.assertNotEqual(ts,
signing.Signer('predictable-key').sign(value))

self.assertEqual(signer.unsign(ts), value)
signer = signing.TimestampSigner('predictable-key',
time=lambda: 123456800)
self.assertEqual(signer.unsign(ts, max_age=12), value)
self.assertEqual(signer.unsign(ts, max_age=11), value)
self.assertRaises(
signing.SignatureExpired, signer.unsign, ts, max_age=10)

def test_timestamp_precision(self):
one = signing.TimestampSigner('key', time=lambda: 123.4567).sign('v')
two = signing.TimestampSigner('key', time=lambda: 123.4568).sign('v')
self.assertNotEqual(one, two)
self.assertEqual(signer.unsign(ts), value)
time.time = lambda: 123456800
self.assertEqual(signer.unsign(ts, max_age=12), value)
self.assertEqual(signer.unsign(ts, max_age=11), value)
self.assertRaises(
signing.SignatureExpired, signer.unsign, ts, max_age=10)
finally:
time.time = _time

0 comments on commit 838a16e

Please sign in to comment.