diff --git a/class_management.php b/class_management.php
index 632b8e1..13c534c 100755
--- a/class_management.php
+++ b/class_management.php
@@ -19,7 +19,7 @@ class ClassManagement extends PhpObject
function __construct($sMainClass)
{
- parent::__construct(__CLASS__, true);
+ parent::__construct(__FILE__, true);
$this->asIncFiles = array();
//try to include default files
@@ -155,14 +155,21 @@ class PhpObject
private function addMessage($sType, $sMessage)
{
- $this->asMessageStack[$sType][] = $sMessage;
+ $this->asMessageStack[$sType][] = array('msg'=>$sMessage, 'time'=>date('d.m.Y H:i:s'), 'type'=>$sType, 'location'=>$this->sChildClass);
}
protected function getCleanMessageStack($sType=self::ALL_TAB)
{
- $asMessages = ($sType==self::ALL_TAB)?$this->asMessageStack:$this->asMessageStack[$sType];
+ if($sType==self::ALL_TAB) {
+ $asMessages = array_merge( //No overlap, numeric keys
+ $this->asMessageStack[self::NOTICE_TAB],
+ $this->asMessageStack[self::WARNING_TAB],
+ $this->asMessageStack[self::ERROR_TAB]
+ );
+ }
+ else $asMessages = $this->asMessageStack[$sType];
+
$this->resetMessageStack($sType);
-
return $this->glueMessages($asMessages);
}
@@ -182,12 +189,13 @@ class PhpObject
case self::MODE_ARRAY:
break;
case self::MODE_FILE:
- @file_put_contents(self::getLogPath(), "\n\n".$this->sChildClass.' - '.date('r')."\n".$sErrorStack, FILE_APPEND);
+ @file_put_contents(self::getLogPath(), "\n".$sErrorStack, FILE_APPEND);
break;
}
}
}
+ /*
protected function getCleanMessageStacks($aoExtsources, $sType=self::ALL_TAB)
{
$aoExtsources[] = $this;
@@ -202,7 +210,8 @@ class PhpObject
}
return $this->glueMessages($aoMessages);
}
-
+ */
+
private function glueMessages($asMessages)
{
switch($this->iExtractMode)
@@ -223,20 +232,11 @@ class PhpObject
return $oMessageStack;
}
- private static function flattenMessageStack($asTab, $sGlobalKey='')
+ private static function flattenMessageStack($asTab)
{
$asFlatTab = array();
- foreach($asTab as $oKey=>$oRow)
- {
- $sKey = is_numeric($oKey)?$sGlobalKey:$oKey.' - ';
- if(is_array($oRow))
- {
- $asFlatTab = array_merge($asFlatTab, self::flattenMessageStack($oRow, $sKey));
- }
- else
- {
- $asFlatTab[] = $sKey.$oRow;
- }
+ foreach($asTab as $asRow) {
+ $asFlatTab[] = '['.$asRow['time'].'] '.$asRow['type'].' - '.$asRow['location'].' - '.$asRow['msg'];
}
return $asFlatTab;
}
diff --git a/inc/db.php b/inc/db.php
index 392d95b..7ac7a67 100644
--- a/inc/db.php
+++ b/inc/db.php
@@ -39,7 +39,7 @@ class Db extends PhpObject
*/
public function __construct($sDbServer, $sLogin, $sPass, $sDatabase, $asOptions, $sEncoding='utf8mb4')
{
- parent::__construct(__CLASS__, Settings::DEBUG);
+ parent::__construct(__FILE__, Settings::DEBUG);
$this->sDatabase = $sDatabase;
$this->asOptions = $asOptions;
//$this->oConnection = mysql_connect(self::DB_SERVER, self::DB_LOGIN, self::DB_PASS);
diff --git a/inc/main.php b/inc/main.php
index 1d7ad74..595595a 100755
--- a/inc/main.php
+++ b/inc/main.php
@@ -49,7 +49,7 @@ abstract class Main extends PhpObject
*/
public function __construct($oClassManagement, $sProcessPage, $asMandatoryClasses=array(), $bDb=true/*, $sLang=''*/)
{
- parent::__construct(__CLASS__, Settings::DEBUG);
+ parent::__construct(__FILE__, Settings::DEBUG);
$this->oClassManagement = $oClassManagement;
//Load classes
diff --git a/inc/mask.php b/inc/mask.php
index ee9da43..d0c6ed5 100755
--- a/inc/mask.php
+++ b/inc/mask.php
@@ -23,7 +23,7 @@ class Mask extends PhpObject
public function __construct($sFileName='')
{
//init
- parent::__construct(__CLASS__, Settings::DEBUG);
+ parent::__construct(__FILE__, Settings::DEBUG);
$this->sMaskName = '';
$this->sFilePath = '';
$this->sMask = '';
diff --git a/inc/translator.php b/inc/translator.php
index b480422..ec6863e 100755
--- a/inc/translator.php
+++ b/inc/translator.php
@@ -18,7 +18,7 @@ class Translator extends PhpObject
public function __construct($sLang='')
{
- parent::__construct(__CLASS__, Settings::DEBUG);
+ parent::__construct(__FILE__, Settings::DEBUG);
$this->asLanguages = array();
$this->asTranslations = array();
$this->loadLanguages();
diff --git a/standalone/cerberus.php b/standalone/cerberus.php
deleted file mode 100755
index cd93caf..0000000
--- a/standalone/cerberus.php
+++ /dev/null
@@ -1,436 +0,0 @@
-true, Cerberus::OPTION_RENEW_TOKEN=>true));
-
-//logging In / Out
-if($sAction=='logout')
-{
- $oCerberus->logMeOut();
-}
-else/*if(($sLogin=='' && $sPass=='') || $oCerberus->checkPostToken($sPostToken))*/
-{
- $oCerberus->logMeIn($sLogin, $sPass);
-}
-/*else
-{
- echo 'pouet';
-}*/
-
-$sLayout = $sMenu = '';
-if($oCerberus->isLogguedIn())
-{
- $sMenu = '
';
- $sLayout = 'Loggued In. '.$oCerberus->getNewPostToken();
-}
-else
-{
- $sLayout = '';
-}
-
-$sErrors = $oCerberus->getCleanMessages();
-
-echo 'Cerberus'.$sMenu."\n".$sLayout.'
'.$sErrors.'';
-pre('new session post token : '.$_SESSION[Cerberus::SESSION_POST_TOKEN]);
-
-/* Class */
-
-/* Requirements */
-require_once 'functions.php';
-require_once 'php_object.php';
-require_once 'mysql_manager.php';
-
-/**
- * Cerberus
- * Access control class
- * @author FranzZ
- *
- * Requirements:
- * Database with DB_TABLE_USER table and fields:
- * - DB_FIELD_ID_USER
- * - DB_FIELD_LOGIN
- * - DB_FIELD_PASS
- * - DB_FIELD_TOKEN
- *
- * Setup:
- * - Replace required tables and fields names with the mysql manager constants
- * - Set options :
- * - Cerberus::OPTION_AUTO_LOGON
- * - Cerberus::OPTION_RENEW_TOKEN
- */
-class Cerberus extends PhpObject
-{
- // Database
- private $oMySql;
- const DB_TABLE_USER = MySqlManager::USER_TABLE;
- const DB_FIELD_ID_USER = 'id_user';
- const DB_FIELD_LOGIN = 'user';
- const DB_FIELD_PASS = 'pass';
- const DB_FIELD_TOKEN = 'token';
-
- //Session
- const SESSION_ID_USER = self::DB_FIELD_ID_USER;
- const SESSION_LOGIN = self::DB_FIELD_LOGIN;
- const SESSION_TOKEN = self::DB_FIELD_TOKEN;
- const SESSION_POST_TOKEN = 'post_token';
-
- //Cookie
- const COOKIE_ID_USER = self::DB_FIELD_ID_USER;
- const COOKIE_TOKEN = self::DB_FIELD_TOKEN;
- const COOKIE_POST_TOKEN = self::SESSION_POST_TOKEN;
-
- //Options
- const OPTION_AUTO_LOGON = 'auto_logon';
- const OPTION_RENEW_TOKEN = 'renew_token';
- public $abOptions;
-
- //Session Variables
- private $iUserId;
- private $sLogin;
- private $sToken;
- private $sPostToken;
-
- public function __construct(&$oMySql, $abOptions)
- {
- parent::__construct();
- $this->iUserId = $this->sLogin = $this->sToken = $this->sPostToken = false;
- $this->oMySql = $oMySql;
- $this->setOptions($abOptions);
- $this->syncSession();
- }
-
- private function setOptions($abOptions)
- {
- //default values
- $this->abOptions = array(self::OPTION_AUTO_LOGON=>false, self::OPTION_RENEW_TOKEN=>true);
- $this->abOptions = array_merge($this->abOptions, $abOptions);
- }
-
- private function getOption($sOptionName)
- {
- return $this->abOptions[$sOptionName];
- }
-
- public function getUserId()
- {
- return $this->iUserId;
- }
-
- private function syncSession()
- {
- if(isset($_SESSION[self::SESSION_ID_USER]))
- {
- $this->iUserId = $_SESSION[self::SESSION_ID_USER];
- }
- if(isset($_SESSION[self::SESSION_LOGIN]))
- {
- $this->sLogin = $_SESSION[self::SESSION_LOGIN];
- }
- if(isset($_SESSION[self::SESSION_TOKEN]))
- {
- $this->sToken = $_SESSION[self::SESSION_TOKEN];
- }
- if(isset($_SESSION[self::SESSION_POST_TOKEN]))
- {
- $this->sPostToken = $_SESSION[self::SESSION_POST_TOKEN];
- }
- }
-
- public function register($asData)
- {
- //data to register
- //TODO To be customized
- $sLogin = strtolower(trim($asData[self::DB_FIELD_LOGIN]));
- $sPass = $asData[self::DB_FIELD_PASS];
-
- if($sLogin=='' || $sPass=='')
- {
- $this->addError('Empty mandatory fields (Nickname or password)');
- }
- elseif(htmlspecialchars($sLogin, ENT_QUOTES)!=$sLogin)
- {
- $this->addError('Nickname: HTML characters are forbidden');
- }
- elseif($this->checkAccount($sLogin))
- {
- $this->addError('Nickname: There is already a user called by that name, choose a different one');
- }
- else
- {
- $asData[self::DB_FIELD_LOGIN] = $sLogin;
- $asData[self::DB_FIELD_PASS] = self::encryptPassword($sPass);
- $this->oMySql->insertRow(self::DB_TABLE_USER, $asData);
- return $this->logMeIn($sLogin, $sPass);
- }
- return false;
- }
-
- public function logMeIn($sLogin='', $sPass='')
- {
- $bResult = false;
- $bFirstLogin = true;
- if($sLogin=='' || $sPass=='')
- {
- $bFirstLogin = false;
- if($this->iUserId && $this->sLogin && $this->sToken && $this->checkToken())
- {
- //log in with session variables
- $iUserId = $this->iUserId;
- $sLogin = $this->sLogin;
- $sToken = $this->sToken;
- $bResult = true;
- }
- elseif($this->getOption(self::OPTION_AUTO_LOGON) && $this->checkToken(true))
- {
- //log in with cookies
- $iUserId = $_COOKIE[self::COOKIE_ID_USER];
- $sLogin = $this->oMySql->selectValue(self::DB_TABLE_USER, self::DB_FIELD_LOGIN, $iUserId);
- $sToken = $_COOKIE[self::COOKIE_TOKEN];
- $bResult = true;
- }
- else
- {
- $this->addWarning('No login info (cookie / session)');
- }
- }
- else
- {
- $asUser = $this->getUser($sLogin);
- if(!$asUser)
- {
- $this->addError('Unknown user');
- }
- elseif(!$this->checkPassword($sPass, $asUser[self::DB_FIELD_PASS]))
- {
- $this->addError('Incorrect password');
- }
- else
- {
- $iUserId = $asUser[self::DB_FIELD_ID_USER];
- $sToken = $asUser[self::DB_FIELD_TOKEN];
- $bResult = true;
- }
- }
-
- if($bResult)
- {
- //Class
- $this->iUserId = $iUserId;
- $this->sLogin = $sLogin;
- $this->sToken = $sToken;
-
- //Session
- $_SESSION[self::SESSION_ID_USER] = $iUserId;
- $_SESSION[self::SESSION_LOGIN] = $sLogin;
- $_SESSION[self::SESSION_TOKEN] = $sToken;
-
- //Cookie (doesn't leave any password nor login on user's computer)
- self::setCookie(self::COOKIE_ID_USER, $iUserId);
- self::setCookie(self::COOKIE_TOKEN, $sToken);
-
- //reset pass
- if($bFirstLogin || $this->getOption(self::OPTION_RENEW_TOKEN))
- {
- $this->resetToken();
- }
- }
- else
- {
- $this->logMeOut();
- }
-
- return $bResult;
- }
-
- public function isLogguedIn()
- {
- $bLogguedIn = false;
- if($this->iUserId && $this->sLogin && $this->sToken)
- {
- //check if token is set and valid
- if($this->checkToken())
- {
- //Check if user got a actual account in the database
- $bLogguedIn = $this->checkAccount($this->sLogin, $this->iUserId);
- }
- else
- {
- $this->addError('Authentication problem, please sign in again');
- }
- }
-
- /*
- echo "[TEST]
check token :
-
db token ", $this->iUserId." - ".$this->getDbToken($this->iUserId),"
-
session token ", $_SESSION[self::SESSION_TOKEN], "
-
class token ", $this->sToken, "
-
cookie token ", $_COOKIE[self::COOKIE_TOKEN], '
[/TEST]';
- */
-
- return $bLogguedIn;
- }
-
- public function logMeOut()
- {
- //Database
- if($this->iUserId)
- {
- $this->oMySql->updateRow(self::DB_TABLE_USER, $this->iUserId, array(self::DB_FIELD_TOKEN=>''));
- }
-
- //Class variables
- $this->iUserId = $this->sLogin = $this->sToken = $this->sPostToken = false;
-
- //Cookie
- self::setCookie(self::COOKIE_TOKEN, '', -1);
- self::setCookie(self::COOKIE_ID_USER, '', -1);
-
- //Server session
- $_SESSION = array();
- return session_destroy();
- }
-
- private function checkAccount($sUserName, $iUserId=0)
- {
- $asConstraints = array(self::DB_FIELD_LOGIN=>$sUserName);
- if($iUserId>0)
- {
- $asConstraints[self::DB_FIELD_ID_USER] = $iUserId;
- }
- return $this->oMySql->selectValue(self::DB_TABLE_USER, 'COUNT(1)', $asConstraints);
- }
-
- private function getUser($oUser)
- {
- $sField = is_numeric($oUser)?self::DB_FIELD_ID_USER:self::DB_FIELD_LOGIN;
- return $this->oMySql->selectRow(self::DB_TABLE_USER, array($sField=>$oUser));
- }
-
- public static function encryptPassword($sPass)
- {
- $sRandomText = 'F_RA-1H"2{bvj)5f?0sd3r#fP,K]U|w}hGiN@(sZ.sDe!7*x/:Mq+&';
- for($iIndex=0; $iIndex < strlen($sPass); $iIndex++)
- {
- $sPass[$iIndex] = $sRandomText[$iIndex%strlen($sRandomText)] ^ $sPass[$iIndex];
- }
- return md5($sPass);
- }
-
- private static function createToken()
- {
- return self::encryptPassword( $_SERVER['HTTP_USER_AGENT'].
- $_SERVER['REMOTE_ADDR'].
- $_SERVER['REQUEST_TIME'].
- strstr(microtime(), ' ', true).
- $_SERVER['SERVER_SIGNATURE'].
- $_SERVER['SERVER_ADMIN']);
- }
-
- private function resetToken()
- {
- //new token
- $sToken = $this->createToken();
-
- //set database token
- $this->oMySql->updateRow(self::DB_TABLE_USER, $this->iUserId, array(self::DB_FIELD_TOKEN=>$sToken));
-
- //set session token
- $_SESSION[self::SESSION_TOKEN] = $sToken;
- $this->sToken = $sToken;
-
- //set cookie token
- self::setCookie(self::COOKIE_TOKEN, $sToken);
- }
-
- public static function setCookie($sCookieName, $oCookieValue, $iTime=1)
- {
- setcookie($sCookieName, $oCookieValue, time()+60*60*24*$iTime);
- $_COOKIE[$sCookieName] = $oCookieValue;
- }
-
- private function checkToken($bCookieCheck=false)
- {
- $bTokenOk = $iUserId = $sToken = false;
-
- //Cookie check
- if($bCookieCheck && array_key_exists(self::COOKIE_ID_USER, $_COOKIE) && array_key_exists(self::COOKIE_TOKEN, $_COOKIE))
- {
- $iUserId = $_COOKIE[self::COOKIE_ID_USER];
- $sToken = $_COOKIE[self::COOKIE_TOKEN];
- }
- //Session check
- elseif(!$bCookieCheck && $this->iUserId && $this->sToken !== false)
- {
- $iUserId = $this->iUserId;
- $sToken = $this->sToken;
- }
-
- if($iUserId && $sToken)
- {
- $sDbPass = $this->getDbToken($bCookieCheck?$_COOKIE[self::COOKIE_ID_USER]:$this->iUserId);
- $bTokenOk = ($sDbPass == $_COOKIE[self::COOKIE_TOKEN] && ($sDbPass == $this->sToken || $bCookieCheck));
- }
-
- return $bTokenOk;
- }
-
- private function getDbToken($iUserId)
- {
- $sPass = false;
- if($iUserId !== false)
- {
- $sPass = $this->oMySql->selectValue(self::DB_TABLE_USER, self::DB_FIELD_TOKEN, $iUserId);
- }
- return $sPass;
- }
-
- public function getNewPostToken()
- {
- $sToken = self::createToken();
- $this->sPostToken = $sToken;
- $_SESSION[self::SESSION_POST_TOKEN] = $sToken;
- return $sToken;
- }
-
- public function checkPostToken($sPostToken)
- {
- pre(array('Posted'=>$sPostToken, 'Class'=>$this->sPostToken, 'Session'=>$_SESSION[self::SESSION_POST_TOKEN]), 'check posted token');
- $bPostTokenOk = ($this->sPostToken && $sPostToken!='' && $sPostToken == $this->sPostToken);
- $this->sPostToken = '';
- $_SESSION[self::SESSION_POST_TOKEN] = '';
- return $bPostTokenOk;
- }
-
- private static function checkPassword($sClearPass, $sEncodedPass)
- {
- return self::encryptPassword($sClearPass) == $sEncodedPass;
- }
-
- public function getCleanMessages($sType=parent::ALL_TAB)
- {
- return $this->getCleanMessageStacks(array($this->oMySql), $sType);
- }
-}
-
-?>
\ No newline at end of file