auth-functions.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. function plugin_auth_plex($username, $password) {
  3. // Quick out
  4. $isAdmin = false;
  5. if ((strtolower(PLEXUSERNAME) == strtolower($username)) && $password == PLEXPASSWORD) {
  6. writeLog("success", "Admin: ".$username." authenticated as plex Admin");
  7. $isAdmin = true;
  8. }
  9. //Get User List
  10. $userURL = 'https://plex.tv/pms/friends/all';
  11. $userHeaders = array(
  12. 'Authorization' => 'Basic '.base64_encode(PLEXUSERNAME.':'.PLEXPASSWORD),
  13. );
  14. libxml_use_internal_errors(true);
  15. $userXML = simplexml_load_string(curl_get($userURL, $userHeaders));
  16. if (is_array($userXML) || is_object($userXML)) {
  17. $isUser = false;
  18. $usernameLower = strtolower($username);
  19. foreach($userXML AS $child) {
  20. if(isset($child['username']) && strtolower($child['username']) == $usernameLower || isset($child['email']) && strtolower($child['email']) == $usernameLower) {
  21. $isUser = true;
  22. writeLog("success", $usernameLower." was found in plex friends list");
  23. break;
  24. }
  25. }
  26. if ($isUser || $isAdmin) {
  27. //Login User
  28. $connectURL = 'https://plex.tv/users/sign_in.json';
  29. $headers = array(
  30. 'Accept'=> 'application/json',
  31. 'Content-Type' => 'application/x-www-form-urlencoded',
  32. 'X-Plex-Product' => 'Organizr',
  33. 'X-Plex-Version' => '1.0',
  34. 'X-Plex-Client-Identifier' => '01010101-10101010',
  35. );
  36. $body = array(
  37. 'user[login]' => $username,
  38. 'user[password]' => $password,
  39. );
  40. $result = curl_post($connectURL, $body, $headers);
  41. if (isset($result['content'])) {
  42. $json = json_decode($result['content'], true);
  43. if ((is_array($json) && isset($json['user']) && isset($json['user']['username'])) && strtolower($json['user']['username']) == $usernameLower || strtolower($json['user']['email']) == $usernameLower) {
  44. writeLog("success", $json['user']['username']." was logged into organizr using plex credentials");
  45. return array(
  46. 'email' => $json['user']['email'],
  47. 'image' => $json['user']['thumb'],
  48. 'token' => $json['user']['authToken'],
  49. 'type' => $isAdmin ? 'admin' : 'user',
  50. );
  51. }
  52. }else{
  53. writeLog("error", "error occured while trying to sign $username into plex");
  54. }
  55. }else{
  56. writeLog("error", "$username is not an authorized PLEX user or entered invalid password");
  57. }
  58. }else{
  59. writeLog("error", "error occured logging into plex might want to check curl.cainfo=/path/to/downloaded/cacert.pem in php.ini");
  60. }
  61. return false;
  62. }