auth.utils.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. <?php
  2. define("CONFIG", 1);
  3. define("SQL", 1);
  4. require_once($_SERVER['DOCUMENT_ROOT'] . "/cfg/config.php");
  5. require_once($_SERVER['DOCUMENT_ROOT'] . "/inc/sql.php");
  6. require_once($_SERVER['DOCUMENT_ROOT'] . "/inc/common.php");
  7. ini_set('session.use_trans_sid',true);
  8. ini_set('session.use_only_cookies',false);
  9. function logout()
  10. {
  11. if (!session_id()) {
  12. session_start();
  13. }
  14. if (session_id()) {
  15. // Если есть активная сессия, удаляем куки сессии
  16. setcookie(session_name(), session_id(), time() - 60 * 60 * 24);
  17. session_unset();
  18. session_destroy();
  19. }
  20. header("Location: /login.php");
  21. }
  22. function qlogout()
  23. {
  24. if (!session_id()) {
  25. session_start();
  26. }
  27. if (session_id()) {
  28. // Если есть активная сессия, удаляем куки сессии
  29. setcookie(session_name(), session_id(), time() - 60 * 60 * 24);
  30. session_unset();
  31. session_destroy();
  32. }
  33. exit;
  34. }
  35. //login by password
  36. function login($db)
  37. {
  38. if (!session_id()) {
  39. if (!session_start()) {
  40. logout();
  41. exit();
  42. }
  43. }
  44. if (!IsAuthenticated($db)) {
  45. logout();
  46. exit();
  47. }
  48. return true;
  49. }
  50. //login by api_key
  51. function Silentlogin($db)
  52. {
  53. if (!session_id()) {
  54. if (!session_start()) {
  55. logout();
  56. exit();
  57. }
  58. }
  59. if (!IsSilentAuthenticated($db)) {
  60. logout();
  61. exit();
  62. }
  63. return true;
  64. }
  65. function IsAuthenticated($db)
  66. {
  67. if (!empty($_SESSION['user_id'])) {
  68. return true;
  69. }
  70. if (empty($auth_ip)) {
  71. $auth_ip = get_user_ip();
  72. $_SESSION['IP'] = $auth_ip;
  73. }
  74. if (!empty($_POST['login'])) {
  75. $login = trim($_POST['login']);
  76. }
  77. if (!empty($_POST['password'])) {
  78. $pass = trim($_POST['password']);
  79. }
  80. if (empty($login) or empty($pass)) {
  81. LOG_INFO($db, "login [$login] or password [$pass] undefined from $auth_ip: fail!");
  82. logout();
  83. return false;
  84. }
  85. $login = htmlspecialchars(stripslashes($login));
  86. if (empty($login) or empty($pass)) {
  87. LOG_INFO($db, "login [$login] or password [$pass] undefined from $auth_ip: fail!");
  88. logout();
  89. return false;
  90. }
  91. $query = "SELECT * FROM `Customers` WHERE Login='{$login}'";
  92. $auth_record = get_record_sql($db, $query);
  93. if (!empty($auth_record)) {
  94. if (password_verify($pass, $auth_record['password'])) {
  95. if (empty($_SESSION['session_id'])) {
  96. session_regenerate_id();
  97. $_SESSION['session_id'] = session_id();
  98. }
  99. if (empty($_SESSION['user_id'])) {
  100. LOG_INFO($db, "login user [$login] from " . $_SESSION['IP'] . ": success.");
  101. }
  102. $_SESSION['user_id'] = $auth_record['id'];
  103. $_SESSION['login'] = $login;
  104. return true;
  105. } else {
  106. LOG_INFO($db, "login user [$login] from " . $_SESSION['IP'] . ": fail!");
  107. logout();
  108. return false;
  109. }
  110. }
  111. LOG_INFO($db, "login user [$login] from " . $_SESSION['IP'] . ": fail!");
  112. logout();
  113. return false;
  114. }
  115. function IsSilentAuthenticated($db)
  116. {
  117. if (!empty($_SESSION['user_id'])) {
  118. return true;
  119. }
  120. if (empty($auth_ip)) {
  121. $auth_ip = get_user_ip();
  122. $_SESSION['IP'] = $auth_ip;
  123. }
  124. if (!empty($_GET['login'])) {
  125. $login = trim($_GET['login']);
  126. }
  127. if (!empty($_POST['login'])) {
  128. $login = trim($_POST['login']);
  129. }
  130. if (!empty($_GET['password'])) {
  131. $pass = trim($_GET['password']);
  132. }
  133. if (!empty($_POST['password'])) {
  134. $pass = trim($_POST['password']);
  135. }
  136. if (!empty($_GET['api_key'])) {
  137. $pass = trim($_GET['api_key']);
  138. }
  139. if (!empty($_POST['api_key'])) {
  140. $pass = trim($_POST['api_key']);
  141. }
  142. if (empty($login) or empty($pass)) {
  143. LOG_INFO($db, "login or password undefined from $auth_ip: fail!");
  144. logout();
  145. return false;
  146. }
  147. $login = htmlspecialchars(stripslashes($login));
  148. if ($login == '' or $pass == '') {
  149. LOG_INFO($db, "login or password undefined from $auth_ip: fail!");
  150. logout();
  151. return false;
  152. }
  153. $query = "SELECT id FROM `Customers` WHERE Login='{$login}' AND `api_key`='{$pass}'";
  154. $auth_record = get_record_sql($db, $query);
  155. if (!empty($auth_record)) {
  156. if (empty($_SESSION['session_id'])) {
  157. session_regenerate_id();
  158. $_SESSION['session_id'] = session_id();
  159. }
  160. if (empty($_SESSION['user_id'])) {
  161. LOG_INFO($db, "Silent login user [$login] from " . $_SESSION['IP'] . ": success.");
  162. }
  163. $_SESSION['user_id'] = $auth_record['id'];
  164. $_SESSION['login'] = $login;
  165. return true;
  166. }
  167. LOG_INFO($db, "Silent login user $login from " . $_SESSION['IP'] . ": fail!");
  168. logout();
  169. return false;
  170. }