def test_signature_checking(app, receiver): """Check signatures for payload.""" class TestReceiverSign(receiver): signature = 'X-Hub-Signature' with app.app_context(): current_webhooks.register('test-receiver-sign', TestReceiverSign) # check correct signature payload = json.dumps(dict(somekey='somevalue')) with app.app_context(): headers = [('Content-Type', 'application/json'), ('X-Hub-Signature', get_hmac(payload))] with app.test_request_context(headers=headers, data=payload): event = Event.create(receiver_id='test-receiver-sign') event.process() assert json.loads(payload) == event.receiver.calls[0].payload # check signature with prefix with app.app_context(): headers = [('Content-Type', 'application/json'), ('X-Hub-Signature', 'sha1=' + get_hmac(payload))] with app.test_request_context(headers=headers, data=payload): event = Event.create(receiver_id='test-receiver-sign') event.process() assert json.loads(payload) == event.receiver.calls[1].payload # check incorrect signature with app.app_context(): headers = [('Content-Type', 'application/json'), ('X-Hub-Signature', get_hmac("somevalue"))] with app.test_request_context(headers=headers, data=payload): with pytest.raises(InvalidSignature): Event.create(receiver_id='test-receiver-sign')
def test_signature_checking(app, receiver): """Check signatures for payload.""" class TestReceiverSign(receiver): signature = 'X-Hub-Signature' with app.app_context(): current_webhooks.register('test-receiver-sign', TestReceiverSign) # check correct signature payload = json.dumps(dict(somekey='somevalue')) with app.app_context(): headers = [('Content-Type', 'application/json'), ('X-Hub-Signature', get_hmac(payload))] with app.test_request_context(headers=headers, data=payload): event = Event.create(receiver_id='test-receiver-sign') event.process() assert json.loads(payload) == event.receiver.calls[0].payload # check signature with prefix with app.app_context(): headers = [('Content-Type', 'application/json'), ('X-Hub-Signature', 'sha1=' + get_hmac(payload))] with app.test_request_context(headers=headers, data=payload): event = Event.create(receiver_id='test-receiver-sign') event.process() assert json.loads(payload) == event.receiver.calls[1].payload # check incorrect signature with app.app_context(): headers = [('Content-Type', 'application/json'), ('X-Hub-Signature', get_hmac("somevalue"))] with app.test_request_context(headers=headers, data=payload): with pytest.raises(InvalidSignature): Event.create(receiver_id='test-receiver-sign')
def test_webhook_post_no_scope(app, tester_id, access_token_no_scope): class TestReceiverNoScope(Receiver): def __call__(self, event): return event with app.test_request_context(): current_webhooks.register("test-receiver-no-scope", TestReceiverNoScope) with app.test_client() as client: payload = dict(somekey="somevalue") make_request( access_token_no_scope, client.post, "invenio_webhooks.event_list", urlargs=dict(receiver_id="test-receiver-no-scope"), data=payload, code=403, )
def test_webhook_post_no_scope(app, tester_id, access_token_no_scope): class TestReceiverNoScope(Receiver): def __call__(self, event): return event with app.test_request_context(): current_webhooks.register('test-receiver-no-scope', TestReceiverNoScope) with app.test_client() as client: payload = dict(somekey='somevalue') make_request( access_token_no_scope, client.post, 'invenio_webhooks.event_list', urlargs=dict(receiver_id='test-receiver-no-scope'), data=payload, code=403, )
def test_receiver_registration(app, receiver): with app.app_context(): current_webhooks.register('test-invalid', receiver) assert 'test-receiver' in current_webhooks.receivers assert 'test-receiver' == current_webhooks.receivers[ 'test-receiver'].receiver_id # Double registration with pytest.raises(AssertionError): current_webhooks.register('test-receiver', receiver) current_webhooks.unregister('test-receiver') assert 'test-receiver' not in current_webhooks.receivers current_webhooks.register('test-receiver', receiver) # JSON payload parsing payload = json.dumps(dict(somekey='somevalue')) headers = [('Content-Type', 'application/json')] with app.test_request_context(headers=headers, data=payload): event = Event.create(receiver_id='test-receiver') event.process() assert 1 == len(event.receiver.calls) assert json.loads(payload) == event.receiver.calls[0].payload assert event.receiver.calls[0].user_id is None # Form encoded values payload parsing payload = dict(somekey='somevalue') with app.test_request_context(method='POST', data=payload): event = Event.create(receiver_id='test-receiver') event.process() assert 2 == len(event.receiver.calls) assert dict(somekey=['somevalue']) == event.receiver.calls[1].payload # Test invalid post data with app.test_request_context(method='POST', data="invaliddata"): with pytest.raises(InvalidPayload): event = Event.create(receiver_id='test-receiver') calls = [] # Test Celery Receiver class TestCeleryReceiver(CeleryReceiver): def run(self, event): calls.append(event.payload) app.extensions['invenio-webhooks'].register('celery-receiver', TestCeleryReceiver) # Form encoded values payload parsing payload = dict(somekey='somevalue') with app.test_request_context(method='POST', data=payload): event = Event.create(receiver_id='celery-receiver') db.session.add(event) db.session.commit() event.process() assert 1 == len(calls) assert dict(somekey=['somevalue']) == calls[0]
def test_receiver_registration(app, receiver): with app.app_context(): current_webhooks.register('test-invalid', receiver) assert 'test-receiver' in current_webhooks.receivers assert 'test-receiver' == current_webhooks.receivers[ 'test-receiver'].receiver_id # Double registration with pytest.raises(AssertionError): current_webhooks.register('test-receiver', receiver) current_webhooks.unregister('test-receiver') assert 'test-receiver' not in current_webhooks.receivers current_webhooks.register('test-receiver', receiver) # JSON payload parsing payload = json.dumps(dict(somekey='somevalue')) headers = [('Content-Type', 'application/json')] with app.test_request_context(headers=headers, data=payload): event = Event.create(receiver_id='test-receiver') event.process() assert 1 == len(event.receiver.calls) assert json.loads(payload) == event.receiver.calls[0].payload assert event.receiver.calls[0].user_id is None # Form encoded values payload parsing payload = dict(somekey='somevalue') with app.test_request_context(method='POST', data=payload): event = Event.create(receiver_id='test-receiver') event.process() assert 2 == len(event.receiver.calls) assert dict(somekey=['somevalue']) == event.receiver.calls[1].payload # Test invalid post data with app.test_request_context(method='POST', data="invaliddata"): with pytest.raises(InvalidPayload): event = Event.create(receiver_id='test-receiver') calls = [] # Test Celery Receiver class TestCeleryReceiver(CeleryReceiver): def run(self, event): calls.append(event.payload) app.extensions['invenio-webhooks'].register('celery-receiver', TestCeleryReceiver) # Form encoded values payload parsing payload = dict(somekey='somevalue') with app.test_request_context(method='POST', data=payload): event = Event.create(receiver_id='celery-receiver') db.session.add(event) db.session.commit() event.process() assert 1 == len(calls) assert dict(somekey=['somevalue']) == calls[0]