- private $footer = '<p class="footer">Powered by <a href="https://qtadmin.datanom.net">
- QtAdmin</a>. © 2015 by Michael Rasmussen</p></body></html>';
- private $heading = '<p id="time" class="time">Session timeout:
- <span id="timer"></span></p><h1 class="h1">__TITLE__</h1>';
-
- private function __construct() {
- global $CFG;
-
- $this->server = $_SERVER;
- session_start();
-
- $this->user = null;
- $this->is_admin = false;
- $this->loginStatus = 'Not logged in';
-
- if (isset($_SESSION['user'])) {
- $this->user = $_SESSION['user'];
- $this->loginStatus = 'OK';
- $this->is_admin = $_SESSION['is_admin'];
- } else {
- if ($CFG->auth_method == 'HTTP_AUTH') {
- if (isset($this->server['PHP_AUTH_USER'])) {
- $this->user = $this->server['PHP_AUTH_USER'];
- $this->loginStatus = 'OK';
- if ($CFG->admin_user == $this->user)
- $this->is_admin = true;
- }
- }
- }
- $_SESSION['user'] = $this->user;
- $_SESSION['is_admin'] = $this->is_admin;
- }
-
- private function __clone() {}
-
- public static function getInstance() {
- global $CFG;
-
- if (!is_object(self::$_instance)) {
- self::$_instance = new Utils();
- }
- // Session timeout handler
- if ('' == session_id())
- session_start();
- if (isset($CFG->session_timeout)) {
- $timeout = $CFG->session_timeout * 60;
- } else {
- $timeout = 20 * 60;
- }
-
- if (ini_get('session.gc_maxlifetime') != $timeout)
- ini_set('session.gc_maxlifetime', $timeout);
- if (ini_get('session.cookie_lifetime') != $timeout)
- ini_set('session.cookie_lifetime', $timeout);
- $time = $_SERVER['REQUEST_TIME'];
- if (isset($_SESSION['LAST_ACTIVITY']) && ($time - $_SESSION['LAST_ACTIVITY']) >= $timeout) {
- session_unset();
- session_destroy();
- session_start();
- self::$_instance->user = null;
- self::$_instance->is_admin = false;
- }
- $_SESSION['LAST_ACTIVITY'] = $time;
-
- return self::$_instance;
- }
-
- public function logout() {
- $_SESSION = array();
- if (ini_get('session.use_cookies')) {
- $params = session_get_cookie_params();
- setcookie(session_name(), '', time() - 42000,
- $params['path'], $params['domain'],
- $params['secure'], $params['httponly']);
- }
- session_unset();
- session_destroy();
- $this->user = null;
- $this->is_admin = false;
- }
-
- public function isAdmin() {
- //file_put_contents('/tmp/login.txt', var_export($this, true));
- return $this->is_admin;
- }
-
- public function login($user, $pw) {
- global $CFG;
- $result = false;
-
- unset($_SESSION['user']);
- unset($_SESSION['is_admin']);
- $this->user = null;
- $this->is_admin = false;
-
- $p = explode('@', $user);
- if (count($p) != 2) {
- $this->loginStatus = 'Bad username';
- return false;
- }
- $domain = $p[1];
- $dn = "mail=$user,ou=Users,domainName=$domain,$CFG->ldap_base_dn";
+ private $footer = '<p class="footer">Powered by <a href="https://qtadmin.datanom.net"
+ title="Goto QtAdmin homepage">QtAdmin</a>. © 2015 by Michael Rasmussen</p></body></html>';
+ private $heading = '<p id="time" class="time">Session timeout:
+ <span id="timer"></span></p><h1 class="h1">__TITLE__</h1>';
+
+ private function __construct() {
+ global $CFG;
+
+ $this->server = $_SERVER;
+
+ $this->user = null;
+ $this->is_admin = false;
+ $this->loginStatus = 'Not logged in';
+
+ $this->startSession();
+
+ if (isset($_SESSION['user'])) {
+ $this->user = $_SESSION['user'];
+ $this->loginStatus = 'OK';
+ $this->is_admin = $_SESSION['is_admin'];
+ } else {
+ if ($CFG->auth_method == 'HTTP_AUTH') {
+ if (isset($this->server['PHP_AUTH_USER'])) {
+ $this->user = $this->server['PHP_AUTH_USER'];
+ $this->loginStatus = 'OK';
+ if ($CFG->admin_user == $this->user)
+ $this->is_admin = true;
+ }
+ }
+ }
+ $_SESSION['user'] = $this->user;
+ $_SESSION['is_admin'] = $this->is_admin;
+ $_SESSION['Utils'] = serialize($this);
+ }
+
+ private function __clone() {}
+
+ public function serialize() {
+ file_put_contents('/tmp/dump', 'Serialize called: '.var_export($this, true), FILE_APPEND);
+ return serialize(get_object_vars($this));
+ }
+
+ public function unserialize($data) {
+ $values = unserialize($data);
+ foreach ($values as $key=>$value) {
+ $this->$key = $value;
+ }
+ }
+
+ private function startSession() {
+ global $CFG;
+
+ if (isset($CFG->session_timeout)) {
+ $this->timeout = $CFG->session_timeout * 60;
+ } else {
+ $this->timeout = 20 * 60;
+ }
+
+ if (ini_get('session.gc_maxlifetime') != $this->timeout)
+ ini_set('session.gc_maxlifetime', $this->timeout);
+ if (ini_get('session.cookie_lifetime') != $this->timeout)
+ ini_set('session.cookie_lifetime', $this->timeout);
+
+ session_start();
+
+ //echo ini_get('session.gc_maxlifetime').':'.ini_get('session.cookie_lifetime');
+ }
+
+ public static function getInstance() {
+ global $CFG;
+
+ if (!is_object(self::$_instance)) {
+ if (isset($_SESSION['Utils'])) {
+ self::$_instance = unserialize($_SESSION['Utils']);
+ file_put_contents('/tmp/dump', 'Unserialize called: '.var_export($this, true), FILE_APPEND);
+ } else {
+ self::$_instance = new Utils();
+ }
+ }
+
+ $time = $_SERVER['REQUEST_TIME'];
+ if (isset($_SESSION['LAST_ACTIVITY']) &&
+ ($time - $_SESSION['LAST_ACTIVITY']) >= self::$_instance->timeout) {
+ echo 'R_TIME: '.date('c', $time).' L_ACT: '.date('c', $_SESSION['LAST_ACTIVITY']);
+ exit;
+ session_unset();
+ session_destroy();
+ self::$_instance = null;
+ self::$_instance->is_admin = false;
+ $_SESSION['Utils'] = serialize(self::$_instance);
+ } else {
+ $_SESSION['LAST_ACTIVITY'] = $time;
+ }
+
+ return self::$_instance;
+ }
+
+ public function logout() {
+ $_SESSION = array();
+ if (ini_get('session.use_cookies')) {
+ $params = session_get_cookie_params();
+ setcookie(session_name(), '', time() - 42000,
+ $params['path'], $params['domain'],
+ $params['secure'], $params['httponly']);
+ }
+ session_unset();
+ session_destroy();
+ $this->user = null;
+ $this->is_admin = false;
+ }
+
+ public function isAdmin() {
+ //file_put_contents('/tmp/login.txt', var_export($this, true));
+ return $this->is_admin;
+ }
+
+ public function login($user, $pw) {
+ global $CFG;
+ $result = false;
+
+ unset($_SESSION['user']);
+ unset($_SESSION['is_admin']);
+ $this->user = null;
+ $this->is_admin = false;
+
+ $p = explode('@', $user);
+ if (count($p) != 2) {
+ $this->loginStatus = 'Bad username';
+ return false;
+ }
+ $domain = $p[1];
+ $dn = "mail=$user,ou=Users,domainName=$domain,$CFG->ldap_base_dn";