Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <?php
  2. class loginController extends mainController {
  3. function __construct() {
  4. parent::__construct();
  5. //To change for every Controller
  6. $this->viewDir = 'Login';
  7. }
  8. //Do not show the Disclaimer in this controller actions (see mainController)
  9. public function beforeRender($content=null) {
  10. return false;
  11. }
  12. public function index($args=null) {
  13. $jsRedirect = isset($args['jsRedirect']) ? $args['jsRedirect'] : '/';
  14. //Avoid to show the login form if the user is logged in
  15. if ($this->user->isLogged()) {
  16. return $this->redirect('login', 'indexLogged');
  17. }
  18. $this->view->appTitle = $this->config['settings']['app-title'];
  19. $this->view->languageList = $this->locale->getLanguageStringList();
  20. $this->view->token = $this->security->setCSRFToken();
  21. return $this->setJsonView('index', true, $jsRedirect);
  22. }
  23. public function indexLogged($args=null) {
  24. $this->view->appTitle = $this->config['settings']['app-title'];
  25. return $this->setJsonView('indexLogged');
  26. }
  27. public function access($args=null) {
  28. $data = $this->getPost('data');
  29. $hr = new HandleRequest();
  30. if ($data !== false) {
  31. $username = trim($data['username']);
  32. $passwd = trim($data['password']);
  33. $token = $data['token'];
  34. //$keep_connected = $data['keep_connected'];
  35. //if ($this->security->compareCSRFToken($token)) {
  36. //$user = $this->db->where('status', 0, '<>')->where('username', $username, 'like')->getOne('users');
  37. $user = $this->user->getValidUserData($username);
  38. if (isset($user['id'])) {
  39. if ($user['password'] == md5($passwd)) {
  40. $user = $this->user->setUserMeta($user);
  41. $this->user->logout();
  42. //Log the user (create user's session)
  43. if ($this->user->login($user)) {
  44. //Associate user id to the current session
  45. $updateSession = $this->user->setUserIdSessionField();
  46. $this->logger->logUserAccess($user, 1, 'Login');
  47. $hr->setActivityLog($this->user->getUserId(), 'USR_LOGGED_IN', ['userId'=>$this->user->getUserId()]);
  48. return $this->setRawJsonResponse('ok', null);
  49. } else {
  50. $hr->setActivityLog(0, 'USR_LOGIN_FAILED', ['username'=>$username]);
  51. $this->logger->logUserAccess($user, 0, 'User session error', ['Username'=>$username]);
  52. return $this->setJsonError(_('An error occurred creating user session. Please try again in a few minutes.'));
  53. }
  54. } else {
  55. $hr->setActivityLog(0, 'USR_LOGIN_FAILED', ['username'=>$username]);
  56. $this->logger->logUserAccess(null, 0, 'Password', ['Username'=>$username]);
  57. return $this->setJsonError(_('The Password provided is not valid.'));
  58. }
  59. } else {
  60. $hr->setActivityLog(0, 'USR_LOGIN_FAILED', ['username'=>$username]);
  61. $this->logger->logUserAccess(null, 0, 'Username', ['Username'=>$username]);
  62. return $this->setJsonError(_('The Username provided is not valid.'));
  63. }
  64. /*} else {
  65. $this->logger->logUserAccess(null, 0, 'CSRFT', ['Username'=>$username]);
  66. return $this->setJsonError(_('The provided login information are not valid.'));
  67. }*/
  68. } else {
  69. $hr->setActivityLog(0, 'USR_LOGIN_FAILED', ['username'=>$username]);
  70. $this->logger->logUserAccess(null, 0, 'POST', ['Username'=>$username]);
  71. return $this->setJsonError(_('Login information data are empty.'));
  72. }
  73. }
  74. public function autoLogin() {
  75. $token = $this->getPost('autologinToken', null);
  76. $requestID = $this->getPost('requestId', null);
  77. $expireDays = $this->config['settings']['autologin-expire-days'];
  78. $hr = new HandleRequest();
  79. $userInfo = $this->db
  80. ->where('autologin_token', $token)
  81. ->where('DATEDIFF(NOW(), autologin_expires_at)', $expireDays, '<=')
  82. ->getOne('users');
  83. if (is_array($userInfo) && !empty($userInfo)) {
  84. $user = $this->user->getValidUserData($userInfo['username']);
  85. if (is_array($user) && !empty($user)) {
  86. $user = $this->user->setUserMeta($user);
  87. $this->user->logout();
  88. if ($this->user->login($user)) {
  89. //Associate user id to the current session
  90. $updateSession = $this->user->setUserIdSessionField();
  91. $hr->setActivityLog($this->user->getUserId(), 'USR_AUTO_LOGGED_IN', ['userId'=>$this->user->getUserId()]);
  92. $this->logger->logUserAccess($user, 1, 'Login', ['Auto'=>true, 'RequestID'=>$requestID]);
  93. return $this->setRawJsonResponse('ok', null, ['RequestID'=>$requestID, 'ts'=>time()]);
  94. } else {
  95. $hr->setActivityLog(0, 'USR_AUTO_LOGIN_FAILED', ['username'=>$userInfo['username']]);
  96. $this->logger->logUserAccess($user, 0, 'Auto Login Error', ['Username'=>$username]);
  97. return $this->setRawJsonResponse('ok', null, []);
  98. }
  99. } else {
  100. $hr->setActivityLog(0, 'USR_AUTO_LOGIN_FAILED', ['username'=>'']);
  101. $this->logger->logUserAccess($user, 0, 'Auto Login Not Valid User', ['Username'=>$username, 'RequestID'=>$requestID]);
  102. return $this->setRawJsonResponse('ok', null, []);
  103. }
  104. } else {
  105. $hr->setActivityLog(0, 'USR_AUTO_LOGIN_FAILED', ['username'=>'']);
  106. $this->logger->logUserAccess($user, 0, 'Auto Login Not Valid User Info', ['Username'=>$username, 'RequestID'=>$requestID]);
  107. return $this->setRawJsonResponse('ok', null, []);
  108. }
  109. }
  110. public function permissionDenied() {
  111. //return $this->setJsonView('permissionDenied');
  112. return $this->setRawJsonResponse('err', _('Session expired or permission denied. Please try to log in again.'), [], ['button'=>'login', 'dialogType'=>'sessionExpired']);
  113. }
  114. public function changeLang() {
  115. $passedLng = $this->getPost('passedLng');
  116. if ($passedLng !== false) {
  117. $this->locale->setCurrentLanguage($passedLng);
  118. }
  119. return $this->setRawJsonResponse('ok', null);
  120. }
  121. public function logout() {
  122. $result = $this->user->logout();
  123. if ($result) {
  124. $status = 'ok';
  125. $msg = '';
  126. } else {
  127. $status = 'err';
  128. $msg = _('Logout failed. Please try again in a few minutes.');
  129. }
  130. return $this->setRawJsonResponse($status, $msg);
  131. }
  132. }