mirror of
https://github.com/home-assistant/core.git
synced 2025-07-10 14:57:09 +00:00
Webhook component - pass headers to webhook handler (#17091)
* Pass headers to webhook handler * Refactors webhook component to post Request object instead of data * Update webhook tests * Cleanup webhook test and fix a bug in ifttt * Address code review comments
This commit is contained in:
parent
0cfbb9ce91
commit
b92b24e8a4
@ -5,6 +5,7 @@ For more details about this component, please refer to the documentation at
|
|||||||
https://home-assistant.io/components/ifttt/
|
https://home-assistant.io/components/ifttt/
|
||||||
"""
|
"""
|
||||||
from ipaddress import ip_address
|
from ipaddress import ip_address
|
||||||
|
import json
|
||||||
import logging
|
import logging
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
@ -74,8 +75,14 @@ async def async_setup(hass, config):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
async def handle_webhook(hass, webhook_id, data):
|
async def handle_webhook(hass, webhook_id, request):
|
||||||
"""Handle webhook callback."""
|
"""Handle webhook callback."""
|
||||||
|
body = await request.text()
|
||||||
|
try:
|
||||||
|
data = json.loads(body) if body else {}
|
||||||
|
except ValueError:
|
||||||
|
return None
|
||||||
|
|
||||||
if isinstance(data, dict):
|
if isinstance(data, dict):
|
||||||
data['webhook_id'] = webhook_id
|
data['webhook_id'] = webhook_id
|
||||||
hass.bus.async_fire(EVENT_RECEIVED, data)
|
hass.bus.async_fire(EVENT_RECEIVED, data)
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
For more details about this component, please refer to the documentation at
|
For more details about this component, please refer to the documentation at
|
||||||
https://home-assistant.io/components/webhook/
|
https://home-assistant.io/components/webhook/
|
||||||
"""
|
"""
|
||||||
import json
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from aiohttp.web import Response
|
from aiohttp.web import Response
|
||||||
@ -76,16 +75,8 @@ class WebhookView(HomeAssistantView):
|
|||||||
'Received message for unregistered webhook %s', webhook_id)
|
'Received message for unregistered webhook %s', webhook_id)
|
||||||
return Response(status=200)
|
return Response(status=200)
|
||||||
|
|
||||||
body = await request.text()
|
|
||||||
try:
|
try:
|
||||||
data = json.loads(body) if body else {}
|
response = await handler(hass, webhook_id, request)
|
||||||
except ValueError:
|
|
||||||
_LOGGER.warning(
|
|
||||||
'Received webhook %s with invalid JSON', webhook_id)
|
|
||||||
return Response(status=200)
|
|
||||||
|
|
||||||
try:
|
|
||||||
response = await handler(hass, webhook_id, data)
|
|
||||||
if response is None:
|
if response is None:
|
||||||
response = Response(status=200)
|
response = Response(status=200)
|
||||||
return response
|
return response
|
||||||
|
@ -63,7 +63,7 @@ async def test_posting_webhook_json(hass, mock_client):
|
|||||||
|
|
||||||
async def handle(*args):
|
async def handle(*args):
|
||||||
"""Handle webhook."""
|
"""Handle webhook."""
|
||||||
hooks.append(args)
|
hooks.append((args[0], args[1], await args[2].text()))
|
||||||
|
|
||||||
hass.components.webhook.async_register(webhook_id, handle)
|
hass.components.webhook.async_register(webhook_id, handle)
|
||||||
|
|
||||||
@ -74,9 +74,7 @@ async def test_posting_webhook_json(hass, mock_client):
|
|||||||
assert len(hooks) == 1
|
assert len(hooks) == 1
|
||||||
assert hooks[0][0] is hass
|
assert hooks[0][0] is hass
|
||||||
assert hooks[0][1] == webhook_id
|
assert hooks[0][1] == webhook_id
|
||||||
assert hooks[0][2] == {
|
assert hooks[0][2] == '{"data": true}'
|
||||||
'data': True
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
async def test_posting_webhook_no_data(hass, mock_client):
|
async def test_posting_webhook_no_data(hass, mock_client):
|
||||||
@ -95,4 +93,4 @@ async def test_posting_webhook_no_data(hass, mock_client):
|
|||||||
assert len(hooks) == 1
|
assert len(hooks) == 1
|
||||||
assert hooks[0][0] is hass
|
assert hooks[0][0] is hass
|
||||||
assert hooks[0][1] == webhook_id
|
assert hooks[0][1] == webhook_id
|
||||||
assert hooks[0][2] == {}
|
assert await hooks[0][2].text() == ''
|
||||||
|
Loading…
x
Reference in New Issue
Block a user