def setUp(self):
        super(RelayPublicKeysConfigTest, self).setUp()

        self.key_pair = generate_key_pair()

        self.public_key = self.key_pair[1]
        self.private_key = self.key_pair[0]
        self.relay_id = six.text_type(uuid4())

        self.relay = Relay.objects.create(
            relay_id=self.relay_id, public_key=six.binary_type(self.public_key), is_internal=True
        )
        self.relay_a = Relay.objects.create(
            relay_id=six.text_type(uuid4()),
            public_key=six.binary_type(self.public_key),
            is_internal=False,
        )
        self.relay_b = Relay.objects.create(
            relay_id=six.text_type(uuid4()),
            public_key=six.binary_type(self.public_key),
            is_internal=False,
        )

        self.project = self.create_project()
        self.path = reverse("sentry-api-0-relay-publickeys")
示例#2
0
    def setUp(self):
        super(RelayPublicKeysConfigTest, self).setUp()

        self.key_pair = generate_key_pair()

        self.public_key = self.key_pair[1]
        self.private_key = self.key_pair[0]
        self.relay_id = six.text_type(uuid4())

        self.relay = Relay.objects.create(
            relay_id=self.relay_id,
            public_key=six.binary_type(self.public_key),
            is_internal=True
        )
        self.relay_a = Relay.objects.create(
            relay_id=six.text_type(uuid4()),
            public_key=six.binary_type(self.public_key),
            is_internal=False
        )
        self.relay_b = Relay.objects.create(
            relay_id=six.text_type(uuid4()),
            public_key=six.binary_type(self.public_key),
            is_internal=False
        )

        self.project = self.create_project()
        self.path = reverse(
            'sentry-api-0-relay-publickeys'
        )
示例#3
0
    def setUp(self):
        super(RelayRegisterTest, self).setUp()

        self.key_pair = generate_key_pair()

        self.public_key = self.key_pair[1]
        settings.SENTRY_RELAY_WHITELIST_PK.append(six.binary_type(self.public_key))

        self.private_key = self.key_pair[0]
        self.relay_id = six.binary_type(uuid4())

        self.path = reverse("sentry-api-0-relay-register-challenge")
    def test_expired_challenge(self):
        data = {
            'public_key': six.binary_type(self.public_key),
            'relay_id': self.relay_id,
        }

        raw_json, signature = self.private_key.pack(data)

        resp = self.client.post(
            self.path,
            data=raw_json,
            content_type='application/json',
            HTTP_X_SENTRY_RELAY_ID=self.relay_id,
            HTTP_X_SENTRY_RELAY_SIGNATURE=signature,
        )

        assert resp.status_code == 200, resp.content
        result = json.loads(resp.content)

        raw_json, signature = self.private_key.pack(result)

        self.client.post(
            reverse(
                'sentry-api-0-relay-register-response'
            ),
            data=raw_json,
            content_type='application/json',
            HTTP_X_SENTRY_RELAY_ID=self.relay_id,
            HTTP_X_SENTRY_RELAY_SIGNATURE=signature,
        )

        keys = generate_key_pair()

        data = {
            'token': six.binary_type(result.get('token')),
            'relay_id': self.relay_id,
        }

        raw_json, signature = keys[0].pack(data)

        resp = self.client.post(
            reverse(
                'sentry-api-0-relay-register-response'
            ),
            data=raw_json,
            content_type='application/json',
            HTTP_X_SENTRY_RELAY_ID=self.relay_id,
            HTTP_X_SENTRY_RELAY_SIGNATURE=signature,
        )

        assert resp.status_code == 401, resp.content
    def test_forge_public_key(self):
        data = {
            'public_key': six.binary_type(self.public_key),
            'relay_id': self.relay_id,
        }

        raw_json, signature = self.private_key.pack(data)

        resp = self.client.post(
            self.path,
            data=raw_json,
            content_type='application/json',
            HTTP_X_SENTRY_RELAY_ID=self.relay_id,
            HTTP_X_SENTRY_RELAY_SIGNATURE=signature,
        )

        assert resp.status_code == 200, resp.content
        result = json.loads(resp.content)

        raw_json, signature = self.private_key.pack(result)

        self.client.post(
            reverse(
                'sentry-api-0-relay-register-response'
            ),
            data=raw_json,
            content_type='application/json',
            HTTP_X_SENTRY_RELAY_ID=self.relay_id,
            HTTP_X_SENTRY_RELAY_SIGNATURE=signature,
        )

        keys = generate_key_pair()

        settings.SENTRY_RELAY_WHITELIST_PK.append(six.binary_type(keys[1]))

        data = {
            'public_key': six.binary_type(keys[1]),
            'relay_id': self.relay_id,
        }

        raw_json, signature = keys[0].pack(data)

        resp = self.client.post(
            self.path,
            data=raw_json,
            content_type='application/json',
            HTTP_X_SENTRY_RELAY_ID=self.relay_id,
            HTTP_X_SENTRY_RELAY_SIGNATURE=signature,
        )

        assert resp.status_code == 400, resp.content
