From 21f68b80ead9776067c0eaa2869bd1d51d967f49 Mon Sep 17 00:00:00 2001 From: bouni Date: Wed, 17 Jul 2019 15:02:15 +0200 Subject: [PATCH] Add login_method config option to fix login issue with RouterOS Version > 6.43 (#25194) * added login_method config option to fix login issue with RouterOS Version > 6.43 * minor changes so that users don't have to change their config * removed default config value to make the fallback without config change work as expected --- .../components/mikrotik/device_tracker.py | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/mikrotik/device_tracker.py b/homeassistant/components/mikrotik/device_tracker.py index 3709bc476f5..895f6358445 100644 --- a/homeassistant/components/mikrotik/device_tracker.py +++ b/homeassistant/components/mikrotik/device_tracker.py @@ -16,6 +16,10 @@ _LOGGER = logging.getLogger(__name__) MTK_DEFAULT_API_PORT = '8728' MTK_DEFAULT_API_SSL_PORT = '8729' +CONF_LOGIN_METHOD = 'login_method' +MTK_LOGIN_PLAIN = 'plain' +MTK_LOGIN_TOKEN = 'token' + CONF_ENCODING = 'encoding' DEFAULT_ENCODING = 'utf-8' @@ -24,6 +28,8 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ vol.Required(CONF_USERNAME): cv.string, vol.Required(CONF_PASSWORD): cv.string, vol.Optional(CONF_METHOD): cv.string, + vol.Optional(CONF_LOGIN_METHOD): + vol.Any(MTK_LOGIN_PLAIN, MTK_LOGIN_TOKEN), vol.Optional(CONF_PORT): cv.port, vol.Optional(CONF_SSL, default=False): cv.boolean, vol.Optional(CONF_ENCODING, default=DEFAULT_ENCODING): cv.string, @@ -54,6 +60,7 @@ class MikrotikScanner(DeviceScanner): self.port = MTK_DEFAULT_API_PORT self.username = config[CONF_USERNAME] self.password = config[CONF_PASSWORD] + self.login_method = config.get(CONF_LOGIN_METHOD) self.method = config.get(CONF_METHOD) self.encoding = config[CONF_ENCODING] @@ -72,11 +79,22 @@ class MikrotikScanner(DeviceScanner): def connect_to_device(self): """Connect to Mikrotik method.""" import librouteros + from librouteros.login import login_plain, login_token + + if self.login_method == MTK_LOGIN_PLAIN: + login_method = (login_plain,) + elif self.login_method == MTK_LOGIN_TOKEN: + login_method = (login_token,) + else: + login_method = (login_plain, login_token) + try: kwargs = { 'port': self.port, - 'encoding': self.encoding + 'encoding': self.encoding, + 'login_methods': login_method } + if self.ssl: ssl_context = ssl.create_default_context() ssl_context.check_hostname = False