auth-functions.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <?php
  2. function authRegister($username,$password,$defaults,$email){
  3. $defaults = defaultUserGroup();
  4. if(createUser($username,$password,$defaults,$email)){
  5. writeLog('success', 'Registration Function - A User has registered', $username);
  6. if(createToken($username,$email,gravatar($email),$defaults['group'],$defaults['group_id'],$GLOBALS['organizrHash'],7)){
  7. writeLoginLog($username, 'success');
  8. writeLog('success', 'Login Function - A User has logged in', $username);
  9. return true;
  10. }
  11. }else{
  12. writeLog('error', 'Registration Function - An error occured', $username);
  13. return 'username taken';
  14. }
  15. }
  16. function checkPlexUser($username){
  17. if(!empty($GLOBALS['plexToken'])){
  18. $url = 'https://plex.tv/pms/friends/all';
  19. $headers = array(
  20. 'X-Plex-Token' => $GLOBALS['plexToken'],
  21. );
  22. $response = Requests::get($url, $headers);
  23. if($response->success){
  24. libxml_use_internal_errors(true);
  25. $userXML = simplexml_load_string($response->body);
  26. if (is_array($userXML) || is_object($userXML)) {
  27. $usernameLower = strtolower($username);
  28. foreach($userXML AS $child) {
  29. if(isset($child['username']) && strtolower($child['username']) == $usernameLower || isset($child['email']) && strtolower($child['email']) == $usernameLower) {
  30. return true;
  31. }
  32. }
  33. }
  34. }
  35. }
  36. return false;
  37. }
  38. function plugin_auth_plex($username, $password) {
  39. $usernameLower = strtolower($username);
  40. if(checkPlexUser($username)){
  41. //Login User
  42. $url = 'https://plex.tv/users/sign_in.json';
  43. $headers = array(
  44. 'Accept'=> 'application/json',
  45. 'Content-Type' => 'application/x-www-form-urlencoded',
  46. 'X-Plex-Product' => 'Organizr',
  47. 'X-Plex-Version' => '2.0',
  48. 'X-Plex-Client-Identifier' => '01010101-10101010',
  49. );
  50. $data = array(
  51. 'user[login]' => $username,
  52. 'user[password]' => $password,
  53. );
  54. $response = Requests::post($url, $headers, $data);
  55. if($response->success){
  56. $json = json_decode($response->body, true);
  57. if ((is_array($json) && isset($json['user']) && isset($json['user']['username'])) && strtolower($json['user']['username']) == $usernameLower || strtolower($json['user']['email']) == $usernameLower) {
  58. //writeLog("success", $json['user']['username']." was logged into organizr using plex credentials");
  59. return array(
  60. 'username' => $json['user']['username'],
  61. 'email' => $json['user']['email'],
  62. 'image' => $json['user']['thumb'],
  63. 'token' => $json['user']['authToken']
  64. );
  65. }
  66. }
  67. }
  68. return false;
  69. }
  70. if (function_exists('ldap_connect')){
  71. // Pass credentials to LDAP backend
  72. function plugin_auth_ldap($username, $password) {
  73. $ldapServers = explode(',',AUTHBACKENDHOST);
  74. foreach($ldapServers as $key => $value) {
  75. // Calculate parts
  76. $digest = parse_url(trim($value));
  77. $scheme = strtolower((isset($digest['scheme'])?$digest['scheme']:'ldap'));
  78. $host = (isset($digest['host'])?$digest['host']:(isset($digest['path'])?$digest['path']:''));
  79. $port = (isset($digest['port'])?$digest['port']:(strtolower($scheme)=='ldap'?389:636));
  80. // Reassign
  81. $ldapServers[$key] = $scheme.'://'.$host.':'.$port;
  82. }
  83. // returns true or false
  84. $ldap = ldap_connect(implode(' ',$ldapServers));
  85. if(empty(AUTHBACKENDDOMAINFORMAT)){
  86. if ($bind = ldap_bind($ldap, AUTHBACKENDDOMAIN.'\\'.$username, $password)) {
  87. writeLog("success", "LDAP authentication success");
  88. return true;
  89. } else {
  90. writeLog("error", "LDAP could not authenticate");
  91. return false;
  92. }
  93. }else{
  94. ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
  95. ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
  96. $bind = @ldap_bind($ldap, sprintf(AUTHBACKENDDOMAINFORMAT, $username), $password);
  97. if ($bind) {
  98. writeLog("success", "LDAP authentication success");
  99. return true;
  100. } else {
  101. writeLog("error", "LDPA could not authenticate");
  102. return false;
  103. }
  104. }
  105. writeLog("error", "LDAP could not authenticate");
  106. return false;
  107. }
  108. }else{
  109. // Ldap Auth Missing Dependancy
  110. function plugin_auth_ldap_disabled() {
  111. return 'LDAP - Disabled (Dependancy: php-ldap missing!)';
  112. }
  113. }
  114. // Pass credentials to FTP backend
  115. function plugin_auth_ftp($username, $password) {
  116. // Calculate parts
  117. $digest = parse_url(AUTHBACKENDHOST);
  118. $scheme = strtolower((isset($digest['scheme'])?$digest['scheme']:(function_exists('ftp_ssl_connect')?'ftps':'ftp')));
  119. $host = (isset($digest['host'])?$digest['host']:(isset($digest['path'])?$digest['path']:''));
  120. $port = (isset($digest['port'])?$digest['port']:21);
  121. // Determine Connection Type
  122. if ($scheme == 'ftps') {
  123. $conn_id = ftp_ssl_connect($host, $port, 20);
  124. } elseif ($scheme == 'ftp') {
  125. $conn_id = ftp_connect($host, $port, 20);
  126. } else {
  127. debug_out('Invalid FTP scheme. Use ftp or ftps');
  128. writeLog("error", "invalid FTP scheme");
  129. return false;
  130. }
  131. // Check if valid FTP connection
  132. if ($conn_id) {
  133. // Attempt login
  134. @$login_result = ftp_login($conn_id, $username, $password);
  135. ftp_close($conn_id);
  136. // Return Result
  137. if ($login_result) {
  138. writeLog("success", "$username authenticated");
  139. return true;
  140. } else {
  141. writeLog("error", "$username could not authenticate");
  142. return false;
  143. }
  144. } else {
  145. return false;
  146. }
  147. return false;
  148. }
  149. // Pass credentials to Emby Backend
  150. function plugin_auth_emby_local($username, $password) {
  151. $embyAddress = qualifyURL(EMBYURL);
  152. $headers = array(
  153. 'Authorization'=> 'MediaBrowser UserId="e8837bc1-ad67-520e-8cd2-f629e3155721", Client="None", Device="Organizr", DeviceId="xxx", Version="1.0.0.0"',
  154. 'Content-Type' => 'application/json',
  155. );
  156. $body = array(
  157. 'Username' => $username,
  158. 'Password' => sha1($password),
  159. 'PasswordMd5' => md5($password),
  160. );
  161. $response = post_router($embyAddress.'/Users/AuthenticateByName', $body, $headers);
  162. if (isset($response['content'])) {
  163. $json = json_decode($response['content'], true);
  164. if (is_array($json) && isset($json['SessionInfo']) && isset($json['User']) && $json['User']['HasPassword'] == true) {
  165. // Login Success - Now Logout Emby Session As We No Longer Need It
  166. $headers = array(
  167. 'X-Mediabrowser-Token' => $json['AccessToken'],
  168. );
  169. $response = post_router($embyAddress.'/Sessions/Logout', array(), $headers);
  170. return true;
  171. }
  172. }
  173. return false;
  174. }