Exemple #1
0
    def setUp(self):
        """create users and test data"""
        with patch(
                "bookwyrm.preview_images.generate_user_preview_image_task.delay"
        ):
            self.mouse = models.User.objects.create_user(
                "mouse@%s" % DOMAIN,
                "*****@*****.**",
                "",
                local=True,
                localname="mouse",
            )
            self.rat = models.User.objects.create_user("rat@%s" % DOMAIN,
                                                       "*****@*****.**",
                                                       "",
                                                       local=True,
                                                       localname="rat")
            self.cat = models.User.objects.create_user("cat@%s" % DOMAIN,
                                                       "*****@*****.**",
                                                       "",
                                                       local=True,
                                                       localname="cat")

        private_key, public_key = create_key_pair()

        self.fake_remote = Sender("http://localhost/user/remote",
                                  KeyPair(private_key, public_key))

        with patch(
                "bookwyrm.preview_images.generate_site_preview_image_task.delay"
        ):
            models.SiteSettings.objects.create()
Exemple #2
0
    def setUp(self):
        """create users and test data"""
        with patch(
                "bookwyrm.suggested_users.rerank_suggestions_task.delay"
        ), patch("bookwyrm.activitystreams.populate_stream_task.delay"), patch(
                "bookwyrm.lists_stream.populate_lists_task.delay"):
            self.mouse = models.User.objects.create_user(
                f"mouse@{DOMAIN}",
                "*****@*****.**",
                "",
                local=True,
                localname="mouse",
            )
            self.rat = models.User.objects.create_user(f"rat@{DOMAIN}",
                                                       "*****@*****.**",
                                                       "",
                                                       local=True,
                                                       localname="rat")
            self.cat = models.User.objects.create_user(f"cat@{DOMAIN}",
                                                       "*****@*****.**",
                                                       "",
                                                       local=True,
                                                       localname="cat")

        private_key, public_key = create_key_pair()

        self.fake_remote = Sender("http://localhost/user/remote",
                                  KeyPair(private_key, public_key))

        models.SiteSettings.objects.create()
Exemple #3
0
 def save(self, *args, **kwargs):
     """ create a key pair """
     # no broadcasting happening here
     if "broadcast" in kwargs:
         del kwargs["broadcast"]
     if not self.public_key:
         self.private_key, self.public_key = create_key_pair()
     return super().save(*args, **kwargs)
Exemple #4
0
 def save(self, *args, **kwargs):
     ''' create a key pair '''
     # no broadcasting happening here
     if 'broadcast' in kwargs:
         del kwargs['broadcast']
     if not self.public_key:
         self.private_key, self.public_key = create_key_pair()
     return super().save(*args, **kwargs)
Exemple #5
0
    def setUp(self):
        self.mouse = User.objects.create_user('mouse', '*****@*****.**', '')
        self.rat = User.objects.create_user('rat', '*****@*****.**', '')
        self.cat = User.objects.create_user('cat', '*****@*****.**', '')

        private_key, public_key = create_key_pair()

        self.fake_remote = Sender(
            'http://localhost/user/remote',
            private_key,
            public_key,
        )
Exemple #6
0
    def test_key_needs_refresh(self):
        datafile = pathlib.Path(__file__).parent.joinpath('data/ap_user.json')
        data = json.loads(datafile.read_bytes())
        data['id'] = self.fake_remote.remote_id
        data['publicKey']['publicKeyPem'] = self.fake_remote.public_key
        del data['icon'] # Avoid having to return an avatar.
        responses.add(
            responses.GET,
            self.fake_remote.remote_id,
            json=data,
            status=200)
        responses.add(
            responses.GET,
            'https://localhost/.well-known/nodeinfo',
            status=404)
        responses.add(
            responses.GET,
            'https://example.com/user/mouse/outbox?page=true',
            json={'orderedItems': []},
            status=200
        )

        # Second and subsequent fetches get a different key:
        new_private_key, new_public_key = create_key_pair()
        new_sender = Sender(
            self.fake_remote.remote_id, new_private_key, new_public_key)
        data['publicKey']['publicKeyPem'] = new_public_key
        responses.add(
            responses.GET,
            self.fake_remote.remote_id,
            json=data,
            status=200)


        # Key correct:
        response = self.send_test_request(sender=self.fake_remote)
        self.assertEqual(response.status_code, 200)

        # Old key is cached, so still works:
        response = self.send_test_request(sender=self.fake_remote)
        self.assertEqual(response.status_code, 200)

        # Try with new key:
        response = self.send_test_request(sender=new_sender)
        self.assertEqual(response.status_code, 200)

        # Now the old key will fail:
        response = self.send_test_request(sender=self.fake_remote)
        self.assertEqual(response.status_code, 401)
