X-Git-Url: http://git.datanom.net/qtadmin.git/blobdiff_plain/6847a881d01d63ac2394efd6f07bc315e8f5a01f..339bfa22e495946c5a9a34e6f169186f148be728:/lib/utils.inc.php
diff --git a/lib/utils.inc.php b/lib/utils.inc.php
index c90b98b..fadc397 100644
--- a/lib/utils.inc.php
+++ b/lib/utils.inc.php
@@ -2,14 +2,9 @@
/* vim: set ts=4 tw=0 sw=4 noet: */
require_once $CFG->root .'config.php';
-class Utils implements Serializable {
-
- private static $_instance = null;
- private $server;
- private $user;
- private $is_admin;
- private $loginStatus;
- private $timeout;
+class Utils {
+
+ private $settings;
private $header = '
@@ -28,208 +23,208 @@ class Utils implements Serializable {
private $heading = 'Session timeout:
__TITLE__
';
- private function __construct() {
+ public 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;
- }
+ if (! isset($_SESSION['settings'])) {
+ $this->initSettings();
+ }
+ $this->settings = $_SESSION['settings'];
+
+ if ($CFG->auth_method == 'HTTP_AUTH') {
+ if (isset($this->server['PHP_AUTH_USER'])) {
+ $this->settings['user'] = $this->server['PHP_AUTH_USER'];
+ $this->settings['loginStatus'] = 'OK';
+ if ($CFG->admin_user == $this->settings['user'])
+ $this->settings['admin'] = true;
}
}
- $_SESSION['user'] = $this->user;
- $_SESSION['is_admin'] = $this->is_admin;
- $_SESSION['Utils'] = serialize($this);
}
- private function __clone() {}
+ private function initSettings() {
+ if ('' == session_id()) {
+ $this->startSession();
+ }
- public function serialize() {
- file_put_contents('/tmp/dump', 'Serialize called: '.var_export($this, true), FILE_APPEND);
- return serialize(get_object_vars($this));
- }
+ $this->settings = array(
+ 'server' => $_SERVER,
+ 'user' => null,
+ 'admin' => false,
+ 'loginStatus' => 'Not logged in',
+ 'timeout' => 0
+ );
- public function unserialize($data) {
- $values = unserialize($data);
- foreach ($values as $key=>$value) {
- $this->$key = $value;
- }
+ $_SESSION['settings'] = $this->settings;
}
private function startSession() {
global $CFG;
- session_unset();
- session_destroy();
if (isset($CFG->session_timeout)) {
- $this->timeout = $CFG->session_timeout * 60;
+ $this->settings['timeout'] = $CFG->session_timeout * 60;
} else {
- $this->timeout = 20 * 60;
+ $this->settings['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);
+ if (ini_get('session.gc_maxlifetime') != $this->settings['timeout'])
+ ini_set('session.gc_maxlifetime', $this->settings['timeout']);
+ if (ini_get('session.cookie_lifetime') != $this->settings['timeout'])
+ ini_set('session.cookie_lifetime', $this->settings['timeout']);
- session_start();
+ $_SESSION['settings'] = $this->settings;
- //echo ini_get('session.gc_maxlifetime').':'.ini_get('session.cookie_lifetime');
+ session_start();
}
- public static function getInstance() {
+ private function checkSession() {
global $CFG;
- session_start();
- if (!is_object(self::$_instance)) {
- if (isset($_SESSION['Utils'])) {
- self::$_instance = unserialize($_SESSION['Utils']);
- file_put_contents('/tmp/dump', 'Unserialize called: '.var_export(self::$_instance, true), FILE_APPEND);
- } else {
- self::$_instance = new Utils();
- }
+ if ('' == session_id()) {
+ $this->startSession();
}
$time = $_SERVER['REQUEST_TIME'];
if (isset($_SESSION['LAST_ACTIVITY']) &&
- ($time - $_SESSION['LAST_ACTIVITY']) >= self::$_instance->timeout) {
+ ($time - $_SESSION['LAST_ACTIVITY']) >= $this->settings['timeout']) {
echo 'R_TIME: '.date('c', $time).' L_ACT: '.date('c', $_SESSION['LAST_ACTIVITY']);
- exit;
- session_unset();
- session_destroy();
- self::$_instance->user = null;
- self::$_instance->is_admin = false;
- $_SESSION['Utils'] = serialize(self::$_instance);
+ $this->logout();
} 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;
+
+ if ('' != session_id()) {
+ $_SESSION = array();
+ session_unset();
+ session_destroy();
+ }
+ $this->settings = array();
}
public function isAdmin() {
- //file_put_contents('/tmp/login.txt', var_export($this, true));
- return $this->is_admin;
+ $admin = false;
+
+ if (isset($this->settings['admin'])) {
+ $admin = $this->settings['admin'];
+ }
+
+ return $admin;
}
public function login($user, $pw) {
global $CFG;
$result = false;
- unset($_SESSION['user']);
- unset($_SESSION['is_admin']);
- $this->user = null;
- $this->is_admin = false;
+ if ('' == session_id()) {
+ $this->startSession();
+ }
+
+ $this->settings['user'] = null;
+ $this->settings['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";
- $filter = "(&(objectclass=mailUser)(accountStatus=active)(mail=$user))";
- $ds = @ldap_connect($CFG->ldap_dsn);
- if ($ds) {
- @ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
- $r = @ldap_bind($ds, $dn, $pw);
- if ($r) {
- $sr = @ldap_search($ds, $CFG->ldap_base_dn, $filter, array('mail','domainglobaladmin'));
- $info = @ldap_get_entries($ds, $sr); // array
- if ($info['count'] > 0) {
- $_SESSION['user'] = $user;
- $this->user = $user;
- $result = true;
- $this->loginStatus = 'OK';
- $admin = 'NO';
- if (isset($info[0]['domainglobaladmin'])) {
- $admin = $info[0]['domainglobaladmin'][0];
- $admin = strtoupper($admin);
+ $this->settings['loginStatus'] = 'Bad username';
+ } else {
+ $domain = $p[1];
+ $dn = "mail=$user,ou=Users,domainName=$domain,$CFG->ldap_base_dn";
+ $filter = "(&(objectclass=mailUser)(accountStatus=active)(mail=$user))";
+ $ds = @ldap_connect($CFG->ldap_dsn);
+ if ($ds) {
+ @ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
+ $r = @ldap_bind($ds, $dn, $pw);
+ if ($r) {
+ $sr = @ldap_search($ds, $CFG->ldap_base_dn, $filter, array('mail','domainglobaladmin'));
+ $info = @ldap_get_entries($ds, $sr); // array
+ if ($info['count'] > 0) {
+ $this->settings['user'] = $user;
+ $result = true;
+ $this->settings['loginStatus'] = 'OK';
+ $admin = 'NO';
+ if (isset($info[0]['domainglobaladmin'])) {
+ $admin = $info[0]['domainglobaladmin'][0];
+ $admin = strtoupper($admin);
+ }
+ $this->settings['admin'] = ($admin == 'YES') ? true : false;
+ } else {
+ $this->settings['loginStatus'] = 'Login failed';
}
- $this->is_admin = ($admin == 'YES') ? true : false;
- $_SESSION['is_admin'] = $this->is_admin;
} else {
- $this->loginStatus = 'Login failed';
+ $this->settings['loginStatus'] = ldap_error($ds);
}
+ @ldap_close($ds);
} else {
- $this->loginStatus = ldap_error($ds);
+ $this->settings['loginStatus'] = 'Connect to LDAP server failed';
}
- @ldap_close($ds);
- } else {
- $this->loginStatus = 'Connect to LDAP server failed';
}
- $_SESSION['Utils'] = serialize($this);
+ $_SESSION['settings'] = $this->settings;
return $result;
}
public function getLoginStatus() {
- return $this->loginStatus;
+ $status = 'Not logged in';
+
+ if (isset($this->settings['loginStatus'])) {
+ $status = $this->settings['loginStatus'];
+ }
+
+ return $status;
}
public function isLoggedIn() {
global $CFG;
$loggedIn = false;
- if ($this->user) {
- $loggedIn = true;
- } else if (isset($_SESSION['user'])) {
- $this->user = $_SESSION['user'];
- $loggedIn = true;
- } else {
- if ($CFG->auth_method == 'HTTP_AUTH') {
- if (isset($this->server['PHP_AUTH_USER'])) {
- $this->user = $this->server['PHP_AUTH_USER'];
- $loggedIn = true;
+ if ('' == session_id()) {
+ $this->startSession();
+ }
+
+ $this->checkSession();
+
+ if (isset($this->settings['user'])) {
+ if ($this->settings['user'] != null) {
+ $loggedIn = true;
+ } else {
+ if ($CFG->auth_method == 'HTTP_AUTH') {
+ if (isset($this->server['PHP_AUTH_USER'])) {
+ $this->settings['user'] = $this->server['PHP_AUTH_USER'];
+ $loggedIn = true;
+ }
}
}
}
if ($loggedIn == false) {
- echo '$this->user: '.$this->user.' $_SESSION[\'user\']: '.$_SESSION['user'];
+ echo '$this->settings: '.var_export($this->settings, true);
echo 'R_TIME: '.date('c', $_SERVER['REQUEST_TIME']).' L_ACT: '.date('c', $_SESSION['LAST_ACTIVITY']);
- exit;
+ //exit;
}
- $_SESSION['Utils'] = serialize($this);
+ $_SESSION['settings'] = $this->settings;
return $loggedIn;
}
public function getUser() {
- $this->isLoggedIn();
- return $this->user;
+ $user = null;
+
+ if ($this->isLoggedIn()) {
+ $user = $this->settings['user'];
+ }
+
+ return $user;
}
public function getHeader() {
@@ -252,8 +247,6 @@ class Utils implements Serializable {
$this->header = str_replace('__TITLE__', $heading, $this->header);
$this->header = str_replace('__ROOT__', $CFG->wwwroot, $this->header);
$this->header = str_replace('__TIMEOUT__', $timeout, $this->header);
-
- $_SESSION['Utils'] = serialize($this);
}
public function convertContent($code) {