Add SSL support to TCP integration (#48060)

Co-authored-by: Michael <35783820+mib1185@users.noreply.github.com>
This commit is contained in:
Filipe Pina 2021-05-15 19:29:11 +01:00 committed by GitHub
parent dab66a58ce
commit 0c37effc72
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 96 additions and 0 deletions

View file

@ -2,6 +2,7 @@
import logging
import select
import socket
import ssl
import voluptuous as vol
@ -11,9 +12,11 @@ from homeassistant.const import (
CONF_NAME,
CONF_PAYLOAD,
CONF_PORT,
CONF_SSL,
CONF_TIMEOUT,
CONF_UNIT_OF_MEASUREMENT,
CONF_VALUE_TEMPLATE,
CONF_VERIFY_SSL,
)
from homeassistant.exceptions import TemplateError
import homeassistant.helpers.config_validation as cv
@ -26,6 +29,8 @@ CONF_VALUE_ON = "value_on"
DEFAULT_BUFFER_SIZE = 1024
DEFAULT_NAME = "TCP Sensor"
DEFAULT_TIMEOUT = 10
DEFAULT_SSL = False
DEFAULT_VERIFY_SSL = True
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
{
@ -38,6 +43,8 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
vol.Optional(CONF_UNIT_OF_MEASUREMENT): cv.string,
vol.Optional(CONF_VALUE_ON): cv.string,
vol.Optional(CONF_VALUE_TEMPLATE): cv.template,
vol.Optional(CONF_SSL, default=DEFAULT_SSL): cv.boolean,
vol.Optional(CONF_VERIFY_SSL, default=DEFAULT_VERIFY_SSL): cv.boolean,
}
)
@ -71,6 +78,15 @@ class TcpSensor(SensorEntity):
CONF_VALUE_ON: config.get(CONF_VALUE_ON),
CONF_BUFFER_SIZE: config.get(CONF_BUFFER_SIZE),
}
if config[CONF_SSL]:
self._ssl_context = ssl.create_default_context()
if not config[CONF_VERIFY_SSL]:
self._ssl_context.check_hostname = False
self._ssl_context.verify_mode = ssl.CERT_NONE
else:
self._ssl_context = None
self._state = None
self.update()
@ -104,6 +120,11 @@ class TcpSensor(SensorEntity):
)
return
if self._ssl_context is not None:
sock = self._ssl_context.wrap_socket(
sock, server_hostname=self._config[CONF_HOST]
)
try:
sock.send(self._config[CONF_PAYLOAD].encode())
except OSError as err: