def query(self, path, method=None, **kwargs): method = method or self.session.get url = self.buildUrl(path, includeToken=True) # If URL is empty, try refresh resources and return empty set for now if not url: util.WARN_LOG( "Empty server url, returning None and refreshing resources") plexapp.refreshResources(True) return None util.LOG('{0} {1}'.format( method.__name__.upper(), re.sub('X-Plex-Token=[^&]+', 'X-Plex-Token=****', url))) try: response = method(url, **kwargs) if response.status_code not in (200, 201): codename = http.status_codes.get(response.status_code, ['Unknown'])[0] raise exceptions.BadRequest('({0}) {1}'.format( response.status_code, codename)) data = response.text.encode('utf8') except asyncadapter.TimeoutException: util.ERROR() plexapp.refreshResources(True) return None except http.requests.ConnectionError: util.ERROR() return None return ElementTree.fromstring(data) if data else None
def onSecurityChange(self, value=None): # If the security policy changes, then we will need to allow all # connections to be retested by resetting the last test. We can # simply call `self.resetLastTest()` to allow all connection to be # tested when the server dropdown is enable, but we may as well # test all the connections immediately. plexapp.refreshResources(True)
def onAccountResponse(self, request, response, context): oldId = self.ID if response.isSuccess(): data = response.getBodyXml() # The user is signed in self.isSignedIn = True self.isOffline = False self.ID = data.attrib.get('id') self.title = data.attrib.get('title') self.username = data.attrib.get('username') self.email = data.attrib.get('email') self.thumb = data.attrib.get('thumb') self.authToken = data.attrib.get('authenticationToken') self.isPlexPass = ( data.find('subscription') is not None and data.find('subscription').attrib.get('active') == '1') self.isManaged = data.attrib.get('restricted') == '1' self.isSecure = data.attrib.get('secure') == '1' self.hasQueue = bool(data.attrib.get('queueEmail')) # PIN if data.attrib.get('pin'): self.pin = data.attrib.get('pin') else: self.pin = None self.isProtected = bool(self.pin) # update the list of users in the home self.updateHomeUsers() # set admin attribute for the user self.isAdmin = False if self.homeUsers: for user in self.homeUsers: if self.ID == user.id: self.isAdmin = str(user.admin) == "1" break if self.isAdmin and self.isPlexPass: self.adminHasPlexPass = True # consider a single, unprotected user authenticated if not self.isAuthenticated and not self.isProtected and len( self.homeUsers) <= 1: self.isAuthenticated = True self.logState() self.saveState() plexapp.MANAGER.publish() plexapp.refreshResources() elif response.getStatus() >= 400 and response.getStatus() < 500: # The user is specifically unauthorized, clear everything util.WARN_LOG("Sign Out: User is unauthorized") self.signOut(True) else: # Unexpected error, keep using whatever we read from the registry util.WARN_LOG( "Unexpected response from plex.tv ({0}), switching to OFFLINE mode" .format(response.getStatus())) self.logState() self.isOffline = True # consider a single, unprotected user authenticated if not self.isAuthenticated and not self.isProtected: self.isAuthenticated = True plexapp.APP.clearInitializer("myplex") # Logger().UpdateSyslogHeader() # TODO: ------------------------------------------------------------------------------------------------------IMPLEMENT if oldId != self.ID or self.switchUser: self.switchUser = None plexapp.APP.trigger("change:user", account=self, reallyChanged=oldId != self.ID) plexapp.APP.trigger("account:response")