Skip to content

Commit

Permalink
Fixed some issues with plex account refreshing
Browse files Browse the repository at this point in the history
  • Loading branch information
fuzeman committed Jul 4, 2016
1 parent c761c96 commit 1cbb759
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ def refresh(self, force=False, save=True):
if not self.refresh_details(basic):
return False

if not basic.refresh():
if not basic.refresh(force=True):
return False

# Store changes in database
Expand All @@ -115,13 +115,15 @@ def refresh_details(self, basic):
if basic.token_plex == 'anonymous':
return self.refresh_anonymous()

log.info('Refreshing plex account: %r', self)

# Fetch account details
response = requests.get('https://plex.tv/users/account', headers={
'X-Plex-Token': basic.token_plex
})

if not (200 <= response.status_code < 300):
# Invalid response
log.warn('Unable to retrieve account details from plex.tv (status_code: %s)', response.status_code)
return False

user = ElementTree.fromstring(response.content)
Expand Down Expand Up @@ -150,7 +152,7 @@ def refresh_details(self, basic):
return True

def refresh_anonymous(self):
log.debug('Refreshing anonymous plex account')
log.info('Refreshing plex account: %r (anonymous)', self)

self.username = 'administrator'

Expand All @@ -171,7 +173,7 @@ def refresh_required(self, basic):
if self.title is None:
return True

if basic.token_server is None:
if not basic.token_server:
return True

return False
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ def state(self):

return 'empty'

def refresh(self, save=True):
def refresh(self, force=False, save=True):
# Refresh account details
if not self.refresh_details():
if not self.refresh_details(force):
return False

# Store changes in database
Expand All @@ -44,25 +44,27 @@ def refresh(self, save=True):

return True

def refresh_details(self):
def refresh_details(self, force=False):
if self.token_plex is None:
# Missing token
return False

if self.token_server is not None:
if not force and self.token_server:
# Already authenticated
return True

if self.token_plex == 'anonymous':
return self.refresh_anonymous()

log.info('Refreshing plex credential: %r', self)

# Fetch server token
response = requests.get('https://plex.tv/api/resources?includeHttps=1', headers={
'X-Plex-Token': self.token_plex
})

if not (200 <= response.status_code < 300):
# Invalid response
log.warn('Unable to retrieve servers from plex.tv (status_code: %s)', response.status_code)
return False

devices = ElementTree.fromstring(response.content)
Expand All @@ -81,12 +83,12 @@ def refresh_details(self):
return False

# Update `token_server`
self.token_server = server.attrib.get('accessToken')
self.token_server = server.attrib.get('accessToken') or self.token_plex

return True

def refresh_anonymous(self):
log.debug('Refreshing anonymous plex credential')
log.info('Refreshing plex credential: %r (anonymous)', self)

self.token_server = 'anonymous'

Expand Down

0 comments on commit 1cbb759

Please sign in to comment.