Merge pull request #1121 from croneter/fix-connection

Improve PKC automatically connecting to local PMS
This commit is contained in:
croneter 2020-02-23 16:27:30 +01:00 committed by GitHub
commit a2197eb8a6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 48 additions and 40 deletions

View file

@ -241,20 +241,18 @@ class InitialSetup(object):
""" """
Checks for server's connectivity. Returns check_connection result Checks for server's connectivity. Returns check_connection result
""" """
# Re-direct via plex if remote - will lead to the correct SSL
# certificate
if server['local']: if server['local']:
url = ('%s://%s:%s'
% (server['scheme'], server['ip'], server['port']))
# Deactive SSL verification if the server is local for Kodi 17 # Deactive SSL verification if the server is local for Kodi 17
verifySSL = True if v.KODIVERSION >= 18 else False verifySSL = True if v.KODIVERSION >= 18 else False
else: else:
url = server['baseURL']
verifySSL = True verifySSL = True
chk = PF.check_connection(url, if not server['token']:
token=server['token'], # Plex GDM: we only get the token from plex.tv after
verifySSL=verifySSL) # Sign-in to plex.tv
return chk server['token'] = utils.settings('plexToken') or None
return PF.check_connection(server['baseURL'],
token=server['token'],
verifySSL=verifySSL)
def pick_pms(self, showDialog=False, inform_of_search=False): def pick_pms(self, showDialog=False, inform_of_search=False):
""" """

View file

@ -210,24 +210,31 @@ def discover_pms(token=None):
if pms['machineIdentifier'] == plex_pms['machineIdentifier']: if pms['machineIdentifier'] == plex_pms['machineIdentifier']:
break break
else: else:
# Only found PMS using GDM - add it to the PMS from plex.tv # Only found PMS using GDM. Check whether we can use baseURL
https = _pms_https_enabled('%s:%s' % (pms['ip'], pms['port'])) # (which is in a different format) or need to connect directly
if https is None: if not _correct_baseurl(pms,
# Error contacting url. Skip and ignore this PMS for now '%s:%s' % (pms['baseURL'], pms['port'])):
LOG.error('Could not contact PMS %s but we should have', pms) if not _correct_baseurl(pms,
continue '%s:%s' % (pms['ip'], pms['port'])):
elif https is True: continue
pms['scheme'] = 'https'
else:
pms['scheme'] = 'http'
pms['baseURL'] = '%s://%s:%s' % (pms['scheme'],
pms['ip'],
pms['port'])
plex_pms_list.append(pms) plex_pms_list.append(pms)
_log_pms(plex_pms_list) _log_pms(plex_pms_list)
return plex_pms_list return plex_pms_list
def _correct_baseurl(pms, url):
https = _pms_https_enabled(url)
if https is None:
# Error contacting url
return False
elif https is True:
pms['scheme'] = 'https'
else:
pms['scheme'] = 'http'
pms['baseURL'] = '%s://%s' % (pms['scheme'], url)
return True
def _log_pms(pms_list): def _log_pms(pms_list):
log_list = deepcopy(pms_list) log_list = deepcopy(pms_list)
for pms in log_list: for pms in log_list:
@ -846,28 +853,31 @@ def _pms_https_enabled(url):
Prefers HTTPS over HTTP Prefers HTTPS over HTTP
""" """
res = DU().downloadUrl('https://%s/identity' % url, # Try HTTPS first
authenticate=False,
verifySSL=True if v.KODIVERSION >= 18 else False)
try: try:
res.attrib DU().downloadUrl('https://%s/identity' % url,
except AttributeError: authenticate=False,
# Might have SSL deactivated. Try with http reraise=True)
res = DU().downloadUrl('http://%s/identity' % url, except exceptions.SSLError:
authenticate=False, LOG.debug('SSLError trying to connect to https://%s/identity', url)
verifySSL=True if v.KODIVERSION >= 18 else False) except Exception as e:
try: LOG.info('Couldnt check https connection to https://%s/identity: %s',
res.attrib url, e)
except AttributeError:
LOG.error("Could not contact PMS %s", url)
return None
else:
# Received a valid XML. Server wants to talk HTTP
return False
else: else:
# Received a valid XML. Server wants to talk HTTPS
return True return True
# Try HTTP next
try:
DU().downloadUrl('http://%s/identity' % url,
authenticate=False,
reraise=True)
except Exception as e:
LOG.info('Couldnt check http connection to http://%s/identity: %s',
url, e)
return
else:
return False
def GetMachineIdentifier(url): def GetMachineIdentifier(url):
""" """