. */ /** * Show an login window or process the login request. On succes the user * will be redirected to core/kimai.php. */ if (!isset($_REQUEST['a'])) $_REQUEST['a'] = ''; if (!isset($_POST['name']) || is_array($_POST['name'])) { $name = ""; } else { $name = $_POST['name']; } if (!isset($_POST['password']) || is_array($_POST['password'])) { $password = ""; } else { $password = $_POST['password']; } if (!isset($_POST['database']) || is_array($_POST['database'])) { $database = ""; } else { $database = $_POST['database']; setcookie ("kimai_db",$database); } ob_start(); // ============================= // = Smarty (initialize class) = // ============================= require_once('libraries/smarty/Smarty.class.php'); $tpl = new Smarty(); $tpl->template_dir = 'templates/'; $tpl->compile_dir = 'compile/'; // ===================== // = standard includes = // ===================== require('includes/basics.php'); // ========================= // = authentication method = // ========================= require(WEBROOT.'auth/kimai.php'); $authPlugin = new KimaiAuth(); // ===================================== // = send kimai-global-array to smarty = // ===================================== $tpl->assign('kga', $kga); // ========================== // = installation required? = // ========================== $ready = @mysql_query(sprintf("select count(*) FROM %susr;",$kga['server_prefix'])); if (!$ready) { $tpl->assign('devtimespan', '2006-'.date('y')); if (isset($_REQUEST['disagreedGPL'])) { $tpl->assign('disagreedGPL', 1); } else { $tpl->assign('disagreedGPL', 0); } $tpl->display('install/welcome.tpl'); ob_end_flush(); exit; } // =================================== // = current database setup correct? = // =================================== checkDBversion("."); // ========================= // = User requested logout = // ========================= if ($_REQUEST['a']=="logout") { setcookie ("kimai_key","0"); setcookie ("kimai_usr","0"); } // =========================== // = User already logged in? = // =========================== if (isset($_COOKIE['kimai_usr']) && isset($_COOKIE['kimai_key']) && $_COOKIE['kimai_usr']!='0' && $_COOKIE['kimai_key']!='0' && !$_REQUEST['a']=="logout") { if (get_seq($_COOKIE['kimai_usr']) == $_COOKIE['kimai_key']) { header("Location: core/kimai.php"); exit; } } // ============================================== // = Login active? If not redirect to interface = // ============================================== get_global_config(); if (!$kga['conf']['login']) { header("Location: core/kimai.php"); exit; } // ============================================== // = Is the client really a browser?? (or IE ;) = // ============================================== $tpl->assign('browser', get_agent()); // =========================== // = Send HEADER information = // =========================== $tpl->display('login/header.tpl'); // ====================================== // = if possible try an automatic login = // ====================================== if ($authPlugin->autoLoginPossible() && $authPlugin->performAutoLogin($userId)) { if ($userId === false) { $userId = usr_create(array( 'usr_name' => $name, 'usr_grp' => $authPlugin->getDefaultGroupId(), 'usr_sts' => 2, 'usr_active' => 1 )); } $userData = usr_get_data($userId); $keymai=random_code(30); setcookie ("kimai_key",$keymai); setcookie ("kimai_usr",$userData['usr_name']); loginSetKey($userId,$keymai); header("Location: core/kimai.php"); } // ================================================================= // = processing login and displaying either login screen or errors = // ================================================================= switch($_REQUEST['a']){ case "checklogin": $name = htmlspecialchars(trim($name)); $is_customer = is_customer_name($name); logfile("login: " . $name. ($is_customer?" as customer":" as user")); if ($is_customer) { // perform login of customer $passCrypt = md5($kga['password_salt'].$password.$kga['password_salt']); $result = @mysql_query(sprintf("SELECT * FROM %sknd WHERE knd_name ='%s';",$kga['server_prefix'],$name)); $row = @mysql_fetch_assoc($result); $id = $row['knd_ID']; $user = $row['knd_name']; $pass = $row['knd_password']; // TODO: add BAN support if ( $name==$user && $pass==$passCrypt && $user!='' && $pass!='') { $keymai=random_code(30); setcookie ("kimai_key",$keymai); setcookie ("kimai_usr",'knd_'.$user); @mysql_query(sprintf("UPDATE %sknd SET knd_secure='%s' WHERE knd_name='%s';",$kga['server_prefix'],$keymai,$user)); header("Location: core/kimai.php"); } else { setcookie ("kimai_key","0"); setcookie ("kimai_usr","0"); $tpl->assign('headline', $kga['lang']['accessDenied']); $tpl->assign('message', $kga['lang']['wrongPass']); $tpl->assign('refresh', ''); $tpl->display('misc/error.tpl'); } } else { // perform login of user if ($authPlugin->authenticate($name,$password,$userId)) { if ($userId === false) { $userId = usr_create(array( 'usr_name' => $name, 'usr_grp' => $authPlugin->getDefaultGroupId(), 'usr_sts' => 2, 'usr_active' => 1 )); } $userData = usr_get_data($userId); if ($userData['ban'] < ($kga['conf']['loginTries']) || (time() - $userData['banTime']) > $kga['conf']['loginBanTime']) { // logintries not used up OR // bantime is over // => grant access $keymai=random_code(30); setcookie ("kimai_key",$keymai); setcookie ("kimai_usr",$userData['usr_name']); loginSetKey($userId,$keymai); header("Location: core/kimai.php"); } else { // login attempt even though logintries are used up and bantime is not over => deny setcookie ("kimai_key","0"); setcookie ("kimai_usr","0"); loginUpdateBan($userId); $tpl->assign('headline', $kga['lang']['banned']); $tpl->assign('message', $kga['lang']['tooManyLogins']); $tpl->assign('refresh', ''); $tpl->display('misc/error.tpl'); } } else { // wrong username/password => deny setcookie ("kimai_key","0"); setcookie ("kimai_usr","0"); if ($userId !== false) loginUpdateBan($userId,true); $tpl->assign('headline', $kga['lang']['accessDenied']); $tpl->assign('message', $kga['lang']['wrongPass']); $tpl->assign('refresh', ''); $tpl->display('misc/error.tpl'); } } break; // ============================================ // = Show login panel depending on (demo)mode = // ============================================ default: // ====================================== // = Selectbox for additional databases = // ====================================== if (isset($_COOKIE['kimai_db']) && $_COOKIE['kimai_db'] == true) { $db_num = $_COOKIE['kimai_db']; } else { $db_num = 0; } $selectbox = ""; if (isset($server_ext_database[0]) && $server_ext_database[0] == true) { $selectbox .= "\n"; } $tpl->assign('selectbox', $selectbox); $tpl->assign('devtimespan', '2006-'.date('y')); $tpl->display('login/panel.tpl'); break; } if(isset($link)) mysql_close($link); ob_end_flush(); ?>