Auth.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. class Auth {
  3. public static function check() {
  4. global $myUser;
  5. return $myUser != null;
  6. }
  7. public static function id() {
  8. global $myUser;
  9. return $myUser['username'];
  10. }
  11. public static function user() {
  12. global $myUser;
  13. return $myUser;
  14. }
  15. public static function login($username, $remember = true) {
  16. if (!validateUsername($username)) {
  17. return;
  18. }
  19. $_SESSION['username'] = $username;
  20. if ($remember) {
  21. $remember_token = DB::selectFirst("select remember_token from user_info where username = '$username'")['remember_token'];
  22. if ($remember_token == '') {
  23. $remember_token = uojRandString(60);
  24. DB::update("update user_info set remember_token = '$remember_token' where username = '$username'");
  25. }
  26. $expire = time() + 60 * 60 * 24 * 365 * 10;
  27. Cookie::safeSet('uoj_username', $username, $expire, '/', array('httponly' => true));
  28. Cookie::safeSet('uoj_remember_token', $remember_token, $expire, '/', array('httponly' => true));
  29. }
  30. }
  31. public static function logout() {
  32. unset($_SESSION['username']);
  33. unset($_SESSION['last_visited']);
  34. Cookie::safeUnset('uoj_username', '/');
  35. Cookie::safeUnset('uoj_remember_token', '/');
  36. DB::update("update user_info set remember_token = '' where username = '".Auth::id()."'");
  37. }
  38. private static function initMyUser() {
  39. global $myUser;
  40. $myUser = null;
  41. Cookie::safeCheck('uoj_username', '/');
  42. Cookie::safeCheck('uoj_remember_token', '/');
  43. if (isset($_SESSION['username'])) {
  44. if (!validateUsername($_SESSION['username'])) {
  45. return;
  46. }
  47. $myUser = queryUser($_SESSION['username']);
  48. return;
  49. }
  50. $remember_token = Cookie::safeGet('uoj_remember_token', '/');
  51. if ($remember_token != null) {
  52. $username = Cookie::safeGet('uoj_username', '/');
  53. if (!validateUsername($username)) {
  54. return;
  55. }
  56. $myUser = queryUser($username);
  57. if ($myUser['remember_token'] !== $remember_token) {
  58. $myUser = null;
  59. }
  60. return;
  61. }
  62. }
  63. public static function init() {
  64. global $myUser;
  65. Auth::initMyUser();
  66. if ($myUser) {
  67. if ($myUser['usergroup'] == 'B') {
  68. $myUser = null;
  69. }
  70. }
  71. if ($myUser) {
  72. DB::update("update user_info set remote_addr = '".DB::escape($_SERVER['REMOTE_ADDR'])."', http_x_forwarded_for = '".DB::escape($_SERVER['HTTP_X_FORWARDED_FOR'])."' where username = '".DB::escape($myUser['username'])."'");
  73. $_SESSION['last_visited'] = time();
  74. }
  75. }
  76. }