Merge pull request #1121 from croneter/fix-connection
Improve PKC automatically connecting to local PMS
This commit is contained in:
commit
a2197eb8a6
2 changed files with 48 additions and 40 deletions
|
@ -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):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -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):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in a new issue