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
This commit is contained in:
bouni 2019-07-17 15:02:15 +02:00 committed by Martin Hjelmare
parent 8bae7a45a5
commit 21f68b80ea

View File

@ -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