ApiUser.php 2.9 KB

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