Fix owntracks topic in encrypted ios (#19220)

* Fix owntracks topic

* Warn if per-topic secret and using HTTP
This commit is contained in:
Paulus Schoutsen 2018-12-12 17:17:27 +01:00 committed by GitHub
parent 031ee71adf
commit 7d9e257713
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 6 deletions

View File

@ -316,14 +316,19 @@ async def async_handle_waypoints_message(hass, context, message):
@HANDLERS.register('encrypted') @HANDLERS.register('encrypted')
async def async_handle_encrypted_message(hass, context, message): async def async_handle_encrypted_message(hass, context, message):
"""Handle an encrypted message.""" """Handle an encrypted message."""
plaintext_payload = _decrypt_payload(context.secret, message['topic'], if 'topic' not in message and isinstance(context.secret, dict):
_LOGGER.error("You cannot set per topic secrets when using HTTP")
return
plaintext_payload = _decrypt_payload(context.secret, message.get('topic'),
message['data']) message['data'])
if plaintext_payload is None: if plaintext_payload is None:
return return
decrypted = json.loads(plaintext_payload) decrypted = json.loads(plaintext_payload)
decrypted['topic'] = message['topic'] if 'topic' in message and 'topic' not in decrypted:
decrypted['topic'] = message['topic']
await async_handle_message(hass, context, decrypted) await async_handle_message(hass, context, decrypted)

View File

@ -137,15 +137,16 @@ async def handle_webhook(hass, webhook_id, request):
user = headers.get('X-Limit-U') user = headers.get('X-Limit-U')
device = headers.get('X-Limit-D', user) device = headers.get('X-Limit-D', user)
if user is None: if user:
topic_base = re.sub('/#$', '', context.mqtt_topic)
message['topic'] = '{}/{}/{}'.format(topic_base, user, device)
elif message['_type'] != 'encrypted':
_LOGGER.warning('No topic or user found in message. If on Android,' _LOGGER.warning('No topic or user found in message. If on Android,'
' set a username in Connection -> Identification') ' set a username in Connection -> Identification')
# Keep it as a 200 response so the incorrect packet is discarded # Keep it as a 200 response so the incorrect packet is discarded
return json_response([]) return json_response([])
topic_base = re.sub('/#$', '', context.mqtt_topic)
message['topic'] = '{}/{}/{}'.format(topic_base, user, device)
hass.helpers.dispatcher.async_dispatcher_send( hass.helpers.dispatcher.async_dispatcher_send(
DOMAIN, hass, context, message) DOMAIN, hass, context, message)
return json_response([]) return json_response([])