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) 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: email = request.openid.ax.get('email') nickname = request.openid.ax.get('nickname') 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 = User.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 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 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.get('http://axschema.org/contact/email')[0] try: nickname = request.openid.ax.get('nickname')#should be replaced by correct schema 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 = '******'.format(nickname, name_count + 1) else: username = '******'.format(nickname) if email is None : valid_username = False email = "{0}@socialauth".format(username) else: valid_username = True if not user: user = User.objects.create_user(username, email or '') 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.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): 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 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.get("http://axschema.org/contact/email")[0] try: nickname = request.openid.ax.get("nickname") # should be replaced by correct schema except: pass if nickname is None: 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 = User.objects.filter(username__startswith=nickname).count() if name_count: username = "******" % (nickname, name_count + 1) try: user = User.objects.get(email=email) except: user = User.objects.create_user(nickname, email or "") 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): 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 'request.openid: %s' % request.openid # print 'request.openid.sreg: %s' % request.openid.sreg if request.openid and request.openid.sreg: email = request.openid.sreg.get('email') nickname = request.openid.sreg.get('nickname') if nickname is None : nickname = ''.join([random.choice('abcdefghijklmnopqrstuvwxyz') for i in xrange(10)]) if email is None : email = '%s@%s.%s.com'%(nickname, provider, settings.SITE_NAME) name_count = User.objects.filter(username__startswith = nickname).count() # print 'nickname: %s, email: %s, name_count: %s' % (nickname, email, name_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 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 first_name = None last_name = None if request.openid and request.openid.sreg: email = request.openid.sreg.get("email") nickname = request.openid.sreg.get("nickname") first_name, last_name = request.openid.sreg.get("fullname", "").split(" ", 1) elif request.openid and request.openid.ax: email = request.openid.ax.get("http://axschema.org/contact/email")[0] try: nickname = request.openid.ax.get("nickname") # should be replaced by correct schema except: pass try: first_name = request.openid.ax.get("http://axschema.org/namePerson/first").pop() except: pass try: last_name = request.openid.ax.get("http://axschema.org/namePerson/last").pop() 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 or "") if first_name is not None: user.first_name = first_name if last_name is not None: user.last_name = last_name 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, 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, 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 authenticate(self, openid_key, request, provider, user=None): logger.info("request.GET: %s", request.GET) logger.info("request.POST: %s", request.POST) logger.info("------------------------------------------ Authenticating against OpenID") logger.info("openid_key: %s", openid_key) logger.info("provider: %s", provider) try: assoc = OpenidProfile.objects.get(openid_key=openid_key) logger.info("Found a OpenidProfile") logger.info("assoc.openid_key: %s", assoc.openid_key) logger.info("assoc.user.username: %s", assoc.user.username) logger.info("assoc.nickname: %s", assoc.nickname) logger.info("assoc.is_username_valid: %s", assoc.is_username_valid) logger.info("assoc.email: %s", assoc.email) if assoc.email.endswith("@socialauth") and request.openid.ax is not None: assoc.email = request.openid.ax.getSingle("http://axschema.org/contact/email", None) logger.info("Updating existing OpenidProfile with correct openid email") assoc.save() return assoc.user except OpenidProfile.DoesNotExist: # fetch if openid provider provides any simple registration fields logger.info("Creating a OpenidProfile") 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: email = request.openid.ax.getSingle("http://axschema.org/contact/email", None) 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 = "******".format(nickname, name_count + 1) else: username = "******".format(nickname) if email is None: valid_username = False email = "{0}@socialauth".format(username) else: valid_username = True if not user: user = User.objects.create_user(username, email or "") user.set_unusable_password() user.save() # create openid association assoc = OpenidProfile() assoc.openid_key = openid_key assoc.user = user if provider == "Google": assoc.needs_google_crossdomain_merge = True if email: assoc.email = email if nickname: assoc.nickname = nickname if valid_username: assoc.is_username_valid = True assoc.save() logger.info("assoc.openid_key: %s", assoc.openid_key) logger.info("assoc.user.username: %s", assoc.user.username) logger.info("assoc.nickname: %s", assoc.nickname) logger.info("assoc.is_username_valid: %s", assoc.is_username_valid) logger.info("assoc.email: %s", assoc.email) # Create AuthMeta auth_meta = AuthMeta(user=user, provider=provider, provider_model="OpenidProfile", provider_id=assoc.pk) 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)