Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
    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
Exemple #4
0
    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
Exemple #5
0
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)