示例#6
0
    def setUp(self):
        super(RelayRegisterTest, self).setUp()

        self.key_pair = generate_key_pair()

        self.public_key = self.key_pair[1]
        settings.SENTRY_RELAY_WHITELIST_PK.append(six.binary_type(self.public_key))

        self.private_key = self.key_pair[0]
        self.relay_id = six.binary_type(uuid4())

        self.path = reverse(
            'sentry-api-0-relay-register-challenge'
        )
示例#7
0
    def setUp(self):
        super(RelayQueryGetProjectConfigTest, self).setUp()

        self.key_pair = generate_key_pair()

        self.public_key = self.key_pair[1]
        self.private_key = self.key_pair[0]
        self.relay_id = six.binary_type(uuid4())

        self.relay = Relay.objects.create(relay_id=self.relay_id,
                                          public_key=six.binary_type(
                                              self.public_key),
                                          is_internal=True)

        self.project = self.create_project()

        self.path = reverse('sentry-api-0-relay-heartbeat')
    def setUp(self):
        super(RelayQueryGetProjectConfigTest, self).setUp()

        self.key_pair = generate_key_pair()

        self.public_key = self.key_pair[1]
        self.private_key = self.key_pair[0]
        self.relay_id = six.binary_type(uuid4())

        self.relay = Relay.objects.create(
            relay_id=self.relay_id,
            public_key=six.binary_type(self.public_key),
            is_internal=True
        )

        self.project = self.create_project()
        self.path = reverse(
            'sentry-api-0-relay-projectconfigs'
        )
示例#9
0
    def test_forge_public_key_on_register(self):
        data = {"public_key": six.binary_type(self.public_key), "relay_id": self.relay_id}

        raw_json, signature = self.private_key.pack(data)

        resp = self.client.post(
            self.path,
            data=raw_json,
            content_type="application/json",
            HTTP_X_SENTRY_RELAY_ID=self.relay_id,
            HTTP_X_SENTRY_RELAY_SIGNATURE=signature,
        )

        result = json.loads(resp.content)

        resp = self.client.post(
            self.path,
            data=raw_json,
            content_type="application/json",
            HTTP_X_SENTRY_RELAY_ID=self.relay_id,
            HTTP_X_SENTRY_RELAY_SIGNATURE=signature,
        )

        assert resp.status_code == 200, resp.content

        keys = generate_key_pair()

        data = {"token": six.binary_type(result.get("token")), "relay_id": self.relay_id}

        raw_json, signature = keys[0].pack(data)

        resp = self.client.post(
            reverse("sentry-api-0-relay-register-response"),
            data=raw_json,
            content_type="application/json",
            HTTP_X_SENTRY_RELAY_ID=self.relay_id,
            HTTP_X_SENTRY_RELAY_SIGNATURE=signature,
        )

        assert resp.status_code == 400, resp.content
    def setUp(self):
        super(RelayChangeSetStoreV7Test, self).setUp()

        self.key_pair = generate_key_pair()

        self.public_key = self.key_pair[1]
        self.private_key = self.key_pair[0]
        self.relay_id = six.binary_type(uuid4())

        self.relay = Relay.objects.create(
            relay_id=self.relay_id,
            public_key=six.binary_type(self.public_key),
            is_internal=True
        )

        self.project = self.create_project()

        self.path = reverse(
            'sentry-api-0-relay-heartbeat'
        )

        self.data = {
            'changesets': [
                {
                    'type': 'store_v7',
                    'project_id': self.project.id,
                    'data': {
                        'public_key': self.projectkey.public_key,
                        'meta': {
                            'origin': 'http://*****:*****@sentry/browser configured'
                                },
                                {
                                    'timestamp': 1524557689,
                                    'type': 'default',
                                    'category': 'console',
                                    'level': 'warning',
                                    'message': '4 exceptions captured and queued'
                                },
                                {
                                    'timestamp': 1524557689,
                                    'type': 'default',
                                    'category': 'console',
                                    'level': 'warning',
                                    'message': 'Draining queue...'
                                }
                            ],
                            'exception': {
                                'values': [
                                    {
                                        'type': 'Error',
                                        'value': 'regular exception no. 1',
                                        'stacktrace': {
                                            'frames': [
                                                {
                                                    'function': '?',
                                                    'filename': 'http://localhost:1337/error.js',
                                                    'lineno': 29,
                                                    'colno': 3,
                                                    'in_app': True
                                                },
                                                {
                                                    'function': '?',
                                                    'filename': 'http://localhost:1337/error.js',
                                                    'lineno': 28,
                                                    'colno': 3,
                                                    'in_app': True
                                                },
                                                {
                                                    'function': 'foo',
                                                    'filename': 'http://localhost:1337/error.js',
                                                    'lineno': 13,
                                                    'colno': 11,
                                                    'in_app': True
                                                }
                                            ]
                                        }
                                    }
                                ]
                            },
                            'extra': {
                                'session:duration': 8
                            },
                            'sdk': {
                                'name': 'sentry-browser',
                                'version': '3.23.3'
                            },
                            'project': '10',
                            'trimHeadFrames': 0
                        }
                    }
                }
            ],
            'queries': {}
        }
