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)
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
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)
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)