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

/classes/bors/user/flat.php

https://bitbucket.org/Balancer/bors-core
PHP | 129 lines | 105 code | 24 blank | 0 comment | 17 complexity | a7a8e6409cdc0b61b4d433cccd5d7b02 MD5 | raw file
Possible License(s): LGPL-2.1, GPL-3.0
  1. <?php
  2. class bors_user_flat extends bors_user_base
  3. {
  4. function title() { return $this->data('user_name'); }
  5. function can_be_empty() { return false; }
  6. function is_loaded() { return (bool) $this->cookie_hash(); }
  7. function _read_only() { return true; }
  8. static function _user_id_cookie_name() { return 'bors_user_flat_id'; }
  9. static function _user_hash_cookie_name() { return 'bors_user_flat_hash'; }
  10. static function id_prepare($id)
  11. {
  12. if($id == -1)
  13. {
  14. $me = self::id_by_cookie();
  15. return $me ? $me->id() : NULL;
  16. }
  17. return $id;
  18. }
  19. static $users_data = NULL;
  20. static function _load_users_data()
  21. {
  22. if(!is_null(self::$users_data))
  23. return self::$users_data;
  24. $users_data = array();
  25. if(!config('user_flat_base'))
  26. bors_throw(ec("Не задана переменная конфигурации config('user_flat_base')"));
  27. if(!file_exists(config('user_flat_base')))
  28. bors_throw(ec("Не существует файт ".config('user_flat_base')));
  29. foreach(file(config('user_flat_base')) as $x)
  30. if(preg_match('!^(\d+)::([^:]+)::([\da-fA-F]+)::([^:]+)::(\d+)$!', chop($x), $m))
  31. self::$users_data[$m[1]] = array(
  32. 'login' => $m[2],
  33. 'md5_password' => $m[3],
  34. 'user_name' => $m[4],
  35. 'access_level' => $m[5],
  36. 'user_hash' => md5($m[2].':'.$m[3]),
  37. );
  38. return self::$users_data;
  39. }
  40. static function id_by_cookie($cookie_hash = NULL)
  41. {
  42. if(is_null($cookie_hash))
  43. $cookie_hash = @$_COOKIE[self::_user_hash_cookie_name()];
  44. if(!$cookie_hash)
  45. return false;
  46. foreach(self::_load_users_data() as $test_user_id => $x)
  47. if($cookie_hash == $x['user_hash'])
  48. return self::_user_object($test_user_id);
  49. return false;
  50. }
  51. static function do_login($login, $password)
  52. {
  53. $md5_password = md5($password);
  54. foreach(self::_load_users_data() as $test_user_id => $x)
  55. {
  56. if($login == $x['login'] && $x['md5_password'] == $md5_password)
  57. return self::_user_object($test_user_id, true);
  58. }
  59. return false;
  60. }
  61. static function do_logout()
  62. {
  63. foreach(array(self::_user_id_cookie_name(), self::_user_hash_cookie_name(), 'is_admin') as $k)
  64. {
  65. SetCookie($k, NULL, 0, "/", '.'.$_SERVER['HTTP_HOST']);
  66. SetCookie($k, NULL, 0, "/", $_SERVER['HTTP_HOST']);
  67. SetCookie($k, NULL, 0, "/");
  68. }
  69. }
  70. static function _user_object($user_id, $update_cookie = false)
  71. {
  72. $user = new bors_user($user_id);
  73. if($update_cookie)
  74. $user->cookie_hash_set();
  75. return $user;
  76. }
  77. function cookie_hash()
  78. {
  79. $ud = self::_load_users_data();
  80. return @$ud[$this->id()]['user_hash'];
  81. }
  82. function cookie_hash_set($expired = -1)
  83. {
  84. if($expired == -1)
  85. $expired = time()+86400*365;
  86. foreach(array(
  87. self::_user_id_cookie_name() => $this->id(),
  88. self::_user_hash_cookie_name() => $this->cookie_hash(),
  89. 'is_admin' => $this->is_admin()
  90. ) as $k => $v)
  91. {
  92. SetCookie($k, $v, $expired, "/", '.'.$_SERVER['HTTP_HOST']);
  93. SetCookie($k, $v, $expired, "/", $_SERVER['HTTP_HOST']);
  94. SetCookie($k, $v, $expired, "/");
  95. }
  96. }
  97. private function data($key)
  98. {
  99. $ud = $this->_load_users_data();
  100. return @$ud[$this->id()][$key];
  101. }
  102. function is_admin() { return $this->data('access_level') > 2; }
  103. function is_coordinator() { return $this->is_admin(); }
  104. function can_edit_object($object) { return $this->data('access_level') > 2; }
  105. }