Example #1
0
    def pre_social_login(self, request, sociallogin):
        email = sociallogin.user.email

        try:
            user = User.objects.get(email=email)
        except User.DoesNotExist:
            user = None

        emails_query = EmailAddress.objects.filter(email=email)
        if not user and emails_query.exists():
            user = emails_query[0].user

        if user:
            sociallogin.user = user
            if sociallogin.is_existing:
                # Social Account already connected, signin please
                _login_social_account(request, sociallogin)
            else:
                sociallogin.account.user = user
                sociallogin.account.save()
                if sociallogin.token:
                    sociallogin.token.account = sociallogin.account
                    sociallogin.token.save()
                if not EmailAddress.objects.filter(user=user).exists():
                    setup_user_email(request, user, sociallogin.email_addresses)
def _complete_social_login(request, sociallogin):
    from allauth.socialaccount.providers.orcid.provider import OrcidProvider

    if request.user.is_authenticated:
        get_account_adapter(request).logout(request)
    if sociallogin.is_existing:
        # Login existing user
        ret = _login_social_account(request, sociallogin)
        signals.social_account_updated.send(
            sender=SocialLogin,
            request=request,
            sociallogin=sociallogin)
    else:
        # New social user
        if sociallogin.account.provider == OrcidProvider.id:
            # TODO: Need orcid membership to get email
            # Then use the email for their username
            # email = _get_orcid_email(sociallogin)
            # sociallogin.user.email = email
            pass
        ret = _process_signup(request, sociallogin)
    if sociallogin.account.provider == OrcidProvider.id:
        logging.info('Attempting to send orcid response')
        return _send_orcid_response(request, ret)
    return _send_response(request, ret)
Example #3
0
def _complete_social_login(request, sociallogin, response):
    if request.user.is_authenticated():
        get_account_adapter().logout(request)
    if sociallogin.is_existing:
        # Login existing user
        ret = _login_social_account(request, sociallogin)
    else:
        # New social user
        ret = _process_signup(request, sociallogin)
        try:
            url = response['profile_image_url']
        except Exception:
            url = response.get('picture')
            if type(url) is dict:
                # Incase of facebook response dict is different.
                url = response.get('picture').get('data').get('url')
        if url:
            url = urllib.request.urlopen(url)
            file = BytesIO(url.read())
            img = ImageFile(file)
            filename = '%s_original.jpg' % (uuid.uuid4())
            img.name = filename
            # ser = ImageSerializer(img)
            Image.objects.create(
                image=img,
                title=img.name,
                content_object=sociallogin.user,
                object_id=sociallogin.user.id,
                image_type='P')
    return ret
Example #4
0
    def pre_social_login(self, request, sociallogin):
        email = sociallogin.user.email

        try:
            user = User.objects.get(email=email)
        except User.DoesNotExist:
            user = None

        social_emails = [addr.email for addr in sociallogin.email_addresses]
        if user and not user.is_active:
            existing_emails_q = EmailAddress.objects.filter(email__in=social_emails,
                                                            user__is_active=True)
            if (existing_emails_q.exists() and
                    all(addr.user != user for addr in existing_emails_q)):
                (EmailAddress.objects.filter(email__in=social_emails)
                                     .exclude(id__in=existing_emails_q)
                                     .update(user=existing_emails_q[0].user))
                user.delete()
                user = existing_emails_q[0].user
            elif sociallogin.account.extra_data.get('mozillian_profile'):
                user.is_active = True
                user.save()

        emails_query = EmailAddress.objects.filter(email=email)
        if not user and emails_query.exists():
            user = emails_query[0].user

        if user:
            # Sync with mozillians.org on each login
            mozillian = get_mozillian_profile(social_emails)
            if mozillian:
                user = populate_user_data(user, sociallogin, mozillian)
                user.save()

            sociallogin.user = user

            # Add additional emails, if any
            addresses, primary = cleanup_email_addresses(request, sociallogin.email_addresses)

            for address in addresses:
                address.user = user
                address.save()

            # If the cleanup_email_addresses does not return something, get the mozillians.org
            # primary email
            if not primary:
                primary_emails = [addr for addr in sociallogin.email_addresses
                                  if addr.primary]
                if primary_emails:
                    # The last email is the primary from mozillians.org
                    primary = primary_emails[-1]

            user.email = primary.email
            user.save()
            EmailAddress.objects.filter(user=user).update(primary=False)
            EmailAddress.objects.filter(user=user, email=primary.email).update(primary=True)

            if sociallogin.is_existing:
                # Social Account already connected, signin please
                _login_social_account(request, sociallogin)
            else:
                # Let's connect the account first
                sociallogin.connect(request, user)
Example #5
0
    def pre_social_login(self, request, sociallogin):
        email = sociallogin.user.email

        if (User.objects.filter(email=email).exists() or
                EmailAddress.objects.filter(email=email).exists()):
            _login_social_account(request, sociallogin)