summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Godwin <andrew@aeracode.org>2011-06-17 09:47:08 +0000
committerAndrew Godwin <andrew@aeracode.org>2011-06-17 09:47:08 +0000
commit838a16ec2055cd9736c9d426acf9fdd092e72469 (patch)
tree26c5cbd1ab71799be7ed614b8819a25314b5fd35
parent222a5ed69e174e6b7b123c1101744e18aa372a4a (diff)
Backed out [16356] due to later rejection of #16182.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16426 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/core/signing.py10
-rw-r--r--tests/regressiontests/signing/tests.py34
2 files changed, 20 insertions, 24 deletions
diff --git a/django/core/signing.py b/django/core/signing.py
index 3165cf8a38..054777a260 100644
--- a/django/core/signing.py
+++ b/django/core/signing.py
@@ -158,12 +158,8 @@ class Signer(object):
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()))
@@ -172,10 +168,10 @@ class TimestampSigner(Signer):
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))
diff --git a/tests/regressiontests/signing/tests.py b/tests/regressiontests/signing/tests.py
index bc16214600..0b0cacf10e 100644
--- a/tests/regressiontests/signing/tests.py
+++ b/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
@@ -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