X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/a9eef437702d5df7a2f97010e6798c689371808c..c1a4dfda807ca08de7d3370fc421abc39d411264:/forum_modules/openidauth/store.py diff --git a/forum_modules/openidauth/store.py b/forum_modules/openidauth/store.py old mode 100755 new mode 100644 index 93d38a5..8656752 --- a/forum_modules/openidauth/store.py +++ b/forum_modules/openidauth/store.py @@ -1,79 +1,86 @@ -import time, base64, md5 - -from openid.store import nonce as oid_nonce -from openid.store.interface import OpenIDStore -from openid.association import Association as OIDAssociation -from django.conf import settings - -from models import OpenIdNonce as Nonce, OpenIdAssociation as Association - -class OsqaOpenIDStore(OpenIDStore): - def __init__(self): - self.max_nonce_age = 6 * 60 * 60 # Six hours - - def storeAssociation(self, server_url, association): - assoc = Association( - server_url = server_url, - handle = association.handle, - secret = base64.encodestring(association.secret), - issued = association.issued, - lifetime = association.issued, - assoc_type = association.assoc_type - ) - assoc.save() - - def getAssociation(self, server_url, handle=None): - assocs = [] - if handle is not None: - assocs = Association.objects.filter( - server_url = server_url, handle = handle - ) - else: - assocs = Association.objects.filter( - server_url = server_url - ) - if not assocs: - return None - associations = [] - for assoc in assocs: - association = OIDAssociation( - assoc.handle, base64.decodestring(assoc.secret), assoc.issued, - assoc.lifetime, assoc.assoc_type - ) - if association.getExpiresIn() == 0: - self.removeAssociation(server_url, assoc.handle) - else: - associations.append((association.issued, association)) - if not associations: - return None - return associations[-1][1] - - def removeAssociation(self, server_url, handle): - assocs = list(Association.objects.filter( - server_url = server_url, handle = handle - )) - assocs_exist = len(assocs) > 0 - for assoc in assocs: - assoc.delete() - return assocs_exist - - def storeNonce(self, nonce): - nonce, created = Nonce.objects.get_or_create( - nonce = nonce, defaults={'expires': int(time.time())} - ) - - def useNonce(self, server_url, timestamp, salt): - if abs(timestamp - time.time()) > oid_nonce.SKEW: - return False - - try: - nonce = Nonce( server_url=server_url, timestamp=timestamp, salt=salt) - nonce.save() - except: - raise - else: - return 1 - - def getAuthKey(self): - # Use first AUTH_KEY_LEN characters of md5 hash of SECRET_KEY - return md5.new(settings.SECRET_KEY).hexdigest()[:self.AUTH_KEY_LEN] +import time, base64 + +#thanks to alexlavr +#see: http://meta.osqa.net/question/25/installation-issue-importerror-cannot-import-name-auth_providers#43 +try: + from hashlib import md5 as md +except ImportError: + from md5 import new as md + +from openid.store import nonce as oid_nonce +from openid.store.interface import OpenIDStore +from openid.association import Association as OIDAssociation +from django.conf import settings + +from models import OpenIdNonce as Nonce, OpenIdAssociation as Association + +class OsqaOpenIDStore(OpenIDStore): + def __init__(self): + self.max_nonce_age = 6 * 60 * 60 # Six hours + + def storeAssociation(self, server_url, association): + assoc = Association( + server_url = server_url, + handle = association.handle, + secret = base64.encodestring(association.secret), + issued = association.issued, + lifetime = association.issued, + assoc_type = association.assoc_type + ) + assoc.save() + + def getAssociation(self, server_url, handle=None): + assocs = [] + if handle is not None: + assocs = Association.objects.filter( + server_url = server_url, handle = handle + ) + else: + assocs = Association.objects.filter( + server_url = server_url + ) + if not assocs: + return None + associations = [] + for assoc in assocs: + association = OIDAssociation( + assoc.handle, base64.decodestring(assoc.secret), assoc.issued, + assoc.lifetime, assoc.assoc_type + ) + if association.getExpiresIn() == 0: + self.removeAssociation(server_url, assoc.handle) + else: + associations.append((association.issued, association)) + if not associations: + return None + return associations[-1][1] + + def removeAssociation(self, server_url, handle): + assocs = list(Association.objects.filter( + server_url = server_url, handle = handle + )) + assocs_exist = len(assocs) > 0 + for assoc in assocs: + assoc.delete() + return assocs_exist + + def storeNonce(self, nonce): + nonce, created = Nonce.objects.get_or_create( + nonce = nonce, defaults={'expires': int(time.time())} + ) + + def useNonce(self, server_url, timestamp, salt): + if abs(timestamp - time.time()) > oid_nonce.SKEW: + return False + + try: + nonce = Nonce( server_url=server_url, timestamp=timestamp, salt=salt) + nonce.save() + except: + raise + else: + return 1 + + def getAuthKey(self): + # Use first AUTH_KEY_LEN characters of md5 hash of SECRET_KEY + return md(settings.SECRET_KEY).hexdigest()[:self.AUTH_KEY_LEN]