Set different client ID when fetching a new Plex token

This commit is contained in:
JonnyWong16 2021-10-11 21:24:58 -07:00
parent ef8557b50a
commit e34e775f41
No known key found for this signature in database
GPG key ID: B1F1F9807184697A
6 changed files with 16 additions and 14 deletions

View file

@ -610,12 +610,12 @@ function uuidv4() {
}); });
} }
function getPlexHeaders() { function getPlexHeaders(clientID) {
return { return {
'Accept': 'application/json', 'Accept': 'application/json',
'X-Plex-Product': 'Tautulli', 'X-Plex-Product': 'Tautulli',
'X-Plex-Version': 'Plex OAuth', 'X-Plex-Version': 'Plex OAuth',
'X-Plex-Client-Identifier': getLocalStorage('Tautulli_ClientID', uuidv4(), false), 'X-Plex-Client-Identifier': clientID ? clientID : getLocalStorage('Tautulli_ClientID', uuidv4(), false),
'X-Plex-Platform': p.name, 'X-Plex-Platform': p.name,
'X-Plex-Platform-Version': p.version, 'X-Plex-Platform-Version': p.version,
'X-Plex-Model': 'Plex OAuth', 'X-Plex-Model': 'Plex OAuth',
@ -674,8 +674,8 @@ function closePlexOAuthWindow() {
} }
} }
getPlexOAuthPin = function () { getPlexOAuthPin = function (clientID) {
var x_plex_headers = getPlexHeaders(); var x_plex_headers = getPlexHeaders(clientID);
var deferred = $.Deferred(); var deferred = $.Deferred();
$.ajax({ $.ajax({
@ -695,7 +695,7 @@ getPlexOAuthPin = function () {
var polling = null; var polling = null;
function PlexOAuth(success, error, pre) { function PlexOAuth(success, error, pre, clientID) {
if (typeof pre === "function") { if (typeof pre === "function") {
pre() pre()
} }
@ -703,8 +703,8 @@ function PlexOAuth(success, error, pre) {
plex_oauth_window = PopupCenter('', 'Plex-OAuth', 600, 700); plex_oauth_window = PopupCenter('', 'Plex-OAuth', 600, 700);
$(plex_oauth_window.document.body).html(plex_oauth_loader); $(plex_oauth_window.document.body).html(plex_oauth_loader);
getPlexOAuthPin().then(function (data) { getPlexOAuthPin(clientID).then(function (data) {
var x_plex_headers = getPlexHeaders(); var x_plex_headers = getPlexHeaders(clientID);
const pin = data.pin; const pin = data.pin;
const code = data.code; const code = data.code;

View file

@ -973,7 +973,7 @@
</div> </div>
<p class="help-block">Token for Plex.tv authentication.</p> <p class="help-block">Token for Plex.tv authentication.</p>
</div> </div>
<input type="hidden" id="pms_uuid" name="pms_uuid" value="${config['pms_uuid']}"> <input type="hidden" id="pms_client_id" name="pms_client_id" value="${config['pms_client_id']}">
<p><input type="button" class="btn btn-bright save-button" value="Save" data-success="Changes saved successfully"></p> <p><input type="button" class="btn btn-bright save-button" value="Save" data-success="Changes saved successfully"></p>
@ -2753,7 +2753,7 @@ $(document).ready(function() {
} }
$('#sign-in-plex').click(function() { $('#sign-in-plex').click(function() {
PlexOAuth(OAuthSuccessCallback, OAuthErrorCallback, OAuthPreFunction); PlexOAuth(OAuthSuccessCallback, OAuthErrorCallback, OAuthPreFunction, $('#pms_client_id').val(uuidv4()).val());
}); });
// Load database import modal // Load database import modal

View file

@ -111,7 +111,8 @@
Tautulli requires a Plex.tv account. Click the button below to sign in on Plex.tv. You may need to allow popups in your browser. Tautulli requires a Plex.tv account. Click the button below to sign in on Plex.tv. You may need to allow popups in your browser.
</p> </p>
</div> </div>
<input type="hidden" class="form-control" name="pms_token" id="pms_token" value="" data-validate="validatePMStoken"> <input type="hidden" name="pms_token" id="pms_token" value="" data-validate="validatePMStoken">
<input type="hidden" name="pms_client_id" id="pms_client_id" value="${config['pms_client_id']}">
<a class="btn btn-dark" id="sign-in-plex" href="#" role="button">Sign In with Plex</a> <a class="btn btn-dark" id="sign-in-plex" href="#" role="button">Sign In with Plex</a>
<span style="margin-left: 10px; display: none;" id="pms-token-status"></span> <span style="margin-left: 10px; display: none;" id="pms-token-status"></span>
</div> </div>
@ -570,7 +571,7 @@ $(document).ready(function() {
} }
$('#sign-in-plex').click(function() { $('#sign-in-plex').click(function() {
PlexOAuth(OAuthSuccessCallback, OAuthErrorCallback, OAuthPreFunction); PlexOAuth(OAuthSuccessCallback, OAuthErrorCallback, OAuthPreFunction, $('#pms_client_id').val(uuidv4()).val());
}); });
}); });
</script> </script>

View file

@ -50,6 +50,7 @@ FILENAME = "config.ini"
_CONFIG_DEFINITIONS = { _CONFIG_DEFINITIONS = {
'ALLOW_GUEST_ACCESS': (int, 'General', 0), 'ALLOW_GUEST_ACCESS': (int, 'General', 0),
'DATE_FORMAT': (str, 'General', 'YYYY-MM-DD'), 'DATE_FORMAT': (str, 'General', 'YYYY-MM-DD'),
'PMS_CLIENT_ID': (str, 'PMS', ''),
'PMS_IDENTIFIER': (str, 'PMS', ''), 'PMS_IDENTIFIER': (str, 'PMS', ''),
'PMS_IP': (str, 'PMS', '127.0.0.1'), 'PMS_IP': (str, 'PMS', '127.0.0.1'),
'PMS_IS_CLOUD': (int, 'PMS', 0), 'PMS_IS_CLOUD': (int, 'PMS', 0),

View file

@ -55,7 +55,7 @@ class HTTPHandler(object):
self.headers = { self.headers = {
'X-Plex-Product': plexpy.common.PRODUCT, 'X-Plex-Product': plexpy.common.PRODUCT,
'X-Plex-Version': plexpy.common.RELEASE, 'X-Plex-Version': plexpy.common.RELEASE,
'X-Plex-Client-Identifier': plexpy.CONFIG.PMS_UUID, 'X-Plex-Client-Identifier': plexpy.CONFIG.PMS_CLIENT_ID or plexpy.CONFIG.PMS_UUID,
'X-Plex-Platform': plexpy.common.PLATFORM, 'X-Plex-Platform': plexpy.common.PLATFORM,
'X-Plex-Platform-Version': plexpy.common.PLATFORM_RELEASE, 'X-Plex-Platform-Version': plexpy.common.PLATFORM_RELEASE,
'X-Plex-Device': '{} {}'.format(plexpy.common.PLATFORM, 'X-Plex-Device': '{} {}'.format(plexpy.common.PLATFORM,

View file

@ -205,6 +205,7 @@ class WebInterface(object):
@requireAuth(member_of("admin")) @requireAuth(member_of("admin"))
def welcome(self, **kwargs): def welcome(self, **kwargs):
config = { config = {
"pms_client_id": plexpy.CONFIG.PMS_CLIENT_ID,
"pms_identifier": plexpy.CONFIG.PMS_IDENTIFIER, "pms_identifier": plexpy.CONFIG.PMS_IDENTIFIER,
"pms_ip": plexpy.CONFIG.PMS_IP, "pms_ip": plexpy.CONFIG.PMS_IP,
"pms_port": plexpy.CONFIG.PMS_PORT, "pms_port": plexpy.CONFIG.PMS_PORT,
@ -212,7 +213,6 @@ class WebInterface(object):
"pms_ssl": plexpy.CONFIG.PMS_SSL, "pms_ssl": plexpy.CONFIG.PMS_SSL,
"pms_is_cloud": plexpy.CONFIG.PMS_IS_CLOUD, "pms_is_cloud": plexpy.CONFIG.PMS_IS_CLOUD,
"pms_token": plexpy.CONFIG.PMS_TOKEN, "pms_token": plexpy.CONFIG.PMS_TOKEN,
"pms_uuid": plexpy.CONFIG.PMS_UUID,
"pms_name": plexpy.CONFIG.PMS_NAME, "pms_name": plexpy.CONFIG.PMS_NAME,
"logging_ignore_interval": plexpy.CONFIG.LOGGING_IGNORE_INTERVAL "logging_ignore_interval": plexpy.CONFIG.LOGGING_IGNORE_INTERVAL
} }
@ -3168,6 +3168,7 @@ class WebInterface(object):
"check_github_interval": plexpy.CONFIG.CHECK_GITHUB_INTERVAL, "check_github_interval": plexpy.CONFIG.CHECK_GITHUB_INTERVAL,
"interface_list": interface_list, "interface_list": interface_list,
"cache_sizemb": plexpy.CONFIG.CACHE_SIZEMB, "cache_sizemb": plexpy.CONFIG.CACHE_SIZEMB,
"pms_client_id": plexpy.CONFIG.PMS_CLIENT_ID,
"pms_identifier": plexpy.CONFIG.PMS_IDENTIFIER, "pms_identifier": plexpy.CONFIG.PMS_IDENTIFIER,
"pms_ip": plexpy.CONFIG.PMS_IP, "pms_ip": plexpy.CONFIG.PMS_IP,
"pms_logs_folder": plexpy.CONFIG.PMS_LOGS_FOLDER, "pms_logs_folder": plexpy.CONFIG.PMS_LOGS_FOLDER,
@ -3178,7 +3179,6 @@ class WebInterface(object):
"pms_is_cloud": plexpy.CONFIG.PMS_IS_CLOUD, "pms_is_cloud": plexpy.CONFIG.PMS_IS_CLOUD,
"pms_url": plexpy.CONFIG.PMS_URL, "pms_url": plexpy.CONFIG.PMS_URL,
"pms_url_manual": checked(plexpy.CONFIG.PMS_URL_MANUAL), "pms_url_manual": checked(plexpy.CONFIG.PMS_URL_MANUAL),
"pms_uuid": plexpy.CONFIG.PMS_UUID,
"pms_web_url": plexpy.CONFIG.PMS_WEB_URL, "pms_web_url": plexpy.CONFIG.PMS_WEB_URL,
"pms_name": plexpy.CONFIG.PMS_NAME, "pms_name": plexpy.CONFIG.PMS_NAME,
"pms_update_check_interval": plexpy.CONFIG.PMS_UPDATE_CHECK_INTERVAL, "pms_update_check_interval": plexpy.CONFIG.PMS_UPDATE_CHECK_INTERVAL,