diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Auth.php | 3 | ||||
-rw-r--r-- | lib/Log.php | 205 | ||||
-rw-r--r-- | lib/User.php | 3 | ||||
-rw-r--r-- | lib/kolab_api_controller.php | 15 |
4 files changed, 213 insertions, 13 deletions
diff --git a/lib/Auth.php b/lib/Auth.php index 549e046..6129bec 100644 --- a/lib/Auth.php +++ b/lib/Auth.php @@ -110,8 +110,7 @@ class Auth { */ public function authenticate($username, $password) { - // TODO: Log authentication request. - //console("Authentication request for $username"); + Log::info("Authentication request for $username"); if (strpos($username, '@')) { // Case-sensitivity does not matter for strstr() on '@', which diff --git a/lib/Log.php b/lib/Log.php new file mode 100644 index 0000000..2ddb99b --- /dev/null +++ b/lib/Log.php @@ -0,0 +1,205 @@ +<?php +/* + +--------------------------------------------------------------------------+ + | This file is part of the Kolab Web Admin Panel | + | | + | Copyright (C) 2011-2012, Kolab Systems AG | + | | + | This program is free software: you can redistribute it and/or modify | + | it under the terms of the GNU Affero General Public License as published | + | by the Free Software Foundation, either version 3 of the License, or | + | (at your option) any later version. | + | | + | This program is distributed in the hope that it will be useful, | + | but WITHOUT ANY WARRANTY; without even the implied warranty of | + | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | + | GNU Affero General Public License for more details. | + | | + | You should have received a copy of the GNU Affero General Public License | + | along with this program. If not, see <http://www.gnu.org/licenses/> | + +--------------------------------------------------------------------------+ + | Author: Aleksander Machniak <machniak@kolabsys.com> | + +--------------------------------------------------------------------------+ +*/ + +/** + * Class for logging debug/info/warning/error messages into log file(s) + */ +class Log +{ + const DEBUG = 8; + const INFO = 4; + const WARNING = 2; + const ERROR = 0; + + private static $mode; + + + /** + * Logs debug message + * + * @param string $message Log message + * @param array $args Additional arguments ('file', 'line') + */ + static function debug($message, $args = array()) + { + if (self::mode() >= self::DEBUG) { + self::log_message(self::DEBUG, $message, $args); + } + } + + /** + * Logs information message + * + * @param string $message Log message + * @param array $args Additional arguments ('file', 'line') + */ + static function info($message, $args = array()) + { + if (self::mode() >= self::INFO) { + self::log_message(self::INFO, $message, $args); + } + } + + /** + * Logs warning message + * + * @param string $message Log message + * @param array $args Additional arguments ('file', 'line') + */ + static function warning($message, $args = array()) + { + if (self::mode() >= self::WARNING) { + self::log_message(self::WARNING, $message, $args); + } + } + + /** + * Logs error message + * + * @param string $message Log message + * @param array $args Additional arguments ('file', 'line') + */ + static function error($message, $args = array()) + { + if (self::mode() >= self::ERROR) { + self::log_message(self::ERROR, $message, $args); + } + } + + /** + * Message logger + * + * @param int $mode Message severity + * @param string $message Log message + * @param array $args Additional arguments ('file', 'line') + */ + private static function log_message($mode, $message, $args = array()) + { + $conf = Conf::get_instance(); + $logfile = $conf->get('kolab_wap', 'log_file'); + + // if log_file is configured all logs will go to it + // otherwise use separate file for info/debug and warning/error + if (!$logfile) { + switch ($mode) { + case self::DEBUG: + case self::INFO: + $file = 'console'; + break; + case self::WARNING: + case self::ERROR: + $file = 'errors'; + break; + } + + $logfile = dirname(__FILE__) . '/../logs/' . $file; + } + + switch ($mode) { + case self::DEBUG: + $prefix = 'DEBUG'; + break; + case self::INFO: + $prefix = 'INFO'; + break; + case self::WARNING: + $prefix = 'WARNING'; + break; + case self::ERROR: + $prefix = 'ERROR'; + break; + } + + if (!is_string($message)) { + $message = var_export($message, true); + } + + $date = date('d-M-Y H:i:s O'); + $sess_id = session_id(); + $logline = sprintf("[%s]%s: [%s] %s\n", + $date, $sess_id ? "($sess_id)" : '', $prefix, $message); + + if (!empty($args)) { + if ($args['file']) { + $logline .= ' in ' . $args['file']; + } + if ($args['line']) { + $logline .= ' on line ' . intval($args['line']); + } + } + + if ($fp = @fopen($logfile, 'a')) { + fwrite($fp, $logline); + fflush($fp); + fclose($fp); + return; + } + + if ($mode == self::ERROR) { + // send error to PHPs error handler if write to file didn't succeed + trigger_error($message, E_USER_ERROR); + } + } + + /** + * Returns configured logging mode + * + * @return int Logging mode + */ + static function mode() + { + if (isset(self::$mode)) { + return self::$mode; + } + + $conf = Conf::get_instance(); + $mode = $conf->get('kolab_wap', 'debug_mode'); + + switch ($mode) { + case self::DEBUG: + case 'debug': + case 'DEBUG': + self::$mode = self::DEBUG; + break; + + case self::INFO: + case 'info': + case 'INFO': + self::$mode = self::INFO; + break; + + case self::WARNING: + case 'warning': + case 'WARNING': + self::$mode = self::WARNING; + break; + + case self::ERROR: + default: + self::$mode = self::ERROR; + } + + return self::$mode; + } +} diff --git a/lib/User.php b/lib/User.php index e0a2076..e7905cc 100644 --- a/lib/User.php +++ b/lib/User.php @@ -110,9 +110,6 @@ class User public function groups() { - //console("Called " . __FUNCTION__ . " on line " . __LINE__ . " of " . __FILE__); - //debug_print_backtrace(); - if ($this->_groups || (is_array($this->_groups) && count($this->_groups) >= 1)) { return $this->_groups; } diff --git a/lib/kolab_api_controller.php b/lib/kolab_api_controller.php index bdbc707..e0dbf8b 100644 --- a/lib/kolab_api_controller.php +++ b/lib/kolab_api_controller.php @@ -79,7 +79,7 @@ class kolab_api_controller public function add_service($service, $handler) { if ($this->services[$service]) { - //console("Service $service is already registered."); + Log::warning("Service $service is already registered"); return false; } @@ -91,7 +91,7 @@ class kolab_api_controller */ public function get_service($service) { - //console("Obtaining service $service"); + Log::debug("Obtaining service: $service"); // we are the system! if ($service == 'system') { @@ -108,8 +108,6 @@ class kolab_api_controller } } - //console("Unknown service $service"); - throw new Exception("Unknown service", 400); } @@ -140,7 +138,7 @@ class kolab_api_controller $method = $this->request['method']; $postdata = @json_decode($postdata, true); - //console("Calling method " . $method . " on service " . $service); + Log::debug("Calling $service.$method"); // validate user session if ($service != 'system' || $method != 'authenticate') { @@ -188,7 +186,7 @@ class kolab_api_controller $method = $this->request['method']; $url = rtrim($url, '/') . '/' . $service . '.' . $method; - //console("Proxying " . $url); + Log::debug("Proxying: $url"); $request = new HTTP_Request2(); $url = new Net_URL2($url); @@ -272,7 +270,7 @@ class kolab_api_controller */ private function authenticate($request, $postdata) { - //console("Authenticating with postdata", $postdata); + Log::debug("Authenticating with postdata: " . json_encode($postdata)); $valid = false; @@ -306,7 +304,8 @@ class kolab_api_controller */ private function capabilities() { - //console("system.capabilities called"); + Log::debug("system.capabilities called"); + $auth = Auth::get_instance(); $this->domains = $auth->list_domains(); |