فهرست منبع

added new method to get plex token and plex machine id

CauseFX 5 سال پیش
والد
کامیت
ace50466d6
5فایلهای تغییر یافته به همراه189 افزوده شده و 184 حذف شده
  1. 52 12
      api/classes/organizr.class.php
  2. 14 0
      api/plugins/invites.php
  3. 5 171
      js/custom.js
  4. 0 0
      js/custom.min.js
  5. 118 1
      js/functions.js

+ 52 - 12
api/classes/organizr.class.php

@@ -1650,11 +1650,10 @@ class Organizr
 				array(
 					'type' => 'button',
 					'label' => 'Get Plex Token',
-					'class' => 'popup-with-form getPlexTokenAuth plexAuth switchAuth',
+					'class' => 'getPlexTokenAuth plexAuth switchAuth',
 					'icon' => 'fa fa-ticket',
 					'text' => 'Retrieve',
-					'href' => '#auth-plex-token-form',
-					'attr' => 'data-effect="mfp-3d-unfold"'
+					'attr' => 'onclick="showPlexTokenForm(\'#settings-main-form [name=plexToken]\')"'
 				),
 				array(
 					'type' => 'password-alt',
@@ -1667,11 +1666,10 @@ class Organizr
 				array(
 					'type' => 'button',
 					'label' => 'Get Plex Machine',
-					'class' => 'popup-with-form getPlexMachineAuth plexAuth switchAuth',
+					'class' => 'getPlexMachineAuth plexAuth switchAuth',
 					'icon' => 'fa fa-id-badge',
 					'text' => 'Retrieve',
-					'href' => '#auth-plex-machine-form',
-					'attr' => 'data-effect="mfp-3d-unfold"'
+					'attr' => 'onclick="showPlexTokenForm(\'#settings-main-form [name=plexID]\')"'
 				),
 				array(
 					'type' => 'input',
@@ -2164,11 +2162,9 @@ class Organizr
 				array(
 					'type' => 'button',
 					'label' => 'Get Plex Token',
-					'class' => 'popup-with-form getPlexTokenSSO',
 					'icon' => 'fa fa-ticket',
 					'text' => 'Retrieve',
-					'href' => '#sso-plex-token-form',
-					'attr' => 'data-effect="mfp-3d-unfold"'
+					'attr' => 'onclick="showPlexTokenForm(\'#sso-form [name=plexToken]\')"'
 				),
 				array(
 					'type' => 'password-alt',
@@ -2180,11 +2176,9 @@ class Organizr
 				array(
 					'type' => 'button',
 					'label' => 'Get Plex Machine',
-					'class' => 'popup-with-form getPlexMachineSSO',
 					'icon' => 'fa fa-id-badge',
 					'text' => 'Retrieve',
-					'href' => '#sso-plex-machine-form',
-					'attr' => 'data-effect="mfp-3d-unfold"'
+					'attr' => 'onclick="showPlexMachineForm(\'#sso-form [name=plexID]\')"'
 				),
 				array(
 					'type' => 'input',
@@ -9128,6 +9122,52 @@ class Organizr
 		}
 	}
 	
+	public function getPlexServers()
+	{
+		if ($this->config['plexToken'] == '') {
+			$this->setAPIResponse('error', 'Plex Token cannot be empty', 422);
+			return false;
+		}
+		$ownedOnly = isset($_GET['owned']) ?? false;
+		$url = $this->qualifyURL('https://plex.tv/pms/servers');
+		$options = ($this->localURL($url)) ? array('verify' => false) : array();
+		$headers = [
+			'X-Plex-Product' => 'Organizr',
+			'X-Plex-Version' => '2.0',
+			'X-Plex-Client-Identifier' => '01010101-10101010',
+			'X-Plex-Token' => $this->config['plexToken'],
+		];
+		$response = Requests::get($url, $headers, $options);
+		libxml_use_internal_errors(true);
+		if ($response->success) {
+			$items = array();
+			$plex = simplexml_load_string($response->body);
+			foreach ($plex as $server) {
+				if ($ownedOnly) {
+					if ($server['owned'] == 1) {
+						$items[] = array(
+							'name' => (string)$server['name'],
+							'address' => (string)$server['address'],
+							'machineIdentifier' => (string)$server['machineIdentifier'],
+							'owned' => (float)$server['owned'],
+						);
+					}
+				} else {
+					$items[] = array(
+						'name' => (string)$server['name'],
+						'address' => (string)$server['address'],
+						'machineIdentifier' => (string)$server['machineIdentifier'],
+						'owned' => (float)$server['owned'],
+					);
+				}
+				
+			}
+			$this->setAPIResponse('success', null, 200, $items);
+			return $items;
+		}
+		
+	}
+	
 	protected function processQueries(array $request, $migration = false)
 	{
 		$results = array();

+ 14 - 0
api/plugins/invites.php

@@ -254,6 +254,13 @@ class Invites extends Organizr
 					'value' => $this->config['plexToken'],
 					'placeholder' => 'Use Get Token Button'
 				),
+				array(
+					'type' => 'button',
+					'label' => 'Get Plex Token',
+					'icon' => 'fa fa-ticket',
+					'text' => 'Retrieve',
+					'attr' => 'onclick="showPlexTokenForm(\'#INVITES-settings-items [name=plexToken]\')"'
+				),
 				array(
 					'type' => 'password-alt',
 					'name' => 'plexID',
@@ -261,6 +268,13 @@ class Invites extends Organizr
 					'value' => $this->config['plexID'],
 					'placeholder' => 'Use Get Plex Machine Button'
 				),
+				array(
+					'type' => 'button',
+					'label' => 'Get Plex Machine',
+					'icon' => 'fa fa-id-badge',
+					'text' => 'Retrieve',
+					'attr' => 'onclick="showPlexMachineForm(\'#INVITES-settings-items [name=plexID]\')"'
+				),
 				array(
 					'type' => 'select2',
 					'class' => 'select2-multiple',

+ 5 - 171
js/custom.js

@@ -1307,177 +1307,11 @@ $(document).on('click', '.disablePlugin', function() {
 $(document).on('change', '#authSelect, #authBackendSelect', function(e) {
     changeAuth();
 });
-$(document).on("click", ".getSSOPlexToken", function () {
-    $('.ssoPlexTokenMessage').text("Grabbing Token");
-    $('.ssoPlexTokenHeader').addClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
-    var plex_username = $('#sso-plex-token-form [name=username]').val().trim();
-    var plex_password = $('#sso-plex-token-form [name=password]').val().trim();
-    if ((plex_password !== '') && (plex_password !== '')) {
-        $.ajax({
-            type: 'POST',
-            headers: {
-                'X-Plex-Product':'Organizr',
-                'X-Plex-Version':'2.0',
-                'X-Plex-Client-Identifier':'01010101-10101010'
-            },
-            url: 'https://plex.tv/users/sign_in.json',
-            data: {
-                'user[login]': plex_username,
-                'user[password]': plex_password,
-                force: true
-            },
-            cache: false,
-            async: true,
-            complete: function(xhr, status) {
-                var result = $.parseJSON(xhr.responseText);
-                if (xhr.status === 201) {
-                    $('.ssoPlexTokenMessage').text(xhr.statusText);
-                    $('.ssoPlexTokenHeader').addClass('panel-success').removeClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
-                    $('#sso-form [name=plexToken]').val(result.user.authToken);
-                    $('#sso-form [name=plexToken]').change();
-                } else {
-                    $('.ssoPlexTokenMessage').text(xhr.statusText);
-                    $('.ssoPlexTokenHeader').addClass('panel-danger').removeClass('panel-info').removeClass('panel-warning');
-                }
-            }
-        });
-    } else {
-        $('.ssoPlexTokenMessage').text("Enter Username and Password");
-        $('.ssoPlexTokenHeader').addClass('panel-warning').removeClass('panel-info').removeClass('panel-danger');
-    }
-});
-$(document).on("click", ".getPlexMachineSSO", function () {
-    var plex_token = $('#sso-form [name=plexToken]').val().trim();
-    if (plex_token !== '') {
-        $('.ssoPlexMachineMessage').text("Grabbing List");
-        $('.ssoPlexMachineHeader').addClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
-        $.ajax({
-            type: 'GET',
-            headers: {
-                'X-Plex-Product':'Organizr',
-                'X-Plex-Version':'2.0',
-                'X-Plex-Client-Identifier':'01010101-10101010',
-                'X-Plex-Token':plex_token,
-            },
-            url: 'https://plex.tv/pms/servers.xml',
-            cache: false,
-            async: true,
-            complete: function(xhr, status) {
-                var result = $.parseXML(xhr.responseText);
-                if (xhr.status === 200) {
-                    $('.ssoPlexMachineMessage').text('Choose Plex Server');
-                    $('.ssoPlexMachineHeader').addClass('panel-success').removeClass('panel-info').removeClass('panel-warning');
-                    var machines = '<option lang="en">Choose Plex Machine</option>';
-                    $('Server', result).each(function(){
-                        if($(this).attr('owned') == 1){
-                            var name = $(this).attr('name');
-                            var machine = $(this).attr('machineIdentifier');
-                            name = name + ' [' + machine + ']';
-                            machines += '<option value="'+machine+'">'+name+'</option>';
-                        }
-                    });
-                    var listing = '<select class="form-control" id="ssoPlexMachineSelector" data-type="select">'+machines+'</select>';
-                    $('.ssoPlexMachineListing').html(listing);
-                } else {
-                    $('.ssoPlexTokenMessage').text(xhr.statusText);
-                    $('.ssoPlexTokenHeader').addClass('panel-danger').removeClass('panel-info').removeClass('panel-warning');
-                }
-            }
-        });
-    } else {
-        $('.ssoPlexMachineMessage').text("Plex Token Needed");
-        $('.ssoPlexMachineHeader').addClass('panel-warning').removeClass('panel-info').removeClass('panel-danger');
-    }
-});
-$(document).on('change', '#ssoPlexMachineSelector', function(e) {
-    $('#sso-form [name=plexID]').val($(this).val());
-    $('#sso-form [name=plexID]').change();
-});
-$(document).on("click", ".getauthPlexToken", function () {
-    $('.authPlexTokenMessage').text("Grabbing Token");
-    $('.authPlexTokenHeader').addClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
-    var plex_username = $('#auth-plex-token-form [name=username]').val().trim();
-    var plex_password = $('#auth-plex-token-form [name=password]').val().trim();
-    if ((plex_password !== '') && (plex_password !== '')) {
-        $.ajax({
-            type: 'POST',
-            headers: {
-                'X-Plex-Product':'Organizr',
-                'X-Plex-Version':'2.0',
-                'X-Plex-Client-Identifier':'01010101-10101010'
-            },
-            url: 'https://plex.tv/users/sign_in.json',
-            data: {
-                'user[login]': plex_username,
-                'user[password]': plex_password,
-                force: true
-            },
-            cache: false,
-            async: true,
-            complete: function(xhr, status) {
-                var result = $.parseJSON(xhr.responseText);
-                if (xhr.status === 201) {
-                    $('.authPlexTokenMessage').text(xhr.statusText);
-                    $('.authPlexTokenHeader').addClass('panel-success').removeClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
-                    $('#settings-main-form [name=plexToken]').val(result.user.authToken);
-                    $('#settings-main-form [name=plexToken]').change();
-                } else {
-                    $('.authPlexTokenMessage').text(xhr.statusText);
-                    $('.authPlexTokenHeader').addClass('panel-danger').removeClass('panel-info').removeClass('panel-warning');
-                }
-            }
-        });
-    } else {
-        $('.authPlexTokenMessage').text("Enter Username and Password");
-        $('.authPlexTokenHeader').addClass('panel-warning').removeClass('panel-info').removeClass('panel-danger');
-    }
-});
-$(document).on("click", ".getPlexMachineAuth", function () {
-    var plex_token = $('#settings-main-form [name=plexToken]').val().trim();
-    if (plex_token !== '') {
-        $('.authPlexMachineMessage').text("Grabbing List");
-        $('.authPlexMachineHeader').addClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
-        $.ajax({
-            type: 'GET',
-            headers: {
-                'X-Plex-Product':'Organizr',
-                'X-Plex-Version':'2.0',
-                'X-Plex-Client-Identifier':'01010101-10101010',
-                'X-Plex-Token':plex_token,
-            },
-            url: 'https://plex.tv/pms/servers.xml',
-            cache: false,
-            async: true,
-            complete: function(xhr, status) {
-                var result = $.parseXML(xhr.responseText);
-                if (xhr.status === 200) {
-                    $('.authPlexMachineMessage').text('Choose Plex Server');
-                    $('.authPlexMachineHeader').addClass('panel-success').removeClass('panel-info').removeClass('panel-warning');
-                    var machines = '<option lang="en">Choose Plex Machine</option>';
-                    $('Server', result).each(function(){
-                        if($(this).attr('owned') == 1){
-                            var name = $(this).attr('name');
-                            var machine = $(this).attr('machineIdentifier');
-                            name = name + ' [' + machine + ']';
-                            machines += '<option value="'+machine+'">'+name+'</option>';
-                        }
-                    });
-                    var listing = '<select class="form-control" id="authPlexMachineSelector" data-type="select">'+machines+'</select>';
-                    $('.authPlexMachineListing').html(listing);
-                } else {
-                    $('.authPlexTokenMessage').text(xhr.statusText);
-                    $('.authPlexTokenHeader').addClass('panel-danger').removeClass('panel-info').removeClass('panel-warning');
-                }
-            }
-        });
-    } else {
-        $('.authPlexMachineMessage').text("Plex Token Needed");
-        $('.authPlexMachineHeader').addClass('panel-warning').removeClass('panel-info').removeClass('panel-danger');
-    }
-});
-$(document).on('change', '#authPlexMachineSelector', function(e) {
-    $('#settings-main-form [name=plexID]').val($(this).val());
-    $('#settings-main-form [name=plexID]').change();
+$(document).on('change', '#plexMachineSelector', function(e) {
+	let selector = $(this).attr('data-selector');
+	$(selector).val($(this).val());
+	$(selector).change();
+	messageSingle('Machine ID selected','Please save...',activeInfo.settings.notifications.position,'#FFF','success','5000');
 });
 $(document).on("click", ".closeErrorPage", function () {
     $('.error-page').html('');

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
js/custom.min.js


+ 118 - 1
js/functions.js

@@ -5868,7 +5868,7 @@ function buildDownloaderCombined(source){
 
     }
     var mainMenu = `<ul class="nav customtab nav-tabs combinedMenuList" role="tablist">`;
-    var addToMainMenu = `<li role="presentation" class="`+active+`"><a onclick="homepageDownloader('`+source+`')" href="#combined-`+source+`" aria-controls="home" role="tab" data-toggle="tab" aria-expanded="true"><span class=""><img src="./plugins/images/tabs/`+source+`.png" class="homepageImageTitle"><span class="badge bg-org downloaderCount" id="count-`+source+`"></span> </span></a></li>`;
+    var addToMainMenu = `<li role="presentation" class="`+active+`"><a onclick="homepageDownloader('`+source+`')" href="#combined-`+source+`" aria-controls="home" role="tab" data-toggle="tab" aria-expanded="true"><span class=""><img src="./plugins/images/tabs/`+source+`.png" class="homepageImageTitle"><span class="badge bg-org downloaderCount" id="count-`+source+`"><i class="fa fa-spinner fa-spin"></i></span></span></a></li>`;
     var listing = '';
     var headerAlt = '';
     var header = '';
@@ -9558,6 +9558,123 @@ function showLDAPLoginTest(){
         className: 'bg-org'
     })
 }
+
+function showPlexTokenForm(selector = null){
+	var div = `
+		<form id="get-plex-token-form">
+		    <h1 lang="en">Get Plex Token</h1>
+		    <div class="panel plexTokenHeader">
+		        <div class="panel-heading plexTokenMessage" lang="en">Enter Plex Details</div>
+		    </div>
+		    <fieldset style="border:0;">
+		        <div class="form-group">
+		            <label class="control-label" for="plex-token-form-username" lang="en">Plex Username</label>
+		            <input type="text" class="form-control" id="plex-token-form-username" name="username" required="" autofocus>
+		        </div>
+		        <div class="form-group">
+		            <label class="control-label" for="plex-token-form-password" lang="en">Plex Password</label>
+		            <input type="password" class="form-control" id="plex-token-form-password" name="password"  required="">
+		        </div>
+		    </fieldset>
+		    <button class="btn btn-sm btn-info btn-rounded waves-effect waves-light pull-right row b-none" onclick="getPlexToken('`+selector+`')" type="button"><span class="btn-label"><i class="fa fa-ticket"></i></span><span lang="en">Grab It</span></button>
+		    <div class="clearfix"></div>
+		</form>
+	`;
+	swal({
+		content: createElementFromHTML(div),
+		buttons: false,
+		className: 'bg-org'
+	})
+}
+function getPlexToken(selector) {
+	$('.plexTokenMessage').text("Grabbing Token");
+	$('.plexTokenHeader').addClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
+	var plex_username = $('#get-plex-token-form [name=username]').val().trim();
+	var plex_password = $('#get-plex-token-form [name=password]').val().trim();
+	if ((plex_password !== '') && (plex_password !== '')) {
+		$.ajax({
+			type: 'POST',
+			headers: {
+				'X-Plex-Product':'Organizr',
+				'X-Plex-Version':'2.0',
+				'X-Plex-Client-Identifier':'01010101-10101010'
+			},
+			url: 'https://plex.tv/users/sign_in.json',
+			data: {
+				'user[login]': plex_username,
+				'user[password]': plex_password,
+				force: true
+			},
+			cache: false,
+			async: true,
+			complete: function(xhr, status) {
+				var result = $.parseJSON(xhr.responseText);
+				if (xhr.status === 201) {
+					$('.plexTokenMessage').text(xhr.statusText);
+					$('.plexTokenHeader').addClass('panel-success').removeClass('panel-info').removeClass('panel-warning').removeClass('panel-danger');
+					$(selector).val(result.user.authToken);
+					$(selector).change();
+					messageSingle('Token created','Please save...',activeInfo.settings.notifications.position,'#FFF','success','5000');
+				} else {
+					$('.plexTokenMessage').text(xhr.statusText);
+					$('.plexTokenHeader').addClass('panel-danger').removeClass('panel-info').removeClass('panel-warning');
+				}
+			}
+		});
+	} else {
+		$('.plexTokenMessage').text("Enter Username and Password");
+		$('.plexTokenHeader').addClass('panel-warning').removeClass('panel-info').removeClass('panel-danger');
+	}
+}
+function showPlexMachineForm(selector = null){
+	var div = `
+		<form id="get-plex-machine-form">
+		    <h1 lang="en">Get Plex Machine</h1>
+		    <div class="panel plexMachineHeader">
+		        <div class="panel-heading plexMachineMessage" lang="en">Contacting server...</div>
+		    </div>
+		    <fieldset style="border:0;">
+		        <div class="form-group">
+		            <label class="control-label" for="plex-machine-form-machine" lang="en">Plex Machine</label>
+		            <div class="plexMachineListing"></div>
+		        </div>
+		    </fieldset>
+		    <div class="clearfix"></div>
+		</form>
+	`;
+	swal({
+		content: createElementFromHTML(div),
+		buttons: false,
+		className: 'bg-org'
+	})
+	.then(
+		organizrAPI2('GET','api/v2/plex/servers?owned').success(function(data) {
+			try {
+				let response = data.response;
+				$('.plexMachineMessage').text('Choose Plex Server');
+				$('.plexMachineHeader').addClass('panel-success').removeClass('panel-info').removeClass('panel-warning');
+				let machines = '<option lang="en">Choose Plex Machine</option>';
+				$.each(response.data, function(i,v) {
+					let name = v.name;
+					let machine = v.machineIdentifier;
+					name = name + ' [' + machine + ']';
+					machines += '<option value="'+machine+'">'+name+'</option>';
+				})
+				let listing = '<select class="form-control" id="plexMachineSelector" data-selector="'+selector+'" data-type="select">'+machines+'</select>';
+				$('.plexMachineListing').html(listing);
+			}catch(e) {
+				console.log(e + ' error: ' + data);
+				orgErrorAlert('<h4>' + e + '</h4>' + formatDebug(data));
+				return false;
+			}
+		}).fail(function(xhr) {
+			message('API Error', xhr.responseJSON.response.message, activeInfo.settings.notifications.position, '#FFF', 'error', '10000');
+			console.error("Organizr Function: API Connection Failed | Error: " + xhr.responseJSON.response.message);
+			$('.plexMachineMessage').text("Plex Token Needed First");
+			$('.plexMachineHeader').addClass('panel-warning').removeClass('panel-info').removeClass('panel-danger');
+		})
+	);
+}
 function oAuthLoginNeededCheck() {
     if(OAuthLoginNeeded == false){
         return false;

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است