/**
  * @param array $record         
  * @return array
  */
 public function __invoke(array $record)
 {
     // Real IP
     if (!empty($this->serverData['HTTP_CLIENT_IP'])) {
         // check ip from share internet
         $ipAddress = $this->serverData['HTTP_CLIENT_IP'];
     } elseif (!empty($this->serverData['HTTP_X_FORWARDED_FOR'])) {
         // to check ip is pass from proxy
         $ipAddress = $this->serverData['HTTP_X_FORWARDED_FOR'];
     } elseif (!empty($this->serverData['REMOTE_ADDR'])) {
         $ipAddress = $this->serverData['REMOTE_ADDR'];
     } else {
         $ipAddress = null;
     }
     $record['extra'] = array_merge($record['extra'], array('realIp' => $ipAddress));
     $session = Session::instance();
     if (!empty($session)) {
         $record['extra'] = array_merge($record['extra'], array('sessionId' => $session->getSessionId()));
         $credentials = $session->getCredentials()->getData();
         if (!empty($credentials)) {
             $record['extra'] = array_merge($record['extra'], array('credentials' => $credentials));
         }
     }
     return $record;
 }
 /**
  * Returns the user record associated with a remember me cookie
  *
  * @return array
  * @throws \Exception
  */
 protected function getRememberMe()
 {
     $cookie = Session::instance()->getRememberMeCookie();
     $rawData = $cookie->getValue();
     $user = null;
     if (empty($rawData)) {
         goto end;
     }
     if (strlen($rawData) < 64) {
         goto cleanup;
     }
     $data = unserialize(Crypto::decrypt($rawData));
     if (!$data) {
         goto cleanup;
     }
     if (!isset($data['expires']) or !isset($data['userId'])) {
         goto cleanup;
     }
     $expires = Date::getDateTime($data['expires']);
     if ($expires <= Date::getDateTime()) {
         goto cleanup;
     }
     $user = UserService::instance()->getUserById(intval($data['userId']));
     goto end;
     cleanup:
     $cookie->clearCookie();
     end:
     return $user;
 }
 /**
  * Flag a user session for update
  * @param int $userId
  */
 public function flagUserForUpdate($userId)
 {
     $user = UserService::instance()->getUserById($userId);
     $credentials = $this->getUserCredentials($user, 'session');
     if (Session::instance() != null && Session::getCredentials()->getUserId() == $userId) {
         // Update the current session if the userId is the same as the credential user id
         Session::updateCredentials($credentials);
         // Init / create the current users chat session
         ChatIntegrationService::instance()->setChatSession($credentials, Session::getSessionId());
     } else {
         // Otherwise set a session variable which is picked up by the remember me service to update the session
         $cache = Application::instance()->getCacheDriver();
         $cache->save(sprintf('refreshusersession-%s', $userId), time(), intval(ini_get('session.gc_maxlifetime')));
     }
     ChatIntegrationService::instance()->refreshChatUserSession($credentials);
 }
 /**
  * Returns the remember me record for the current cookie
  *
  * @return array
  */
 protected function getRememberMe()
 {
     $rememberMeService = RememberMeService::instance();
     $cookie = Session::instance()->getRememberMeCookie();
     $token = $cookie->getValue();
     $rememberMe = null;
     // throw back to when I used a json string in the rememberme cookie
     // this is here so no-ones remember me cookie failed after upgrade.
     if (!empty($token) && $token[0] == "{") {
         $cookieData = @json_decode($token, true);
         if (!empty($cookieData) && isset($cookieData['token'])) {
             $token = $cookieData['token'];
         }
     }
     // If the token is not empty query the DB for the remember me record
     if (!empty($token)) {
         $rememberMe = $rememberMeService->getRememberMe($token, 'rememberme');
     }
     return $rememberMe;
 }