示例#1
0
 /**
  * static public function for load user from session
  * @param string $prefix optional prefix for session publiciables
  * @return mixed DoceboUser instance of logged in user if found user in session
  *				 FALSE otherwise
  **/
 public static function &createDoceboUserFromSession($prefix = 'base')
 {
     if (!isset($_SESSION['user_enter_time'])) {
         $_SESSION['user_enter_time'] = date('Y-m-d H:i:s');
     }
     if (isset($_SESSION[$prefix . '_username'])) {
         $du = new DoceboUser($_SESSION[$prefix . '_username'], $prefix);
         if (isset($_SESSION['user_enter_mark'])) {
             if ($_SESSION['user_enter_mark'] < time() - REFRESH_LAST_ENTER) {
                 $du->setLastEnter(date("Y-m-d H:i:s"));
                 $_SESSION['user_enter_mark'] = time();
             }
         } else {
             $du->setLastEnter(date("Y-m-d H:i:s"));
             $_SESSION['user_enter_mark'] = time();
         }
         return $du;
     } else {
         // rest auth
         if (Get::sett('use_rest_api') != 'off') {
             require_once _base_ . '/api/lib/lib.rest.php';
             if (Get::sett('rest_auth_method') == _REST_AUTH_TOKEN) {
                 //require_once(_base_.'/lib/lib.utils.php');
                 $token = Get::req('auth', DOTY_ALPHANUM, '');
                 if ($token) {
                     $id_user = RestAPI::getUserIdByToken($token);
                     if ($id_user) {
                         $user_manager = new DoceboACLManager();
                         $user_info = $user_manager->getUser($id_user, false);
                         if ($user_info != false) {
                             $username = $user_info[ACL_INFO_USERID];
                             $du = new DoceboUser($username, $prefix);
                             $_SESSION['last_enter'] = $user_info[ACL_INFO_LASTENTER];
                             $du->setLastEnter(date("Y-m-d H:i:s"));
                             $_SESSION['user_enter_mark'] = time();
                             $du->loadUserSectionST();
                             $du->SaveInSession();
                             return $du;
                         }
                     }
                 }
             }
         }
         // kerberos and similar auth
         if (Get::sett('auth_kerberos') == 'on') {
             if (isset($_SERVER['REMOTE_USER'])) {
                 // extract username
                 $username = addslashes(substr($_SERVER['REMOTE_USER'], 0, strpos($_SERVER['REMOTE_USER'], '@')));
                 $user_manager = new DoceboACLManager();
                 $user_info = $user_manager->getUser(false, $username);
                 if ($user_info != false) {
                     $du = new DoceboUser($username, $prefix);
                     $du->setLastEnter(date("Y-m-d H:i:s"));
                     $_SESSION['user_enter_mark'] = time();
                     $du->loadUserSectionST();
                     $du->SaveInSession();
                     return $du;
                 }
             }
         }
         $du = new DoceboUser('/Anonymous', $prefix);
         return $du;
     }
 }