Exemple #7
0
    def test_key_needs_refresh(self):
        """an out of date key should be updated and the new key work"""
        datafile = pathlib.Path(__file__).parent.joinpath("data/ap_user.json")
        data = json.loads(datafile.read_bytes())
        data["id"] = self.fake_remote.remote_id
        data["publicKey"][
            "publicKeyPem"] = self.fake_remote.key_pair.public_key
        del data["icon"]  # Avoid having to return an avatar.
        responses.add(responses.GET,
                      self.fake_remote.remote_id,
                      json=data,
                      status=200)
        responses.add(responses.GET,
                      "https://localhost/.well-known/nodeinfo",
                      status=404)

        # Second and subsequent fetches get a different key:
        key_pair = KeyPair(*create_key_pair())
        new_sender = Sender(self.fake_remote.remote_id, key_pair)
        data["publicKey"]["publicKeyPem"] = key_pair.public_key
        responses.add(responses.GET,
                      self.fake_remote.remote_id,
                      json=data,
                      status=200)

        with patch(
                "bookwyrm.preview_images.generate_user_preview_image_task.delay"
        ):
            with patch("bookwyrm.models.user.get_remote_reviews.delay"):
                # Key correct:
                response = self.send_test_request(sender=self.fake_remote)
                self.assertEqual(response.status_code, 200)

                # Old key is cached, so still works:
                response = self.send_test_request(sender=self.fake_remote)
                self.assertEqual(response.status_code, 200)

                # Try with new key:
                response = self.send_test_request(sender=new_sender)
                self.assertEqual(response.status_code, 200)

                # Now the old key will fail:
                response = self.send_test_request(sender=self.fake_remote)
                self.assertEqual(response.status_code, 401)
Exemple #8
0
    def setUp(self):
        self.mouse = User.objects.create_user('mouse@%s' % DOMAIN,
                                              '*****@*****.**',
                                              '',
                                              local=True,
                                              localname='mouse')
        self.rat = User.objects.create_user('rat@%s' % DOMAIN,
                                            '*****@*****.**',
                                            '',
                                            local=True,
                                            localname='rat')
        self.cat = User.objects.create_user('cat@%s' % DOMAIN,
                                            '*****@*****.**',
                                            '',
                                            local=True,
                                            localname='cat')

        private_key, public_key = create_key_pair()

        self.fake_remote = Sender('http://localhost/user/remote',
                                  KeyPair(private_key, public_key))
Exemple #9
0
    def test_key_needs_refresh(self):
        datafile = pathlib.Path(__file__).parent.joinpath('data/ap_user.json')
        data = json.loads(datafile.read_bytes())
        data['id'] = self.fake_remote.remote_id
        data['publicKey'][
            'publicKeyPem'] = self.fake_remote.key_pair.public_key
        del data['icon']  # Avoid having to return an avatar.
        responses.add(responses.GET,
                      self.fake_remote.remote_id,
                      json=data,
                      status=200)
        responses.add(responses.GET,
                      'https://localhost/.well-known/nodeinfo',
                      status=404)

        # Second and subsequent fetches get a different key:
        key_pair = KeyPair(*create_key_pair())
        new_sender = Sender(self.fake_remote.remote_id, key_pair)
        data['publicKey']['publicKeyPem'] = key_pair.public_key
        responses.add(responses.GET,
                      self.fake_remote.remote_id,
                      json=data,
                      status=200)

        with patch('bookwyrm.models.user.get_remote_reviews.delay'):
            # Key correct:
            response = self.send_test_request(sender=self.fake_remote)
            self.assertEqual(response.status_code, 200)

            # Old key is cached, so still works:
            response = self.send_test_request(sender=self.fake_remote)
            self.assertEqual(response.status_code, 200)

            # Try with new key:
            response = self.send_test_request(sender=new_sender)
            self.assertEqual(response.status_code, 200)

            # Now the old key will fail:
            response = self.send_test_request(sender=self.fake_remote)
            self.assertEqual(response.status_code, 401)
Exemple #10
0
    def setUp(self):
        """create users and test data"""
        self.mouse = models.User.objects.create_user("mouse@%s" % DOMAIN,
                                                     "*****@*****.**",
                                                     "",
                                                     local=True,
                                                     localname="mouse")
        self.rat = models.User.objects.create_user("rat@%s" % DOMAIN,
                                                   "*****@*****.**",
                                                   "",
                                                   local=True,
                                                   localname="rat")
        self.cat = models.User.objects.create_user("cat@%s" % DOMAIN,
                                                   "*****@*****.**",
                                                   "",
                                                   local=True,
                                                   localname="cat")

        private_key, public_key = create_key_pair()

        self.fake_remote = Sender("http://localhost/user/remote",
                                  KeyPair(private_key, public_key))

        models.SiteSettings.objects.create()
Exemple #11
0
 def save(self, *args, **kwargs):
     ''' create a key pair '''
     if not self.public_key:
         self.private_key, self.public_key = create_key_pair()
     return super().save(*args, **kwargs)