diff options
author | Michał Górny <mgorny@gentoo.org> | 2013-08-15 00:14:33 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2013-08-17 20:50:51 +0200 |
commit | 6b9307389e4e0d524ce8c2a095a50105fa232817 (patch) | |
tree | a6d23430a067202e8493a4952c3a2584a95ccf29 /okupy/accounts | |
parent | Fix handling timedeltas in use_nonce(). (diff) | |
download | identity.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.py | 14 |
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) |