def authenticate(self, openid_key, request, provider, email=None): try: assoc = UserAssociation.objects.get(openid_key=openid_key) user = User.objects.get(pk=assoc.user.pk) if user.is_active: return user else: return except (UserAssociation.DoesNotExist, User.DoesNotExist): #fetch if openid provider provides any simple registration fields nickname = None if request.openid and request.openid.sreg: if email is None: email = request.openid.sreg.get('email') nickname = request.openid.sreg.get('nickname') elif request.openid and request.openid.ax: if email is None: email = request.openid.ax.get('email') nickname = request.openid.ax.get('nickname') if nickname is None: nickname = ''.join([ random.choice('abcdefghijklmnopqrstuvwxyz') for i in xrange(10) ]) if email is None: valid_username = False email = '%s@%s.%s.com' % (nickname, provider, settings.SITE_NAME) else: valid_username = True existing_users = User.objects.filter(username=nickname).count() if existing_users > 0: index = 0 username = '******' % (nickname, index) while existing_users > 0: username = '******' % (nickname, index) existing_users = User.objects.filter( username=username).count() index += 1 user = User.objects.create_user(username, email) else: user = User.objects.create_user(nickname, email) user.save() #create openid association assoc = UserAssociation() assoc.openid_key = openid_key assoc.user = user if email: assoc.email = email if nickname: assoc.nickname = nickname if valid_username: assoc.is_username_valid = True assoc.save() #Create AuthMeta auth_meta = AuthMeta(user=user, provider=provider) auth_meta.save() return user
def authenticate(self, openid_key, request, provider): try: assoc = UserAssociation.objects.get(openid_key=openid_key) return assoc.user except UserAssociation.DoesNotExist: #fetch if openid provider provides any simple registration fields nickname = None email = None print "dfsdfsdfsdfsfsdfsdf" if request.openid and request.openid.sreg: email = request.openid.sreg.get('email') nickname = request.openid.sreg.get('nickname') elif request.openid and request.openid.ax: email = request.openid.ax.__dict__.get('data').values()[0][0] nickname = email.split('@')[ 0] #request.openid.ax.get('nickname') if nickname is None: nickname = ''.join([ random.choice('abcdefghijklmnopqrstuvwxyz') for i in xrange(10) ]) if email is None: valid_username = False email = '%s@%s.%s.com' % (nickname, provider, settings.SITE_NAME) else: valid_username = True name_count = User.objects.filter( username__startswith=nickname).count() if name_count: username = '******' % (nickname, name_count + 1) user = User.objects.create_user(username, email) else: user = User.objects.create_user(nickname, email) user.save() #create openid association assoc = UserAssociation() assoc.openid_key = openid_key assoc.user = user if email: assoc.email = email if nickname: assoc.nickname = nickname if valid_username: assoc.is_username_valid = True assoc.save() #Create AuthMeta auth_meta = AuthMeta(user=user, provider=provider) auth_meta.save() return user
def authenticate(self, openid_key, request, provider, user=None): try: assoc = UserAssociation.objects.get(openid_key=openid_key) return assoc.user except UserAssociation.DoesNotExist: #fetch if openid provider provides any simple registration fields nickname = None email = None firstname = None lastname = None if request.openid and request.openid.sreg: email = request.openid.sreg.get('email') nickname = request.openid.sreg.get('nickname') firstname, lastname = (request.openid.sreg.get( 'fullname', ' ').split(' ', 1)) elif request.openid and request.openid.ax: email = \ (request.openid.ax .getSingle('http://axschema.org/contact/email')) if 'google' in provider: ax_schema = OPENID_AX_PROVIDER_MAP['Google'] firstname = (request.openid.ax.getSingle( ax_schema['firstname'])) lastname = (request.openid.ax.getSingle( ax_schema['lastname'])) nickname = email.split('@')[0] else: ax_schema = OPENID_AX_PROVIDER_MAP['Default'] try: #should be replaced by correct schema nickname = (request.openid.ax.getSingle( ax_schema['nickname'])) (firstname, lastname) = (request.openid.ax.getSingle( ax_schema['fullname']).split(' ', 1)) except: pass if nickname is None: nickname = ''.join([ random.choice('abcdefghijklmnopqrstuvwxyz') for i in xrange(10) ]) name_count = (User.objects.filter( username__startswith=nickname).count()) if name_count: username = '******' % (nickname, name_count + 1) else: username = '******' % (nickname) if email is None: valid_username = False email = "%s@socialauth" % (username) else: valid_username = True if not user: user = User.objects.create_user(username, email) user.first_name = firstname user.last_name = lastname user.save() #create openid association assoc = UserAssociation() assoc.openid_key = openid_key assoc.user = user if email: assoc.email = email if nickname: assoc.nickname = nickname if valid_username: assoc.is_username_valid = True assoc.save() #Create AuthMeta # auth_meta = # AuthMeta(user=user, # provider=provider, # provider_model='OpenidProfile', # provider_id=assoc.pk) auth_meta = AuthMeta(user=user, provider=provider) auth_meta.save() return user
def authenticate(self, openid_key, request, provider): try: assoc = UserAssociation.objects.get(openid_key=openid_key) if assoc.user.is_active: return assoc.user else: return except UserAssociation.DoesNotExist: #fetch if openid provider provides any simple registration fields nickname = None email = None if request.openid and request.openid.sreg: email = request.openid.sreg.get('email') nickname = request.openid.sreg.get('nickname') elif request.openid and request.openid.ax: if provider in ('Google', 'Yahoo'): email = request.openid.ax.get( 'http://axschema.org/contact/email') email = email.pop() else: try: email = request.openid.ax.get('email') except KeyError: pass try: nickname = request.openid.ax.get('nickname') except KeyError: pass if nickname is None: if email: nickname = email.split('@')[0] else: nickname = ''.join([ random.choice('abcdefghijklmnopqrstuvwxyz') for i in xrange(10) ]) if email is None: valid_username = False email = None #'*****@*****.**'%(nickname) else: valid_username = True name_count = AuthUser.objects.filter( username__startswith=nickname).count() if name_count: username = '******' % (nickname, name_count + 1) user = User.objects.create_user(username, email or '') else: user = User.objects.create_user(nickname, email or '') user.save() #create openid association assoc = UserAssociation() assoc.openid_key = openid_key assoc.user = user #AuthUser.objects.get(pk=user.pk) if email: assoc.email = email if nickname: assoc.nickname = nickname if valid_username: assoc.is_username_valid = True assoc.save() #Create AuthMeta auth_meta = AuthMeta(user=user, provider=provider) auth_meta.save() return user
def openid_done(request, provider=None): """ When the request reaches here, the user has completed the Openid authentication flow. He has authorised us to login via Openid, so request.openid is populated. After coming here, we want to check if we are seeing this openid first time. If we are, we will create a new Django user for this Openid, else login the existing openid. """ if not provider: provider = request.session.get("openid_provider", "") if request.openid: email = None nickname = None password = None # fetch if openid provider provides any simple registration fields if request.openid.sreg: if request.openid.sreg.has_key("email"): email = request.openid.sreg["email"] if request.openid.sreg.has_key("nickname"): nickname = request.openid.sreg["nickname"] # check for already existing associations openid_key = escape(str(request.openid)) userassociation = UserAssociation.objects.filter(openid_key=openid_key) if userassociation: user = userassociation[0].user nickname = user.username email = user.email else: if nickname is None: nickname = "".join([random.choice("abcdefghijklmnopqrstuvwxyz") for i in xrange(10)]) if email is None: from django.conf import settings email = "%s@%s.%s.com" % (nickname, settings.SITE_NAME, provider) user = User.objects.create_user(nickname, email) user.save() # create openid association assoc = UserAssociation() assoc.openid_key = openid_key assoc.user = user assoc.save() # Create AuthMeta auth_meta = AuthMeta(user=user, provider=provider) auth_meta.save() # authenticate and login user = authenticate(openid_key=openid_key) if user: login(request, user) if "openid_next" in request.session: openid_next = request.session.get("openid_next") if len(openid_next.strip()) > 0: return HttpResponseRedirect(openid_next) redirect_url = reverse("socialauth_signin_complete") return HttpResponseRedirect(redirect_url)