Fix Kodi auth (#4770)

This commit is contained in:
Paulus Schoutsen 2016-12-06 07:43:11 -08:00 committed by GitHub
parent 76ff934bd3
commit 860a12cffb
2 changed files with 35 additions and 12 deletions

View File

@ -36,10 +36,10 @@ SUPPORT_KODI = SUPPORT_PAUSE | SUPPORT_VOLUME_SET | SUPPORT_VOLUME_MUTE | \
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ 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_PASSWORD): cv.string,
vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
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.Optional(CONF_USERNAME): cv.string, vol.Inclusive(CONF_USERNAME, 'auth'): cv.string,
vol.Inclusive(CONF_PASSWORD, 'auth'): cv.string,
}) })
@ -51,11 +51,19 @@ def setup_platform(hass, config, add_devices, discovery_info=None):
if jsonrpc_url: if jsonrpc_url:
url = jsonrpc_url.rstrip('/jsonrpc') url = jsonrpc_url.rstrip('/jsonrpc')
username = config.get(CONF_USERNAME)
password = config.get(CONF_PASSWORD)
if username is not None:
auth = (username, password)
else:
auth = None
add_devices([ add_devices([
KodiDevice( KodiDevice(
config.get(CONF_NAME), config.get(CONF_NAME),
url, url,
auth=(config.get(CONF_USERNAME), config.get(CONF_PASSWORD)), auth=auth,
turn_off_action=config.get(CONF_TURN_OFF_ACTION)), turn_off_action=config.get(CONF_TURN_OFF_ACTION)),
]) ])
@ -68,10 +76,15 @@ class KodiDevice(MediaPlayerDevice):
import jsonrpc_requests import jsonrpc_requests
self._name = name self._name = name
self._url = url self._url = url
kwargs = {'timeout': 5}
if auth is not None:
kwargs['auth'] = auth
self._server = jsonrpc_requests.Server( self._server = jsonrpc_requests.Server(
'{}/jsonrpc'.format(self._url), '{}/jsonrpc'.format(self._url), **kwargs)
auth=auth,
timeout=5)
self._turn_off_action = turn_off_action self._turn_off_action = turn_off_action
self._players = list() self._players = list()
self._properties = None self._properties = None

View File

@ -22,8 +22,8 @@ DEFAULT_PORT = 8080
PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({
vol.Required(CONF_HOST): cv.string, vol.Required(CONF_HOST): cv.string,
vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port, vol.Optional(CONF_PORT, default=DEFAULT_PORT): cv.port,
vol.Optional(CONF_USERNAME): cv.string, vol.Inclusive(CONF_USERNAME, 'auth'): cv.string,
vol.Optional(CONF_PASSWORD): cv.string, vol.Inclusive(CONF_PASSWORD, 'auth'): cv.string,
}) })
ATTR_DISPLAYTIME = 'displaytime' ATTR_DISPLAYTIME = 'displaytime'
@ -33,7 +33,13 @@ def get_service(hass, config):
"""Return the notify service.""" """Return the notify service."""
url = '{}:{}'.format(config.get(CONF_HOST), config.get(CONF_PORT)) url = '{}:{}'.format(config.get(CONF_HOST), config.get(CONF_PORT))
auth = (config.get(CONF_USERNAME), config.get(CONF_PASSWORD)) username = config.get(CONF_USERNAME)
password = config.get(CONF_PASSWORD)
if username is not None:
auth = (username, password)
else:
auth = None
return KODINotificationService( return KODINotificationService(
url, url,
@ -48,10 +54,14 @@ class KODINotificationService(BaseNotificationService):
"""Initialize the service.""" """Initialize the service."""
import jsonrpc_requests import jsonrpc_requests
self._url = url self._url = url
kwargs = {'timeout': 5}
if auth is not None:
kwargs['auth'] = auth
self._server = jsonrpc_requests.Server( self._server = jsonrpc_requests.Server(
'{}/jsonrpc'.format(self._url), '{}/jsonrpc'.format(self._url), **kwargs)
auth=auth,
timeout=5)
def send_message(self, message="", **kwargs): def send_message(self, message="", **kwargs):
"""Send a message to Kodi.""" """Send a message to Kodi."""