PageRenderTime 26ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/functions/func.login.php

http://avecms.googlecode.com/
PHP | 216 lines | 159 code | 43 blank | 14 comment | 23 complexity | 7b95812090b86659a327b8ad9457e207 MD5 | raw file
Possible License(s): GPL-3.0, BSD-3-Clause, BSD-2-Clause, Apache-2.0, LGPL-2.1
  1. <?php
  2. function user_login($login, $password, $attach_ip = 0, $keep_in = 0, $sleep = 0)
  3. {
  4. global $AVE_DB, $cookie_domain;
  5. sleep($sleep);
  6. if (empty($login)) return 1;
  7. $row = $AVE_DB->Query("
  8. SELECT
  9. usr.Id,
  10. usr.user_group,
  11. usr.user_name,
  12. usr.firstname,
  13. usr.lastname,
  14. usr.email,
  15. usr.country,
  16. usr.password,
  17. usr.salt,
  18. usr.status,
  19. grp.user_group_permission
  20. FROM
  21. " . PREFIX . "_users AS usr
  22. LEFT JOIN
  23. " . PREFIX . "_user_groups AS grp
  24. ON grp.user_group = usr.user_group
  25. WHERE email = '" . $login . "'
  26. OR user_name = '" . $login . "'
  27. LIMIT 1
  28. ")->FetchRow();
  29. if (! (isset($row->password) && $row->password == md5(md5($password . $row->salt)))) return 2;
  30. if ($row->status != '1') return 3;
  31. $salt = make_random_string();
  32. $hash = md5(md5($password . $salt));
  33. $time = time();
  34. $u_ip = ($attach_ip==1) ? "INET_ATON('" . $_SERVER['REMOTE_ADDR'] . "')" : 0;
  35. $AVE_DB->Query("
  36. UPDATE " . PREFIX . "_users
  37. SET
  38. last_visit = '" . $time . "',
  39. password = '" . $hash . "',
  40. salt = '" . $salt . "',
  41. user_ip = " . $u_ip . "
  42. WHERE
  43. Id = '" . $row->Id . "'
  44. ");
  45. $_SESSION['user_id'] = $row->Id;
  46. $_SESSION['user_name'] = get_username($row->user_name, $row->firstname, $row->lastname);
  47. $_SESSION['user_pass'] = $hash;
  48. $_SESSION['user_group'] = $row->user_group;
  49. $_SESSION['user_email'] = $row->email;
  50. $_SESSION['user_country'] = strtoupper($row->country);
  51. $_SESSION['user_language'] = strtolower($row->country);
  52. $_SESSION['user_ip'] = addslashes($_SERVER['REMOTE_ADDR']);
  53. $user_group_permissions = explode('|', preg_replace('/\s+/', '', $row->user_group_permission));
  54. foreach ($user_group_permissions as $user_group_permission) $_SESSION[$user_group_permission] = 1;
  55. // $_SESSION['admin_theme'] = DEFAULT_ADMIN_THEME_FOLDER;
  56. // $_SESSION['admin_language'] = DEFAULT_LANGUAGE;
  57. if ($keep_in == 1)
  58. {
  59. $expire = $time + COOKIE_LIFETIME;
  60. $auth = base64_encode( serialize( array('id'=>$row->Id, 'hash'=>$hash)));
  61. @setcookie('auth', $auth, $expire, ABS_PATH, $cookie_domain);
  62. }
  63. return true;
  64. }
  65. function user_logout()
  66. {
  67. global $cookie_domain;
  68. // ?????????? ????
  69. @setcookie('auth', '', 0, ABS_PATH, $cookie_domain);
  70. // ?????????? ??????
  71. @session_destroy();
  72. session_unset();
  73. $_SESSION = array();
  74. }
  75. function auth_sessions()
  76. {
  77. global $AVE_DB;
  78. if (empty($_SESSION['user_id']) || empty($_SESSION['user_pass'])) return false;
  79. $referer = false;
  80. if (isset($_SERVER['HTTP_REFERER']))
  81. {
  82. $referer = parse_url($_SERVER['HTTP_REFERER']);
  83. $referer = (trim($referer['host']) === $_SERVER['SERVER_NAME']);
  84. }
  85. // ???? ?? ??? REFERER ??? ????????? IP-?????
  86. // ??????? ?????? ?????? ? ??????? ???? ??????
  87. if ($referer === false || $_SESSION['user_ip'] != $_SERVER['REMOTE_ADDR'])
  88. {
  89. $verified = $AVE_DB->Query("
  90. SELECT 1
  91. FROM " . PREFIX . "_users
  92. WHERE Id = '" . (int)$_SESSION['user_id'] . "'
  93. AND password = '" . addslashes($_SESSION['user_pass']) . "'
  94. LIMIT 1
  95. ")->NumRows();
  96. if (!$verified) return false;
  97. $_SESSION['user_ip'] = addslashes($_SERVER['REMOTE_ADDR']);
  98. }
  99. define('UID', $_SESSION['user_id']);
  100. define('UGROUP', $_SESSION['user_group']);
  101. define('UNAME', $_SESSION['user_name']);
  102. return true;
  103. }
  104. function auth_cookie()
  105. {
  106. global $AVE_DB, $cookie_domain;
  107. if (empty($_COOKIE['auth'])) return false;
  108. $auth = unserialize( base64_decode($_COOKIE['auth']));
  109. if (! (isset($auth['id']) && is_numeric($auth['id'])))
  110. {
  111. // ?????????? ????
  112. @setcookie('auth', '', 0, ABS_PATH, $cookie_domain);
  113. return false;
  114. }
  115. $row = $AVE_DB->Query("
  116. SELECT
  117. usr.user_group,
  118. usr.user_name,
  119. usr.firstname,
  120. usr.lastname,
  121. usr.email,
  122. usr.country,
  123. usr.password,
  124. usr.status,
  125. INET_NTOA(usr.user_ip) AS ip,
  126. grp.user_group_permission
  127. FROM
  128. " . PREFIX . "_users AS usr
  129. LEFT JOIN
  130. " . PREFIX . "_user_groups AS grp
  131. ON grp.user_group = usr.user_group
  132. WHERE usr.Id = '" . $auth['id'] . "'
  133. LIMIT 1
  134. ")->FetchRow();
  135. if (empty($row)) return false;
  136. if ( ($row->ip !== '0.0.0.0' && $row->ip !== $_SERVER['REMOTE_ADDR']) || !($row->status === '1' && $row->password === $auth['hash']) ) return false;
  137. $_SESSION['user_id'] = (int)$auth['id'];
  138. $_SESSION['user_name'] = get_username($row->user_name, $row->firstname, $row->lastname);
  139. $_SESSION['user_pass'] = $auth['hash'];
  140. $_SESSION['user_group'] = (int)$row->user_group;
  141. $_SESSION['user_email'] = $row->email;
  142. $_SESSION['user_country'] = strtoupper($row->country);
  143. $_SESSION['user_language'] = strtolower($row->country);
  144. $_SESSION['user_ip'] = addslashes($_SERVER['REMOTE_ADDR']);
  145. $user_group_permissions = explode('|', preg_replace('/\s+/', '', $row->user_group_permission));
  146. foreach ($user_group_permissions as $user_group_permission) $_SESSION[$user_group_permission] = 1;
  147. // $_SESSION['admin_theme'] = DEFAULT_ADMIN_THEME_FOLDER;
  148. // $_SESSION['admin_language'] = DEFAULT_LANGUAGE;
  149. define('UID', $_SESSION['user_id']);
  150. define('UGROUP', $_SESSION['user_group']);
  151. define('UNAME', $_SESSION['user_name']);
  152. return true;
  153. }
  154. /**
  155. * ???????? ??????? ???????????? ?? ????? ? ?? ??????
  156. *
  157. * @param string $user_id ????????????? ????????????
  158. */
  159. function user_delete($user_id)
  160. {
  161. global $AVE_DB;
  162. $AVE_DB->Query("
  163. DELETE
  164. FROM " . PREFIX . "_users
  165. WHERE Id = '" . $user_id . "'
  166. ");
  167. $AVE_DB->Query("
  168. DELETE
  169. FROM " . PREFIX . "_modul_forum_userprofile
  170. WHERE BenutzerId = '" . $user_id . "'
  171. ");
  172. }
  173. ?>