From 375f5dd969d7377daab409219ef18dc445c00fa3 Mon Sep 17 00:00:00 2001 From: definitio <37266727+definitio@users.noreply.github.com> Date: Fri, 8 Jan 2021 12:41:11 +0300 Subject: [PATCH] Add SSL support --- README.md | 12 ++++++++++++ custom_components/rhvoice/tts.py | 20 +++++++++++++++++--- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0661c9b..e65d295 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,18 @@ tts: *Default value: `8080`* +- **ssl:** *(boolean) (Optional)* + + Use HTTPS instead of HTTP to connect. + + *Default value: `false`* + +- **verify_ssl:** *(boolean) (Optional)* + + Enable or disable SSL certificate verification. Set to false if you have a self-signed SSL certificate and haven't installed the CA certificate to enable verification. + + *Default value: `true`* + - **format:** *(string) (Optional)* This is the file format used for the TTS files created. diff --git a/custom_components/rhvoice/tts.py b/custom_components/rhvoice/tts.py index 84e412b..bfe5015 100644 --- a/custom_components/rhvoice/tts.py +++ b/custom_components/rhvoice/tts.py @@ -7,7 +7,14 @@ import voluptuous as vol from aiohttp import ClientError from homeassistant.components.tts import PLATFORM_SCHEMA, Provider -from homeassistant.const import CONF_HOST, CONF_PORT, CONF_TIMEOUT, HTTP_OK +from homeassistant.const import ( + CONF_HOST, + CONF_PORT, + CONF_SSL, + CONF_TIMEOUT, + CONF_VERIFY_SSL, + HTTP_OK, +) from homeassistant.helpers import config_validation as cv from homeassistant.helpers.aiohttp_client import async_get_clientsession @@ -54,6 +61,8 @@ vol.Optional(CONF_RATE, default=DEFAULT_RATE): vol.All( vol.Coerce(int), vol.Range(0, 100) ), + vol.Optional(CONF_SSL, default=False): cv.boolean, + vol.Optional(CONF_VERIFY_SSL, default=True): cv.boolean, vol.Optional(CONF_VOICE, default=DEFAULT_VOICE): vol.All( cv.string, vol.In(list(chain(*SUPPORTED_LANGUAGES.values()))) ), @@ -76,7 +85,10 @@ def __init__(self, hass, conf): """Init RHVoice TTS service.""" self.name = 'RHVoice' self.hass = hass - self._url = f'http://{conf.get(CONF_HOST)}:{conf.get(CONF_PORT)}/say' + host, port, ssl = conf.get(CONF_HOST), conf.get(CONF_PORT), conf.get(CONF_SSL) + self._url = f"http{'s' if ssl else ''}://{host}:{port}/say" + self._verify_ssl = conf.get(CONF_VERIFY_SSL) + self._codec = conf.get(CONF_FORMAT) self._pitch = conf.get(CONF_PITCH) self._rate = conf.get(CONF_RATE) @@ -120,7 +132,9 @@ async def async_get_tts_audio(self, message, language, options=None): 'volume': self._volume, } - request = await websession.get(self._url, params=url_param) + request = await websession.get( + self._url, params=url_param, verify_ssl=self._verify_ssl + ) if request.status != HTTP_OK: _LOGGER.error(