media_player.kodi: Add SSL config option (#5531)

This readds support for https for kodi, resolves issue #5527
This commit is contained in:
ecksun 2017-01-24 18:20:18 +01:00 committed by Fabian Affolter
parent cd260d89cb
commit f5062b06a9

View file

@ -18,7 +18,7 @@ from homeassistant.components.media_player import (
PLATFORM_SCHEMA) PLATFORM_SCHEMA)
from homeassistant.const import ( from homeassistant.const import (
STATE_IDLE, STATE_OFF, STATE_PAUSED, STATE_PLAYING, CONF_HOST, CONF_NAME, STATE_IDLE, STATE_OFF, STATE_PAUSED, STATE_PLAYING, CONF_HOST, CONF_NAME,
CONF_PORT, CONF_USERNAME, CONF_PASSWORD) CONF_PORT, CONF_SSL, CONF_USERNAME, CONF_PASSWORD)
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -31,6 +31,7 @@ CONF_TURN_OFF_ACTION = 'turn_off_action'
DEFAULT_NAME = 'Kodi' DEFAULT_NAME = 'Kodi'
DEFAULT_PORT = 8080 DEFAULT_PORT = 8080
DEFAULT_TIMEOUT = 5 DEFAULT_TIMEOUT = 5
DEFAULT_SSL = False
TURN_OFF_ACTION = [None, 'quit', 'hibernate', 'suspend', 'reboot', 'shutdown'] TURN_OFF_ACTION = [None, 'quit', 'hibernate', 'suspend', 'reboot', 'shutdown']
@ -42,6 +43,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_HOST): cv.string, vol.Required(CONF_HOST): cv.string,
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string, vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
vol.Optional(CONF_SSL, default=DEFAULT_SSL): cv.boolean,
vol.Optional(CONF_TURN_OFF_ACTION, default=None): vol.In(TURN_OFF_ACTION), vol.Optional(CONF_TURN_OFF_ACTION, default=None): vol.In(TURN_OFF_ACTION),
vol.Inclusive(CONF_USERNAME, 'auth'): cv.string, vol.Inclusive(CONF_USERNAME, 'auth'): cv.string,
vol.Inclusive(CONF_PASSWORD, 'auth'): cv.string, vol.Inclusive(CONF_PASSWORD, 'auth'): cv.string,
@ -54,6 +56,7 @@ def async_setup_platform(hass, config, async_add_entities,
"""Setup the Kodi platform.""" """Setup the Kodi platform."""
host = config.get(CONF_HOST) host = config.get(CONF_HOST)
port = config.get(CONF_PORT) port = config.get(CONF_PORT)
use_encryption = config.get(CONF_SSL)
if host.startswith('http://') or host.startswith('https://'): if host.startswith('http://') or host.startswith('https://'):
host = host.lstrip('http://').lstrip('https://') host = host.lstrip('http://').lstrip('https://')
@ -65,7 +68,7 @@ def async_setup_platform(hass, config, async_add_entities,
entity = KodiDevice( entity = KodiDevice(
hass, hass,
name=config.get(CONF_NAME), name=config.get(CONF_NAME),
host=host, port=port, host=host, port=port, encryption=use_encryption,
username=config.get(CONF_USERNAME), username=config.get(CONF_USERNAME),
password=config.get(CONF_PASSWORD), password=config.get(CONF_PASSWORD),
turn_off_action=config.get(CONF_TURN_OFF_ACTION)) turn_off_action=config.get(CONF_TURN_OFF_ACTION))
@ -76,8 +79,8 @@ def async_setup_platform(hass, config, async_add_entities,
class KodiDevice(MediaPlayerDevice): class KodiDevice(MediaPlayerDevice):
"""Representation of a XBMC/Kodi device.""" """Representation of a XBMC/Kodi device."""
def __init__(self, hass, name, host, port, username=None, password=None, def __init__(self, hass, name, host, port, encryption=False, username=None,
turn_off_action=None): password=None, turn_off_action=None):
"""Initialize the Kodi device.""" """Initialize the Kodi device."""
import jsonrpc_async import jsonrpc_async
self.hass = hass self.hass = hass
@ -94,9 +97,11 @@ class KodiDevice(MediaPlayerDevice):
else: else:
image_auth_string = "" image_auth_string = ""
self._http_url = 'http://{}:{}/jsonrpc'.format(host, port) protocol = 'https' if encryption else 'http'
self._image_url = 'http://{}{}:{}/image'.format(
image_auth_string, host, port) self._http_url = '{}://{}:{}/jsonrpc'.format(protocol, host, port)
self._image_url = '{}://{}{}:{}/image'.format(
protocol, image_auth_string, host, port)
self._server = jsonrpc_async.Server(self._http_url, **kwargs) self._server = jsonrpc_async.Server(self._http_url, **kwargs)