aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichał Górny <mgorny@gentoo.org>2013-08-15 00:14:33 +0200
committerMichał Górny <mgorny@gentoo.org>2013-08-17 20:50:51 +0200
commit6b9307389e4e0d524ce8c2a095a50105fa232817 (patch)
treea6d23430a067202e8493a4952c3a2584a95ccf29 /okupy/accounts
parentFix handling timedeltas in use_nonce(). (diff)
downloadidentity.gentoo.org-6b9307389e4e0d524ce8c2a095a50105fa232817.tar.gz
identity.gentoo.org-6b9307389e4e0d524ce8c2a095a50105fa232817.tar.bz2
identity.gentoo.org-6b9307389e4e0d524ce8c2a095a50105fa232817.zip
OpenID: make nonce creation atomic.
get_or_create() is pointless, non-atomic thing. Instead, just try to create the nonce and catch IntegrityError.
Diffstat (limited to 'okupy/accounts')
-rw-r--r--okupy/accounts/openid_store.py14
1 files changed, 8 insertions, 6 deletions
diff --git a/okupy/accounts/openid_store.py b/okupy/accounts/openid_store.py
index 013fcef..5f66abb 100644
--- a/okupy/accounts/openid_store.py
+++ b/okupy/accounts/openid_store.py
@@ -5,6 +5,7 @@ import calendar
import datetime
import time
+from django.db import IntegrityError
from django.utils import timezone
from openid.store.interface import OpenIDStore
@@ -78,15 +79,16 @@ class DjangoDBOpenIDStore(OpenIDStore):
if abs((nonce_dt - timezone.now()).total_seconds()) > nonce.SKEW:
return False
- objs = db_models.OpenID_Nonce.objects
- n, created = objs.get_or_create(
+ n = db_models.OpenID_Nonce(
server_uri=server_uri,
ts=nonce_dt,
salt=salt)
-
- # if it was created, it is unique and everything's fine.
- # if we found one existing, it is duplicate and we return False.
- return created
+ try:
+ n.save()
+ except IntegrityError:
+ # non-unique
+ return False
+ return True
def cleanupNonces(self):
skew_td = datetime.timedelta(seconds=nonce.SKEW)