ApiUser.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. Lib::loadClass('User');
  3. Lib::loadClass('LDAP');
  4. class ApiUser {
  5. public $_user;
  6. public function auth() {
  7. // session is closed by session_write_close - readonly
  8. if (User::logged()) {
  9. $this->_user = User::getCurrentUserObject();
  10. }
  11. else {
  12. $login = V::get('PHP_AUTH_USER', '', $_SERVER);
  13. $pass = V::get('PHP_AUTH_PW', '', $_SERVER);
  14. if (!$login) {
  15. $this->exitUnauthorized();
  16. }
  17. try {
  18. $ldap = LDAP::getInstance();
  19. if ($ldap != null && $ldap->isConnected()) {
  20. $this->_user = User::loginByLDAP($login, $pass);
  21. } else {
  22. $this->_user = User::loginByDB($login, $pass);
  23. }
  24. } catch (Exception $e) {
  25. $this->exitUnauthorized();
  26. }
  27. if (!$this->_user) {
  28. $this->exitUnauthorized();
  29. }
  30. $this->_saveToSession();
  31. }
  32. }
  33. private function _saveToSession() {
  34. session_start();
  35. $_SESSION['ADM_ID'] = $this->_user->ID;
  36. $_SESSION['AUTHORIZE_USER'] = $this->_user->ADM_ACCOUNT;
  37. $_SESSION['ADM_ACCOUNT'] = $this->_user->ADM_ACCOUNT;
  38. //$_SESSION['ADM_AREA'] = $this->_user->ADM_AREA;
  39. $_SESSION['ADM_NAME'] = $this->_user->ADM_NAME;
  40. $_SESSION['ADM_TECH_WORKER'] = $this->_user->ADM_TECH_WORKER;
  41. $_SESSION['ADM_COMPANY'] = $this->_user->ADM_COMPANY;
  42. $_SESSION['ADM_ADMIN_LEVEL'] = $this->_user->ADM_ADMIN_LEVEL;
  43. $_SESSION['ADM_PHONE'] = $this->_user->ADM_PHONE;
  44. $_SESSION['ADM_ADMIN_EXPIRE'] = $this->_user->ADM_ADMIN_EXPIRE;
  45. $_SESSION['ADM_ADMIN_DESC'] = $this->_user->ADM_ADMIN_DESC;
  46. $_SESSION['EMPLOYEE_TYPE'] = $this->_user->EMPLOYEE_TYPE;
  47. // save user pass in encrypted form
  48. //Lib::loadClass('Crypt');
  49. //$_SESSION['ADM_PASS_HASH'] = Crypt::encrypt($pass);
  50. //$_SESSION['EMAIL_IMAP_IMPORT_PASSWD_HASH'] = Crypt::encrypt($this->_user->EMAIL_IMAP_IMPORT_PASSWD);
  51. //$_SESSION['EMAIL_IMAP_IMPORT_HOST'] = $this->_user->EMAIL_IMAP_IMPORT_HOST;
  52. //$_SESSION['EMAIL_IMAP_IMPORT_USERNAME'] = $this->_user->EMAIL_IMAP_IMPORT_USERNAME;
  53. session_write_close();
  54. }
  55. public function logout() {
  56. session_start();
  57. $_SESSION = array();
  58. session_destroy();
  59. session_write_close();
  60. header('WWW-Authenticate: Basic realm="API"');
  61. header('HTTP/1.0 401 Unauthorized');
  62. $apiUrl = "https://{$_SERVER['HTTP_HOST']}{$_SERVER['SCRIPT_NAME']}";
  63. // $_SERVER[HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  64. $httpAccept = V::get('HTTP_ACCEPT', '', $_SERVER);
  65. if (false !== strpos($httpAccept, 'text/html')) {
  66. ?><!DOCTYPE html>
  67. <html>
  68. <head>
  69. <meta http-equiv="refresh" content="0; url=<?php echo $apiUrl; ?>" />
  70. </head>
  71. <body>
  72. Unauthorized - Go to <a href="<?php echo $apiUrl; ?>"><?php echo $apiUrl; ?></a>
  73. </body>
  74. </html>
  75. <?php
  76. } else {
  77. echo "Unauthorized - Go to {$apiUrl}";
  78. }
  79. exit;
  80. }
  81. public function exitUnauthorized() {
  82. header('WWW-Authenticate: Basic realm="API"');
  83. header('HTTP/1.0 401 Unauthorized');
  84. echo 'Unauthorized';
  85. exit;
  86. }
  87. public function isAdmin() {
  88. if (isset($this->_user->ADM_ADMIN_LEVEL) && in_array($this->_user->ADM_ADMIN_LEVEL, array(0, 1))) {
  89. return true;
  90. }
  91. return false;
  92. }
  93. public function getID() {
  94. return $this->_user->ID;
  95. }
  96. }