def receive_task(payload, guid=None): """Process received payload.""" profile = None if guid: try: profile = Profile.objects.get(guid=guid, user__isnull=False) except Profile.DoesNotExist: logger.warning("No local profile found with guid") return try: sender, protocol_name, entities = handle_receive( payload, user=profile, sender_key_fetcher=sender_key_fetcher) logger.debug("sender=%s, protocol_name=%s, entities=%s" % (sender, protocol_name, entities)) except NoSuitableProtocolFoundError: logger.warning("No suitable protocol found for payload") return except NoSenderKeyFoundError: logger.warning( "Could not find a public key for the sender - skipping payload") return except AssertionError: logger.warning("Signature validation failed - skipping payload") return if not entities: logger.warning("No entities in payload") return sender_profile = get_sender_profile(sender) if not sender_profile: return process_entities(entities, profile=sender_profile)
def test_fetches_remote_profile_if_not_found(self, mock_retrieve): mock_retrieve.return_value = entities.ProfileFactory( name="foobar", raw_content="barfoo", public_key="xyz", id="https:/example.com/foo/bar", ) sender_profile = get_sender_profile("https:/example.com/foo/bar") assert isinstance(sender_profile, Profile) assert sender_profile.name == "foobar" assert sender_profile.visibility == Visibility.PUBLIC assert sender_profile.rsa_public_key == "xyz" assert not sender_profile.rsa_private_key
def test_fetches_remote_profile_if_not_found(self, mock_retrieve): mock_retrieve.return_value = entities.ProfileFactory( name="foobar", raw_content="barfoo", public_key="xyz", handle="*****@*****.**", guid="123456" ) sender_profile = get_sender_profile("*****@*****.**") assert isinstance(sender_profile, Profile) assert sender_profile.name == "foobar" assert sender_profile.guid == "123456" assert sender_profile.handle == "*****@*****.**" assert sender_profile.visibility == Visibility.LIMITED assert sender_profile.rsa_public_key == "xyz" assert not sender_profile.rsa_private_key
def test_cleans_text_fields_in_profile(self, mock_retrieve): mock_retrieve.return_value = entities.ProfileFactory( name="<script>alert('yup');</script>", raw_content="<script>alert('yup');</script>", public_key="<script>alert('yup');</script>", id="https:/example.com/foo/bar", image_urls={ "small": "<script>alert('yup');</script>", "medium": "<script>alert('yup');</script>", "large": "<script>alert('yup');</script>", }, location="<script>alert('yup');</script>", ) sender_profile = get_sender_profile("https:/example.com/foo/bar") assert isinstance(sender_profile, Profile) assert sender_profile.name == "alert('yup');" assert sender_profile.rsa_public_key == "alert('yup');" assert sender_profile.image_url_small == "alert('yup');" assert sender_profile.image_url_medium == "alert('yup');" assert sender_profile.image_url_large == "alert('yup');" assert sender_profile.location == "alert('yup');"
def test_returns_none_if_no_remote_profile_found(self, mock_retrieve): mock_retrieve.return_value = None assert not get_sender_profile("*****@*****.**")
def test_returns_none_on_existing_local_profile(self): self.assertIsNone(get_sender_profile(self.profile.handle))
def test_returns_existing_profile(self): self.assertEqual(get_sender_profile(self.remote_profile.handle), self.remote_profile)
def test_returns_none_if_no_remote_profile_found(self, mock_retrieve): mock_retrieve.return_value = None assert not get_sender_profile("https:/example.com/foo/bar")
def test_returns_none_on_existing_local_profile(self): self.assertIsNone(get_sender_profile(self.profile.fid))
def test_returns_existing_profile(self): self.assertEqual(get_sender_profile(self.remote_profile.fid), self.remote_profile)
def test_returns_existing_profile(self): profile = ProfileFactory(handle="*****@*****.**") assert get_sender_profile("*****@*****.**") == profile