]> git.datanom.net - qtadmin.git/blob - lib/utils.inc.php
Drop singleton
[qtadmin.git] / lib / utils.inc.php
1 <?php
2 /* vim: set ts=4 tw=0 sw=4 noet: */
3 require_once $CFG->root .'config.php';
4
5 class Utils {
6
7 private $settings;
8 private $header = '<!DOCTYPE html>
9 <html>
10 <head>
11 <meta charset="utf-8">
12 <link rel="stylesheet" href="css/styles.css">
13 <script>
14 var timeout = __TIMEOUT__;
15 </script>
16 <script src="__ROOT__js/timer.js"></script>
17 <script src="__ROOT__js/checkbox.js"></script>
18 <title>__TITLE__</title>
19 </head>
20 <body>';
21 private $footer = '<p class="footer">Powered by <a href="https://qtadmin.datanom.net"
22 title="Goto QtAdmin homepage">QtAdmin</a>. &copy; 2015 by Michael Rasmussen</p></body></html>';
23 private $heading = '<p id="time" class="time">Session timeout:
24 <span id="timer"></span></p><h1 class="h1">__TITLE__</h1>';
25
26 public function __construct() {
27 global $CFG;
28
29 $this->startSession();
30
31 if (! isset($_SESSION['settings'])) {
32 $this->initSettings();
33 }
34 $this->settings = $_SESSION['settings'];
35
36 if ($CFG->auth_method == 'HTTP_AUTH') {
37 if (isset($this->server['PHP_AUTH_USER'])) {
38 $this->settings['user'] = $this->server['PHP_AUTH_USER'];
39 $this->settings['loginStatus'] = 'OK';
40 if ($CFG->admin_user == $this->settings['user'])
41 $this->settings['admin'] = true;
42 }
43 }
44 }
45
46 private function initSettings() {
47 if ('' == session_id()) {
48 $this->startSession();
49 }
50
51 $this->settings = array(
52 'server' => $_SERVER,
53 'user' => null,
54 'admin' => false,
55 'loginStatus' => 'Not logged in',
56 'timeout' => 0
57 );
58
59 $_SESSION['settings'] = $this->settings;
60 }
61
62 private function startSession() {
63 global $CFG;
64
65 if (isset($CFG->session_timeout)) {
66 $this->timeout = $CFG->session_timeout * 60;
67 } else {
68 $this->timeout = 20 * 60;
69 }
70
71 if (ini_get('session.gc_maxlifetime') != $this->timeout)
72 ini_set('session.gc_maxlifetime', $this->timeout);
73 if (ini_get('session.cookie_lifetime') != $this->timeout)
74 ini_set('session.cookie_lifetime', $this->timeout);
75
76 session_start();
77 }
78
79 private function checkSession() {
80 global $CFG;
81
82 $time = $_SERVER['REQUEST_TIME'];
83 if (isset($_SESSION['LAST_ACTIVITY']) &&
84 ($time - $_SESSION['LAST_ACTIVITY']) >= $this->settings['timeout']) {
85 echo 'R_TIME: '.date('c', $time).' L_ACT: '.date('c', $_SESSION['LAST_ACTIVITY']);
86 $this->logout();
87 } else {
88 $_SESSION['LAST_ACTIVITY'] = $time;
89 }
90 }
91
92 public function logout() {
93 $_SESSION = array();
94 if (ini_get('session.use_cookies')) {
95 $params = session_get_cookie_params();
96 setcookie(session_name(), '', time() - 42000,
97 $params['path'], $params['domain'],
98 $params['secure'], $params['httponly']);
99 }
100 session_unset();
101 session_destroy();
102 $this->settings = array();
103 }
104
105 public function isAdmin() {
106 $admin = false;
107
108 if (isset($this->settings['admin'])) {
109 $admin = $this->settings['admin'];
110 }
111
112 return $admin;
113 }
114
115 public function login($user, $pw) {
116 global $CFG;
117 $result = false;
118
119 if ('' == session_id()) {
120 $this->startSession();
121 }
122
123 $this->settings['user'] = null;
124 $this->settings['admin'] = false;
125
126 $p = explode('@', $user);
127 if (count($p) != 2) {
128 $this->settings['loginStatus'] = 'Bad username';
129 } else {
130 $domain = $p[1];
131 $dn = "mail=$user,ou=Users,domainName=$domain,$CFG->ldap_base_dn";
132 $filter = "(&(objectclass=mailUser)(accountStatus=active)(mail=$user))";
133 $ds = @ldap_connect($CFG->ldap_dsn);
134 if ($ds) {
135 @ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);
136 $r = @ldap_bind($ds, $dn, $pw);
137 if ($r) {
138 $sr = @ldap_search($ds, $CFG->ldap_base_dn, $filter, array('mail','domainglobaladmin'));
139 $info = @ldap_get_entries($ds, $sr); // array
140 if ($info['count'] > 0) {
141 $this->settings['user'] = $user;
142 $result = true;
143 $this->settings['loginStatus'] = 'OK';
144 $admin = 'NO';
145 if (isset($info[0]['domainglobaladmin'])) {
146 $admin = $info[0]['domainglobaladmin'][0];
147 $admin = strtoupper($admin);
148 }
149 $this->settings['admin'] = ($admin == 'YES') ? true : false;
150 } else {
151 $this->settings['loginStatus'] = 'Login failed';
152 }
153 } else {
154 $this->settings['loginStatus'] = ldap_error($ds);
155 }
156 @ldap_close($ds);
157 } else {
158 $this->settings['loginStatus'] = 'Connect to LDAP server failed';
159 }
160 }
161
162 $_SESSION['settings'] = $this->settings;
163
164 return $result;
165 }
166
167 public function getLoginStatus() {
168 $status = 'Not logged in';
169
170 if (isset($this->settings['loginStatus'])) {
171 $status = $this->settings['loginStatus'];
172 }
173
174 return $status;
175 }
176
177 public function isLoggedIn() {
178 global $CFG;
179 $loggedIn = false;
180
181 if ('' == session_id()) {
182 $this->startSession();
183 }
184
185 if (isset($this->settings['user'])) {
186 if ($this->settings['user'] != null) {
187 $loggedIn = true;
188 } else {
189 if ($CFG->auth_method == 'HTTP_AUTH') {
190 if (isset($this->server['PHP_AUTH_USER'])) {
191 $this->settings['user'] = $this->server['PHP_AUTH_USER'];
192 $loggedIn = true;
193 }
194 }
195 }
196 }
197
198 if ($loggedIn == false) {
199 echo '$this->user: '.$this->user.' $_SESSION[\'user\']: '.$_SESSION['user'];
200 echo 'R_TIME: '.date('c', $_SERVER['REQUEST_TIME']).' L_ACT: '.date('c', $_SESSION['LAST_ACTIVITY']);
201 //exit;
202 }
203
204 $_SESSION['settings'] = $this->settings;
205
206 return $loggedIn;
207 }
208
209 public function getUser() {
210 $user = null;
211
212 if ($this->isLoggedIn()) {
213 $user = $this->settings['user'];
214 }
215
216 return $user;
217 }
218
219 public function getHeader() {
220 return $this->header;
221 }
222
223 public function getFooter() {
224 return $this->footer;
225 }
226
227 public function getHeading() {
228 return $this->heading;
229 }
230
231 public function setHeading($heading) {
232 global $CFG;
233
234 $timeout = $CFG->session_timeout * 60 * 1000;
235 $this->heading = str_replace('__TITLE__', $heading, $this->heading);
236 $this->header = str_replace('__TITLE__', $heading, $this->header);
237 $this->header = str_replace('__ROOT__', $CFG->wwwroot, $this->header);
238 $this->header = str_replace('__TIMEOUT__', $timeout, $this->header);
239 }
240
241 public function convertContent($code) {
242 $table = array(
243 'V' => 'Virus',
244 'B' => 'Banned',
245 'U' => 'Unchecked',
246 'S' => 'Spam',
247 'Y' => 'Spammy',
248 'M' => 'Bad Mime',
249 'H' => 'Bad Header',
250 'O' => 'Over sized',
251 'T' => 'MTA err',
252 'C' => 'Clean'
253 );
254
255 $string = $table[$code];
256 if (empty($string))
257 $string = 'Unknown';
258
259 return $string;
260 }
261
262 }
This page took 0.089901 seconds and 6 git commands to generate.