diff --git a/API.md b/API.md index 9cbde137..427dbc6b 100644 --- a/API.md +++ b/API.md @@ -1037,6 +1037,22 @@ Returns: ``` +### get_pms_token +Get the user's Plex token used for PlexPy. + +``` +Required parameters: + username (str): The Plex.tv username + password (str): The Plex.tv password + +Optional parameters: + None + +Returns: + string: The Plex token used for PlexPy +``` + + ### get_recently_added Get all items that where recelty added to plex. @@ -1094,8 +1110,6 @@ Get the PMS server identifier. ``` Required parameters: - None - hostname (str): 'localhost' or '192.160.0.10' port (int): 32400 diff --git a/data/interfaces/default/settings.html b/data/interfaces/default/settings.html index 6a9262e2..9d1f54d2 100644 --- a/data/interfaces/default/settings.html +++ b/data/interfaces/default/settings.html @@ -2293,33 +2293,31 @@ $(document).ready(function() { // Plex.tv auth token fetch $("#get-pms-auth-token").click(function() { $("#pms-token-status").html(' Fetching token...'); - if (($("#pms_username").val() !== '') || ($("#pms_password").val() !== '')) { + var pms_username = $("#pms_username").val().trim(); + var pms_password = $("#pms_password").val().trim(); + if ((pms_username !== '') && (pms_password !== '')) { $.ajax({ - type: 'POST', - url: 'https://plex.tv/users/sign_in.xml', - dataType: 'xml', + type: 'GET', + url: 'get_pms_token', + data: { + username: pms_username, + password: pms_password + }, + cache: false, async: true, - headers: {'Content-Type': 'application/xml; charset=utf-8', - 'X-Plex-Device-Name': 'PlexPy', - 'X-Plex-Product': 'PlexPy', - 'X-Plex-Version': '${common.VERSION_NUMBER}', - 'X-Plex-Platform': '${common.PLATFORM}', - 'X-Plex-Platform-Version': '${common.PLATFORM_VERSION}', - 'X-Plex-Client-Identifier': '${config["pms_uuid"]}', - 'Authorization': 'Basic ' + btoa($("#pms_username").val() + ':' + $("#pms_password").val()) - }, - error: function(jqXHR, textStatus, errorThrown) { - $("#pms-token-status").html(' Authentication failed!'); - }, - success: function (xml) { - var authToken = $(xml).find('user').attr('authenticationToken'); - $("#pms-token-status").html(' Authentication successful!'); - $("#pms_token").val(authToken); - $('#pms-auth-modal').modal('hide'); + complete: function(xhr, status) { + var authToken = $.parseJSON(xhr.responseText); + if (authToken) { + $("#pms-token-status").html(' Authentication successful!'); + $("#pms_token").val(authToken); + $('#pms-auth-modal').modal('hide'); + } else { + $("#pms-token-status").html(' Invalid username or password.'); + } } }); } else { - $("#pms-token-status").html("You must enter both fields."); + $("#pms-token-status").html(' Username and password required.'); } }); diff --git a/data/interfaces/default/welcome.html b/data/interfaces/default/welcome.html index 68d5e096..429bed6b 100644 --- a/data/interfaces/default/welcome.html +++ b/data/interfaces/default/welcome.html @@ -415,37 +415,31 @@ $('#pms-token-status').fadeIn('fast'); var pms_username = $("#pms_username").val().trim(); var pms_password = $("#pms_password").val().trim(); - if ((pms_username !== '') || (pms_password !== '')) { + if ((pms_username !== '') && (pms_password !== '')) { $.ajax({ - type: "post", - url: "https://plex.tv/users/sign_in.xml", - dataType: 'xml', + type: 'GET', + url: 'get_pms_token', + data: { + username: pms_username, + password: pms_password + }, + cache: false, async: true, - headers: { - 'Content-Type': 'application/xml; charset=utf-8', - 'X-Plex-Device-Name': 'PlexPy', - 'X-Plex-Product': 'PlexPy', - 'X-Plex-Version': '${common.VERSION_NUMBER}', - 'X-Plex-Platform': '${common.PLATFORM}', - 'X-Plex-Platform-Version': '${common.PLATFORM_VERSION}', - 'X-Plex-Client-Identifier': '${config["pms_uuid"]}', - 'Authorization': 'Basic ' + btoa(pms_username + ':' + pms_password) - }, - error: function(jqXHR, textStatus, errorThrown) { - $("#pms-token-status").html(' Authentation failed!'); - $('#pms-token-status').fadeIn('fast'); - }, - success: function (xml) { - var authToken = $(xml).find('user').attr('authenticationToken'); - $("#pms-token-status").html(' Authentation successful!'); - $('#pms-token-status').fadeIn('fast'); - $("#pms_token").val(authToken); - authenticated = true; - getServerOptions(authToken) + complete: function (xhr, status) { + var authToken = $.parseJSON(xhr.responseText); + if (authToken) { + $("#pms-token-status").html(' Authentation successful!'); + $('#pms-token-status').fadeIn('fast'); + $("#pms_token").val(authToken); + authenticated = true; + getServerOptions(authToken) + } else { + $("#pms-token-status").html(' Invalid username or password.'); + } } }); } else { - $("#pms-token-status").html(' You must enter both fields.'); + $("#pms-token-status").html(' Username and password required.'); $('#pms-token-status').fadeIn('fast'); } }); diff --git a/plexpy/webserve.py b/plexpy/webserve.py index 5b937b0a..cc01fac1 100644 --- a/plexpy/webserve.py +++ b/plexpy/webserve.py @@ -2738,17 +2738,35 @@ class WebInterface(object): return @cherrypy.expose + @cherrypy.tools.json_out() @requireAuth(member_of("admin")) - def get_pms_token(self): + @addtoapi() + def get_pms_token(self, username=None, password=None, **kwargs): + """ Get the user's Plex token used for PlexPy. - token = plextv.PlexTV() + ``` + Required parameters: + username (str): The Plex.tv username + password (str): The Plex.tv password + + Optional parameters: + None + + Returns: + string: The Plex token used for PlexPy + ``` + """ + if not username and not password: + return None + + token = plextv.PlexTV(username=username, password=password) result = token.get_token() if result: - return result + return result['auth_token'] else: logger.warn(u"Unable to retrieve Plex.tv token.") - return False + return None @cherrypy.expose @cherrypy.tools.json_out() @@ -2759,8 +2777,6 @@ class WebInterface(object): ``` Required parameters: - None - hostname (str): 'localhost' or '192.160.0.10' port (int): 32400