Hey,
i built my own Alexa skill and would like to allow access to homeassistant by using client certificates.
I use cloudflare to make my homeassistant docker container public accessible.
Cloudflare has a built in function to limit access to client which has the right client certificate.
My actual issue is to modify the lambda.py code to send the client.pem und key.pem content with the request.
Here is my actual lambda code:
# -*- coding: utf-8 -*-
import os
import json
import logging
import urllib3
from urllib3.connectionpool import HTTPSConnectionPool
_debug = bool(os.environ.get('DEBUG'))
_logger = logging.getLogger('HomeAssistant-Intents')
_logger.setLevel(logging.DEBUG if _debug else logging.INFO)
def lambda_handler(event, context):
"""Handle incoming Alexa directive."""
_logger.debug('Event: %s', event)
base_url = "https://homeassistant.myurl.com"
assert base_url is not None, 'Please set BASE_URL environment variable'
try:
token = event.get('session', {}).get('user', {}).get('accessToken')
except AttributeError:
token = None
if token is None and _debug:
token = os.environ.get('LONG_LIVED_ACCESS_TOKEN')
assert token, 'Could not get access token'
verify_ssl = not bool(os.environ.get('NOT_VERIFY_SSL'))
http = HTTPSConnectionPool(base_url, cert_file='client.pem', key_file='key.pem', cert_reqs='CERT_REQUIRED')
#http = urllib3.PoolManager(
# cert_reqs='CERT_REQUIRED',
# timeout=urllib3.Timeout(connect=2.0, read=10.0),
# key_file='./key.pem',
# cert_file='./client.pem'
#)
response = http.request(
'POST',
'{}/api/alexa'.format(base_url),
headers={
'Authorization': 'Bearer {}'.format(token),
'Content-Type': 'application/json',
},
body=json.dumps(event).encode('utf-8'),
)
if response.status >= 400:
return {
'event': {
'payload': {
'type': 'INVALID_AUTHORIZATION_CREDENTIAL'
if response.status in (401, 403) else 'INTERNAL_ERROR',
'message': response.data.decode("utf-8"),
}
}
}
return json.loads(response.data.decode('utf-8'))
Has someone a idea how i can fix it?
My log shows that the Alexa skill tries always to come without the cert.
Greetings
Dany