Explorar o código

tau name fix - work started on auth services

causefx %!s(int64=8) %!d(string=hai) anos
pai
achega
95bc2ab3e7

+ 1 - 0
.gitignore

@@ -92,3 +92,4 @@ wallpaper.jpg
 strings.json
 css/themes/*.css
 !css/themes/Organizr.css
+*sonflix*

+ 66 - 0
api/functions/auth-functions.php

@@ -0,0 +1,66 @@
+<?php
+
+function plugin_auth_plex($username, $password) {
+	// Quick out
+	$isAdmin = false;
+	if ((strtolower(PLEXUSERNAME) == strtolower($username)) && $password == PLEXPASSWORD) {
+			writeLog("success", "Admin: ".$username." authenticated as plex Admin");
+		$isAdmin = true;
+	}
+
+	//Get User List
+	$userURL = 'https://plex.tv/pms/friends/all';
+	$userHeaders = array(
+		'Authorization' => 'Basic '.base64_encode(PLEXUSERNAME.':'.PLEXPASSWORD),
+	);
+	libxml_use_internal_errors(true);
+	$userXML = simplexml_load_string(curl_get($userURL, $userHeaders));
+
+	if (is_array($userXML) || is_object($userXML)) {
+		$isUser = false;
+		$usernameLower = strtolower($username);
+		foreach($userXML AS $child) {
+			if(isset($child['username']) && strtolower($child['username']) == $usernameLower || isset($child['email']) && strtolower($child['email']) == $usernameLower) {
+				$isUser = true;
+ 				writeLog("success", $usernameLower." was found in plex friends list");
+				break;
+			}
+		}
+
+		if ($isUser || $isAdmin) {
+			//Login User
+			$connectURL = 'https://plex.tv/users/sign_in.json';
+			$headers = array(
+				'Accept'=> 'application/json',
+				'Content-Type' => 'application/x-www-form-urlencoded',
+				'X-Plex-Product' => 'Organizr',
+				'X-Plex-Version' => '1.0',
+				'X-Plex-Client-Identifier' => '01010101-10101010',
+			);
+			$body = array(
+				'user[login]' => $username,
+				'user[password]' => $password,
+			);
+			$result = curl_post($connectURL, $body, $headers);
+			if (isset($result['content'])) {
+				$json = json_decode($result['content'], true);
+				if ((is_array($json) && isset($json['user']) && isset($json['user']['username'])) && strtolower($json['user']['username']) == $usernameLower || strtolower($json['user']['email']) == $usernameLower) {
+					writeLog("success", $json['user']['username']." was logged into organizr using plex credentials");
+                    return array(
+						'email' => $json['user']['email'],
+						'image' => $json['user']['thumb'],
+						'token' => $json['user']['authToken'],
+						'type' => $isAdmin ? 'admin' : 'user',
+					);
+				}
+			}else{
+				writeLog("error", "error occured while trying to sign $username into plex");
+			}
+		}else{
+			writeLog("error", "$username is not an authorized PLEX user or entered invalid password");
+		}
+	}else{
+			writeLog("error", "error occured logging into plex might want to check curl.cainfo=/path/to/downloaded/cacert.pem in php.ini");
+	}
+	return false;
+}

+ 1 - 1
api/functions/sso-functions.php

@@ -14,7 +14,7 @@ function ssoCheck($username, $password, $token=null){
 	if($GLOBALS['ssoTautulli']){
 		$tautulliToken = getTautulliToken($username, $password);
 		if($tautulliToken){
-			coookie('set','tuatulli_token_'.$tautulliToken['uuid'],$tautulliToken['token'],7, false);
+			coookie('set','tautulli_token_'.$tautulliToken['uuid'],$tautulliToken['token'],7, false);
 		}
 	}
 	return true;

+ 5 - 1
api/index.php

@@ -634,7 +634,11 @@ switch ($function) {
                 $result['data'] = $status;
                 $result['branch'] = $GLOBALS['branch'];
                 $result['theme'] = $GLOBALS['theme'];
-				$result['version'] = $GLOBALS['installedVersion'];
+                $result['version'] = $GLOBALS['installedVersion'];
+				$result['sso'] = array(
+                    'myPlexAccessToken' => isset($_COOKIE['mpt']) ? $_COOKIE['mpt'] : false,
+                    'id_token' => isset($_COOKIE['Auth']) ? $_COOKIE['Auth'] : false
+                );
                 break;
             default:
                 $result['status'] = 'error';

+ 17 - 0
api/pages/settings-settings-logs.php

@@ -26,6 +26,14 @@ $(document).on("click", ".swapLog", function(e) {
                     <th lang="en">Type</th>
                 </tr>
             </thead>
+			<tfoot>
+                <tr>
+                    <th lang="en">Date</th>
+                    <th lang="en">Username</th>
+                    <th lang="en">IP Address</th>
+                    <th lang="en">Type</th>
+                </tr>
+            </tfoot>
             <tbody></tbody>
         </table>
     </div>
@@ -43,6 +51,15 @@ $(document).on("click", ".swapLog", function(e) {
                     <th lang="en">Type</th>
                 </tr>
             </thead>
+            <tfoot>
+                <tr>
+                    <th lang="en">Date</th>
+                    <th lang="en">Username</th>
+                    <th lang="en">IP Address</th>
+                    <th lang="en">Message</th>
+                    <th lang="en">Type</th>
+                </tr>
+            </tfoot>
             <tbody></tbody>
         </table>
     </div>

+ 4 - 0
css/style.css

@@ -160,3 +160,7 @@
    display: none;
    z-index: 10;
  }
+ img.lazyload.tabImages {
+height: 120px !important;
+object-fit: contain;
+}

+ 5 - 3
js/custom.js

@@ -1181,9 +1181,11 @@ $(document).on("click", ".getPlexMachineSSO", function () {
                     $('.ssoPlexMachineHeader').addClass('panel-success').removeClass('panel-info').removeClass('panel-warning');
                     var machines = '<option lang="en">Choose Plex Machine</option>';
                     $('Server', result).each(function(){
-                        var name = $(this).attr('name');
-                        var machine = $(this).attr('machineIdentifier');
-                        machines += '<option value="'+machine+'">'+name+'</option>';
+                        if($(this).attr('owned') == 1){
+                            var name = $(this).attr('name');
+                            var machine = $(this).attr('machineIdentifier');
+                            machines += '<option value="'+machine+'">'+name+'</option>';
+                        }
                     })
                     var listing = `<select class="form-control" id="ssoPlexMachineSelector" data-type="select">`+machines+`</select>`;
                     $('.ssoPlexMachineListing').html(listing);

+ 20 - 3
js/functions.js

@@ -1624,13 +1624,13 @@ function language(language){
 function logIcon(type){
 	switch (type) {
 		case "success":
-			return '<i class="fa fa-check text-success"></i>';
+			return '<i class="fa fa-check text-success"></i><span class="hidden">Success</span>';
 			break;
 		case "warning":
-			return '<i class="fa fa-exclamation-triangle text-warning"></i>';
+			return '<i class="fa fa-exclamation-triangle text-warning"></i><span class="hidden">Warning</span>';
 			break;
 		case "error":
-			return '<i class="fa fa-close text-danger"></i>';
+			return '<i class="fa fa-close text-danger"></i><span class="hidden">Error</span>';
 			break;
 		default:
 	}
@@ -1750,6 +1750,21 @@ function changeTheme(theme){
 	//$("#preloader").fadeOut();
 	console.log('Theme: '+theme);
 }
+function setSSO(){
+	$.each(activeInfo.sso, function(i,v) {
+		if(v !== false){
+			local('set', i, v);
+		}
+	});
+}
+//Generate API
+function generateCode() {
+    var code = "";
+    var possible = "abcdefghijklmnopqrstuvwxyz0123456789";
+    for (var i = 0; i < 20; i++)
+        code += possible.charAt(Math.floor(Math.random() * possible.length));
+    return code;
+}
 function launch(){
 	organizrConnect('api/?v1/launch_organizr').success(function (data) {
 		var json = JSON.parse(data);
@@ -1769,6 +1784,7 @@ function launch(){
 			phpVersion:json.data.status.php,
 			token:json.data.user.token,
 			branch:json.branch,
+			sso:json.sso,
 			theme:json.theme,
 			version:json.version
 		};
@@ -1778,6 +1794,7 @@ function launch(){
 		checkMessage();
 		errorPage();
 		changeTheme(activeInfo.theme);
+		setSSO();
 		switch (json.data.status.status) {
 			case "wizard":
 				buildWizard();

BIN=BIN
plugins/images/tabs/ombi-emby.png


BIN=BIN
plugins/images/tabs/ombi-plex.png