示例#11
0
    def setUp(self):
        super(RelayChangeSetStoreV7Test, self).setUp()

        self.key_pair = generate_key_pair()

        self.public_key = self.key_pair[1]
        self.private_key = self.key_pair[0]
        self.relay_id = six.binary_type(uuid4())

        self.relay = Relay.objects.create(
            relay_id=self.relay_id,
            public_key=six.binary_type(self.public_key),
        )

        self.project = self.create_project()

        self.path = reverse('sentry-api-0-relay-heartbeat')

        self.data = {
            'changesets': [{
                'type': 'store_v7',
                'project_id': self.project.id,
                'data': {
                    'public_key': self.projectkey.public_key,
                    'meta': {
                        'origin': 'http://*****:*****@sentry/browser configured'
                        }, {
                            'timestamp':
                            1524557689,
                            'type':
                            'default',
                            'category':
                            'console',
                            'level':
                            'warning',
                            'message':
                            '4 exceptions captured and queued'
                        }, {
                            'timestamp': 1524557689,
                            'type': 'default',
                            'category': 'console',
                            'level': 'warning',
                            'message': 'Draining queue...'
                        }],
                        'exception': {
                            'values': [{
                                'type': 'Error',
                                'value': 'regular exception no. 1',
                                'stacktrace': {
                                    'frames': [{
                                        'function': '?',
                                        'filename':
                                        'http://localhost:1337/error.js',
                                        'lineno': 29,
                                        'colno': 3,
                                        'in_app': True
                                    }, {
                                        'function': '?',
                                        'filename':
                                        'http://localhost:1337/error.js',
                                        'lineno': 28,
                                        'colno': 3,
                                        'in_app': True
                                    }, {
                                        'function': 'foo',
                                        'filename':
                                        'http://localhost:1337/error.js',
                                        'lineno': 13,
                                        'colno': 11,
                                        'in_app': True
                                    }]
                                }
                            }]
                        },
                        'extra': {
                            'session:duration': 8
                        },
                        'sdk': {
                            'name': 'sentry-browser',
                            'version': '3.23.3'
                        },
                        'project':
                        '10',
                        'trimHeadFrames':
                        0
                    }
                }
            }],
            'queries': {}
        }
示例#12
0
def test_basic_key_functions():
    sk, pk = semaphore.generate_key_pair()
    signature = sk.sign(b'some secret data')
    assert pk.verify(b'some secret data', signature)
    assert not pk.verify(b'some other data', signature)
示例#13
0
def test_basic_key_functions():
    sk, pk = semaphore.generate_key_pair()
    signature = sk.sign(b"some secret data")
    assert pk.verify(b"some secret data", signature)
    assert not pk.verify(b"some other data", signature)