[damned-lies] Fix registration by OpenID



commit c0271905d3b783f8ead536542774c7f6965b3764
Author: Claude Paroz <claude 2xlibre net>
Date:   Tue Apr 19 19:18:42 2011 +0200

    Fix registration by OpenID

 languages/urls.py |    2 +-
 people/forms.py   |   22 ++++++++++++++++++----
 settings.py       |    2 +-
 3 files changed, 20 insertions(+), 6 deletions(-)
---
diff --git a/languages/urls.py b/languages/urls.py
index e6726aa..068daed 100644
--- a/languages/urls.py
+++ b/languages/urls.py
@@ -6,7 +6,7 @@ urlpatterns = patterns('',
         view = 'languages.views.languages',
         name = 'languages'),
     url(
-        regex = r'^(?P<locale>[\w\- ]+)/all/(?P<dtype>(ui|doc)+)/$',
+        regex = r'^(?P<locale>[\w\- ]+)/all/(?P<dtype>(ui|ui-part|doc)+)/$',
         view = 'languages.views.language_all',
         name = 'language_all'),
     url(
diff --git a/people/forms.py b/people/forms.py
index 4493e69..7a8bf2b 100644
--- a/people/forms.py
+++ b/people/forms.py
@@ -2,9 +2,10 @@ import hashlib, random
 
 from django import forms
 from django.conf import settings
-from django.utils.translation import ugettext_lazy, ugettext as _
-from django.core.urlresolvers import reverse
 from django.contrib.sites.models import Site
+from django.core.urlresolvers import reverse
+from django.utils.translation import ugettext_lazy, ugettext as _
+
 from teams.models import Team
 from people.models import Person
 
@@ -30,6 +31,18 @@ class RegistrationForm(forms.Form):
             return self.cleaned_data['username']
         raise forms.ValidationError(_(u'This username is already taken. Please choose another.'))
 
+    def clean_openid_url(self):
+        """ Check openid url is not already linked to any existing user """
+        if self.cleaned_data['openid_url']:
+            from django_openid_auth.models import UserOpenID
+            try:
+                oid = UserOpenID.objects.get(claimed_id=self.cleaned_data['openid_url'])
+            except UserOpenID.DoesNotExist:
+                return self.cleaned_data['openid_url']
+            raise forms.ValidationError(_(u'This OpenID URL is already taken by a registered user'))
+        else:
+            return self.cleaned_data['openid_url']
+
     def clean(self):
         cleaned_data = self.cleaned_data
         password1 = cleaned_data.get('password1')
@@ -46,14 +59,15 @@ class RegistrationForm(forms.Form):
         """ Create the user """
         username = self.cleaned_data['username']
         email = self.cleaned_data['email']
-
         password = self.cleaned_data['password1']
+
         new_user = Person.objects.create_user(username=username,
                            email=email,
                            password=password or "!")
         openid = self.cleaned_data['openid_url']
         if openid:
-            new_user.openids.create(openid = openid)
+            from django_openid_auth.models import UserOpenID
+            user_oid = UserOpenID.objects.create(user=new_user, claimed_id=openid)
         salt = hashlib.sha1(str(random.random())).hexdigest()[:5]
         activation_key = hashlib.sha1(salt+username).hexdigest()
         new_user.activation_key = activation_key
diff --git a/settings.py b/settings.py
index ccabeb0..867a9d6 100644
--- a/settings.py
+++ b/settings.py
@@ -155,7 +155,7 @@ if USE_DJANGO_OPENID:
         'django_openid_auth.auth.OpenIDBackend',
         'django.contrib.auth.backends.ModelBackend',
     )
-    OPENID_CREATE_USERS = True
+    OPENID_CREATE_USERS = False
     OPENID_UPDATE_DETAILS_FROM_SREG = True
     OPENID_UPDATE_DETAILS_FROM_AX = True
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]