From 24548a081c41b731ffd7a36a8b8c161b3f67816a Mon Sep 17 00:00:00 2001 From: Matt Date: Sat, 6 Aug 2022 19:43:16 -0400 Subject: [PATCH] Fix user switching --- resources/lib/jellyfin.py | 12 +++++++----- resources/lib/server_detect.py | 5 +++-- resources/lib/utils.py | 9 ++++++++- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/resources/lib/jellyfin.py b/resources/lib/jellyfin.py index 4b8cdb5..4475981 100644 --- a/resources/lib/jellyfin.py +++ b/resources/lib/jellyfin.py @@ -78,6 +78,8 @@ class API: requests.delete(url, headers=self.headers, verify=self.verify_cert) def authenticate(self, auth_data): + # Always force create fresh headers during authentication + self.create_headers(True) response = self.post('/Users/AuthenticateByName', auth_data) token = response.get('AccessToken') if token: @@ -90,10 +92,10 @@ class API: log.error('Unable to authenticate to Jellyfin server') return {} - def create_headers(self): + def create_headers(self, force=False): - # If the headers already exist with an auth token, return - if self.headers and 'x-mediabrowser-token' in self.headers: + # If the headers already exist with an auth token, return unless we're regenerating + if self.headers and 'x-mediabrowser-token' in self.headers and force is False: return headers = {} @@ -116,8 +118,8 @@ class API: headers['x-emby-authorization'] = authorization - # If we have a valid token, ensure it's included in the headers - if self.token: + # If we have a valid token, ensure it's included in the headers unless we're regenerating + if self.token and force is False: headers['x-mediabrowser-token'] = self.token else: # Check for updated credentials since initialization diff --git a/resources/lib/server_detect.py b/resources/lib/server_detect.py index cc5cdc4..d65397b 100644 --- a/resources/lib/server_detect.py +++ b/resources/lib/server_detect.py @@ -203,6 +203,8 @@ def check_server(force=False, change_user=False, notify=False): # do we need to change the user current_username = settings.getSetting('username') user_details = load_user_details() + home_window = HomeWindow() + home_window.set_property('user_name', current_username) # if asked or we have no current user then show user selection screen if something_changed or change_user or len(current_username) == 0 or not user_details: @@ -228,8 +230,6 @@ def check_server(force=False, change_user=False, notify=False): secured = selected_user.getProperty("secure") == "true" manual = selected_user.getProperty("manual") == "true" - home_window = HomeWindow() - # If using a manual login, ask for username if manual: kb = xbmc.Keyboard() @@ -244,6 +244,7 @@ def check_server(force=False, change_user=False, notify=False): return home_window.set_property('user_name', selected_user_name) + settings.setSetting('username', selected_user_name) user_details = load_user_details() if not user_details: diff --git a/resources/lib/utils.py b/resources/lib/utils.py index f2fd64f..592d0f7 100644 --- a/resources/lib/utils.py +++ b/resources/lib/utils.py @@ -143,7 +143,10 @@ def translate_string(string_id): def get_device_id(): window = HomeWindow() - username = window.get_property('username') + username = window.get_property('user_name') + if not username: + settings = xbmcaddon.Addon() + username = settings.getSetting('username') client_id = window.get_property("client_id") hashed_name = hashlib.md5(username.encode()).hexdigest() @@ -226,6 +229,10 @@ def load_user_details(): return {} user_data = auth_data.get(user_name, {}) + # User doesn't exist yet + if not user_data: + return {} + user_id = user_data.get('user_id') auth_token = user_data.get('token')