2 /* vim: set ts=4 tw=0 sw=4 noet: */
3 require_once $CFG->root
.'config.php';
4 require_once $CFG->root
. 'lib/session_handler.inc.php';
8 private $timeout = false;
12 private $header = '<!DOCTYPE html>
15 <meta charset="utf-8">
16 <link rel="stylesheet" href="css/styles.css">
18 var timeout = __TIMEOUT__;
20 <script src="__ROOT__js/timer.js"></script>
21 <script src="__ROOT__js/checkbox.js"></script>
22 <script src="__ROOT__js/forms.js"></script>
23 <title>__TITLE__</title>
25 <body><div id="container">';
26 private $footer = '</div><div id="footer"><p>Powered by <a href="https://qtadmin.datanom.net"
27 title="Goto QtAdmin homepage">QtAdmin</a>. © 2015 by Michael Rasmussen</p>
28 </div></body></html>';
29 private $heading = '<p id="time" class="time">Session timeout:
30 <span id="timer"></span></p><h1 class="h1">__TITLE__</h1>';
32 public function __construct() {
35 if (isset($CFG->log_level
)) {
36 $this->log_level
= $CFG->log_level
;
41 if (isset($CFG->log_method
)) {
42 $this->log_method
= $CFG->log_method
;
44 $this->log_level
= 'syslog';
47 $this->log("Init Utils", 4);
49 $this->log("__construct[1]: user ".var_export($this->settings
['user'], true), 3);
50 $this->startSession();
51 $this->log("__construct[2]: user ".var_export($this->settings
['user'], true), 3);
53 if (! isset($_SESSION['settings'])) {
54 $this->initSettings();
56 $this->log("__construct[3]: user ".var_export($this->settings
['user'], true), 3);
57 $this->settings
= $_SESSION['settings'];
58 $this->log("__construct[4]: user ".var_export($this->settings
['user'], true), 3);
60 if ($CFG->auth_method
== 'HTTP_AUTH') {
61 if (isset($_SERVER['PHP_AUTH_USER'])) {
62 $this->settings
['user'] = $_SERVER['PHP_AUTH_USER'];
63 $this->settings
['loginStatus'] = 'OK';
64 if ($CFG->admin_user
== $this->settings
['user'])
65 $this->settings
['admin'] = true;
70 private function log($message, $level = 1) {
73 if ($level > $this->log_level
)
80 case 1: $priority = LOG_ERR
; break;
81 case 2: $priority = LOG_WARNING
; break;
82 case 3: $priority = LOG_INFO
; break;
83 case 4: $priority = LOG_DEBUG
; break;
86 switch ($this->log_method
) {
88 if (isset($CFG->log_file
)) {
89 if ($CFG->log_file
[0] == '/') {
90 $file = $CFG->log_file
;
92 $file = $CFG->root
.$CFG->log_file
;
95 $file = $CFG->root
.'qtadmin.log';
97 file_put_contents($file, "[$time]: $message\n", FILE_APPEND | LOCK_EX
);
101 file_put_contents('php://stderr', "[$time]: $message\n");
104 syslog($priority, $message);
109 private function initSettings() {
110 $this->log("InitSettings", 4);
112 if ('' == session_id()) {
113 $this->startSession();
116 if (false !== $this->timeout
) {
117 $timeout = $this->timeout
;
122 $this->settings
= array(
125 'loginStatus' => 'Not logged in',
126 'timeout' => $timeout
129 $_SESSION['settings'] = $this->settings
;
132 private function startSession() {
135 $this->log("startSession", 4);
137 if (isset($CFG->session_timeout
)) {
138 $this->timeout
= $CFG->session_timeout
* 60;
140 $this->timeout
= 20 * 60;
143 if (ini_get('session.gc_maxlifetime') != $this->timeout
)
144 ini_set('session.gc_maxlifetime', $this->timeout
);
145 //if (ini_get('session.cookie_lifetime') != $this->timeout)
146 // ini_set('session.cookie_lifetime', $this->timeout);
147 ini_set('session.cookie_lifetime', 0);
152 private function checkSession() {
155 $this->log("checkSession", 4);
157 if ('' == session_id()) {
158 $this->startSession();
161 $time = $_SERVER['REQUEST_TIME'];
162 if (isset($_SESSION['LAST_ACTIVITY']) &&
163 ($time - $_SESSION['LAST_ACTIVITY']) >= $this->settings
['timeout']) {
164 $this->log('R_TIME: '.date('c', $time).' L_ACT: '.date('c', $_SESSION['LAST_ACTIVITY'].
165 'Test: '.($time - $_SESSION['LAST_ACTIVITY'])).' >= '.$this->settings
['timeout'], 3);
168 $_SESSION['LAST_ACTIVITY'] = $time;
172 public function logout() {
173 $this->log("logout", 4);
175 if (ini_get('session.use_cookies')) {
176 $params = session_get_cookie_params();
177 setcookie(session_name(), '', time() - 42000,
178 $params['path'], $params['domain'],
179 $params['secure'], $params['httponly']);
182 if ('' != session_id()) {
187 $this->settings
= array();
190 public function isAdmin() {
193 $this->log("isAdmin", 4);
195 if (isset($this->settings
['admin'])) {
196 $admin = $this->settings
['admin'];
202 public function login($user, $pw) {
206 $this->log("login", 4);
208 if ('' == session_id()) {
209 $this->startSession();
212 $this->settings
['user'] = null;
213 $this->settings
['admin'] = false;
215 $p = explode('@', $user);
216 if (count($p) != 2) {
217 $this->settings
['loginStatus'] = 'Bad username';
220 $dn = "mail=$user,ou=Users,domainName=$domain,$CFG->ldap_base_dn";
221 $filter = "(&(objectclass=mailUser)(accountStatus=active)(mail=$user))";
222 $ds = @ldap_connect
($CFG->ldap_dsn
);
224 @ldap_set_option
($ds, LDAP_OPT_PROTOCOL_VERSION
, 3);
225 $r = @ldap_bind
($ds, $dn, $pw);
227 $sr = @ldap_search
($ds, $CFG->ldap_base_dn
, $filter, array('mail','domainglobaladmin'));
228 $info = @ldap_get_entries
($ds, $sr); // array
229 if ($info['count'] > 0) {
230 $this->settings
['user'] = $user;
232 $this->settings
['loginStatus'] = 'OK';
234 if (isset($info[0]['domainglobaladmin'])) {
235 $admin = $info[0]['domainglobaladmin'][0];
236 $admin = strtoupper($admin);
238 $this->settings
['admin'] = ($admin == 'YES') ?
true : false;
240 $this->settings
['loginStatus'] = 'Login failed';
243 $this->settings
['loginStatus'] = ldap_error($ds);
247 $this->settings
['loginStatus'] = 'Connect to LDAP server failed';
251 $_SESSION['settings'] = $this->settings
;
256 public function getLoginStatus() {
257 $status = 'Not logged in';
259 $this->log("getLoginStatus", 4);
261 if (isset($this->settings
['loginStatus'])) {
262 $status = $this->settings
['loginStatus'];
268 public function isLoggedIn() {
272 $this->log("isLoggedIn[1]: user ".var_export($this->settings
['user'], true), 3);
274 if ('' == session_id()) {
275 $this->startSession();
278 $this->log("isLoggedIn[2]: user ".var_export($this->settings
['user'], true), 3);
279 $this->checkSession();
280 $this->log("isLoggedIn[3]: user ".var_export($this->settings
['user'], true), 3);
282 if (isset($this->settings
['user'])) {
283 if ($this->settings
['user'] != null) {
286 if ($CFG->auth_method
== 'HTTP_AUTH') {
287 if (isset($_SERVER['PHP_AUTH_USER'])) {
288 $this->settings
['user'] = $_SERVER['PHP_AUTH_USER'];
295 if ($loggedIn == false) {
296 $this->log('$this->settings: '.var_export($this->settings
, true), 3);
297 $this->log('R_TIME: '.date('c', $_SERVER['REQUEST_TIME']).' L_ACT: '.date('c', $_SESSION['LAST_ACTIVITY']), 3);
300 $_SESSION['settings'] = $this->settings
;
305 public function getUser() {
308 $this->log("getUser", 4);
310 if ($this->isLoggedIn()) {
311 $user = $this->settings
['user'];
317 public function authorized($recipient) {
320 $this->log("authorized '$recipient'", 3);
322 if ($this->isAdmin() ||
$this->getUser() == $recipient) {
325 $msg = ($authorized) ?
'authorize' : 'not authorize';
326 $this->log("$msg '".$this->getUser()."' rcpt '$recipient'", 3);
331 public function getHeader() {
332 $this->log("getHeader", 4);
334 return $this->header
;
337 public function getFooter() {
338 $this->log("getFooter", 4);
340 return $this->footer
;
343 public function getHeading() {
344 $this->log("getHeading", 4);
346 return $this->heading
;
349 public function setHeading($heading) {
352 $this->log("setHeading", 4);
354 $timeout = $CFG->session_timeout
* 60 * 1000;
355 $this->heading
= str_replace('__TITLE__', $heading, $this->heading
);
356 $this->header
= str_replace('__TITLE__', $heading, $this->header
);
357 $this->header
= str_replace('__ROOT__', $CFG->wwwroot
, $this->header
);
358 $this->header
= str_replace('__TIMEOUT__', $timeout, $this->header
);
361 public function convertContent($code) {
362 $this->log("convertContent", 4);
377 $string = $table[$code];