DiogenesCoreSession(); $this->username = "anonymous"; $this->perms->addFlag('public'); } /** Try to do a Diogenes authentication. * * @param page the calling page (by reference) */ function doAuth(&$page) { global $globals; if ($this->perms->hasflag("auth")) return; /* do we have authentication tokens for auth ? */ if (isset($_REQUEST['login']) && isset($_REQUEST['response'])) { // remember login for a year setcookie('DiogenesLogin',$_REQUEST['login'],(time()+25920000)); // lookup user $res = $globals->db->query("SELECT user_id,username,password,firstname,lastname,perms FROM {$globals->tauth['native']} WHERE username='{$_REQUEST['login']}'"); if (!list($uid,$username,$password,$firstname,$lastname,$perms) = mysql_fetch_row($res)) { $page->info(__("Authentication error!")); $this->doLogin($page); } mysql_free_result($res); // check response if ($_REQUEST['response'] != md5("{$_REQUEST['login']}:$password:{$this->challenge}")) { // log the login failure $logger = new DiogenesCoreLogger($uid); $logger->log("auth_fail",$_REQUEST['login']); $page->info(__("Authentication error!")); $this->doLogin($page); } // retrieve user info $this->uid = $uid; $this->username = $username; $this->firstname = $firstname; $this->lastname = $lastname; $this->fullname = $firstname . ($lastname ? " $lastname" : ""); // create logger $logstr = $this->username . (empty($page->alias) ? "" : "@{$page->alias}"); $_SESSION['log'] = new DiogenesCoreLogger($this->uid); $_SESSION['log']->log("auth_ok",$logstr); // set user permissions $this->perms->addFlag('auth'); if ($perms == "admin") { $this->perms->addflag('root'); } } else { $this->doLogin($page); } } /** Try to login for WebDAV (plain-text password). * * Return true for success, false for failure. */ function doAuthWebDAV($user,$pass) { global $globals; if ($this->perms->hasflag("auth")) return true; // check credentials $pass = md5($pass); $res = $globals->db->query("SELECT user_id,username,perms FROM {$globals->tauth['native']} WHERE username='$user' AND password='$pass'"); if (!list($uid,$user,$perms) = mysql_fetch_row($res)) return false; // retrieve user info $this->uid = $uid; $this->username = $user; // create logger $_SESSION['log'] = new DiogenesWebDAVLogger($this->uid,$this->auth,$this->username); // set user permissions $this->perms->addFlag('auth'); if ($perms == "admin") { $this->perms->addflag('root'); } return true; } /** Display login screen. */ function doLogin(&$page) { $page->assign('greeting',__("Diogenes login")); $page->assign('msg_connexion', __("Connexion")); $page->assign('msg_password',__("password")); $page->assign('msg_submit',__("Submit")); $page->assign('msg_username', __("username")); if (isset($_COOKIE['DiogenesLogin'])) $page->assign('username', $_COOKIE['DiogenesLogin']); $page->assign('post',htmlentities($page->script_uri(), ENT_COMPAT | ENT_HTML401, "ISO-8859-1")); $page->assign('challenge',$this->challenge); $page->assign('md5',$page->url("md5.js")); $page->display('login.tpl'); exit; } /** Read a user's permissions for a given barrel. * * @param alias the name of the barrel */ function setBarrelPerms($alias) { global $globals; // if the user is logged in, refresh his/her permissions if ($this->perms->hasflag('auth')) { if ($this->perms->hasflag('root')) { $this->perms->addflag('user'); $this->perms->addflag('admin'); } else { $this->perms->rmflag('user'); $this->perms->rmflag('admin'); } // read site specific permissions $res = $globals->db->query("SELECT perms FROM diogenes_perm WHERE alias='{$alias}' AND auth='{$this->auth}' AND uid='{$this->uid}'"); if (list($tmp) = mysql_fetch_row($res)) { $this->perms->addflag('user'); $this->perms->addflag($tmp); } mysql_free_result($res); } } } ?>