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