186e0f1b9SPhilipp Neuser<?php 286e0f1b9SPhilipp Neuser// must be run within Dokuwiki 386e0f1b9SPhilipp Neuserif(!defined('DOKU_INC')) die(); 486e0f1b9SPhilipp Neuser 586e0f1b9SPhilipp Neuser/** 686e0f1b9SPhilipp Neuser * Chained authentication backend 786e0f1b9SPhilipp Neuser * 886e0f1b9SPhilipp Neuser * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 986e0f1b9SPhilipp Neuser * @author Philipp Nesuer <pneuser@physik.fu-berlin.de> 1086e0f1b9SPhilipp Neuser */ 1186e0f1b9SPhilipp Neuserclass auth_plugin_authchained extends DokuWiki_Auth_Plugin { 1286e0f1b9SPhilipp Neuser public $success = true; 1386e0f1b9SPhilipp Neuser //arry with authentication plugins 1486e0f1b9SPhilipp Neuser protected $chained_plugins = array(); 1586e0f1b9SPhilipp Neuser protected $chained_auth = NULL; 1686e0f1b9SPhilipp Neuser 1786e0f1b9SPhilipp Neuser /** 1886e0f1b9SPhilipp Neuser * Constructor. 1986e0f1b9SPhilipp Neuser * 2086e0f1b9SPhilipp Neuser * Loads all configured plugins or the authentication plugin of the 2186e0f1b9SPhilipp Neuser * logged in user. 2286e0f1b9SPhilipp Neuser * 2386e0f1b9SPhilipp Neuser * @author Philipp Neuser <pneuser@physik.fu-berlin.de> 2486e0f1b9SPhilipp Neuser */ 2586e0f1b9SPhilipp Neuser public function __construct() { 2686e0f1b9SPhilipp Neuser global $conf; 2786e0f1b9SPhilipp Neuser // call parent 2886e0f1b9SPhilipp Neuser# parent::__constructor(); 2986e0f1b9SPhilipp Neuser 3086e0f1b9SPhilipp Neuser //check if there is allready an authentication plugin selected 31*9e84dbfbSPhilipp Neuser if(isset($_SESSION[DOKU_COOKIE]['plugin']['authchained']['module']) && 32*9e84dbfbSPhilipp Neuser !empty($_SESSION[DOKU_COOKIE]['plugin']['authchained']['module']) ) 3386e0f1b9SPhilipp Neuser { 3486e0f1b9SPhilipp Neuser //get previously selected authentication plugin 35*9e84dbfbSPhilipp Neuser $tmp_plugin = $_SESSION[DOKU_COOKIE]['plugin']['authchained']['module']; 3686e0f1b9SPhilipp Neuser require_once(DOKU_INC."lib/plugins/".$tmp_plugin."/auth.php"); 3786e0f1b9SPhilipp Neuser $tmp_classname = "auth_plugin_".$tmp_plugin; 3886e0f1b9SPhilipp Neuser $this->chained_auth = new $tmp_classname; 3986e0f1b9SPhilipp Neuser } 4086e0f1b9SPhilipp Neuser else { 4186e0f1b9SPhilipp Neuser //get authentication plugins 42*9e84dbfbSPhilipp Neuser if(isset($conf['plugin']['authchained']['authtypes'])){ 43*9e84dbfbSPhilipp Neuser foreach(explode(":",$conf['plugin']['authchained']['authtypes']) as 4486e0f1b9SPhilipp Neuser $tmp_plugin){ 4586e0f1b9SPhilipp Neuser require_once(DOKU_INC."lib/plugins/".$tmp_plugin."/auth.php"); 4686e0f1b9SPhilipp Neuser $tmp_classname = "auth_plugin_".$tmp_plugin; 4786e0f1b9SPhilipp Neuser $tmp_class = new $tmp_classname; 4886e0f1b9SPhilipp Neuser $tmp_module = array($tmp_plugin,$tmp_class); 4986e0f1b9SPhilipp Neuser array_push($this->chained_plugins, $tmp_module); 5086e0f1b9SPhilipp Neuser } 5186e0f1b9SPhilipp Neuser }else{ 5286e0f1b9SPhilipp Neuser $success = false; 5386e0f1b9SPhilipp Neuser } 5486e0f1b9SPhilipp Neuser } 5586e0f1b9SPhilipp Neuser //debug 5686e0f1b9SPhilipp Neuser// print_r($chained_plugins); 5786e0f1b9SPhilipp Neuser } 5886e0f1b9SPhilipp Neuser 5986e0f1b9SPhilipp Neuser /** 6086e0f1b9SPhilipp Neuser * Forwards the authentication to configured authplugins. 6186e0f1b9SPhilipp Neuser * Returns true, if the usermanager authtype has the capability and no user 6286e0f1b9SPhilipp Neuser * is logged in. 6386e0f1b9SPhilipp Neuser * 6486e0f1b9SPhilipp Neuser * @author Philipp Neuser <pneuser@physik.fu-berlin.de> 6586e0f1b9SPhilipp Neuser * @param string $cap the capability to check 6686e0f1b9SPhilipp Neuser * @return bool 6786e0f1b9SPhilipp Neuser */ 6886e0f1b9SPhilipp Neuser public function canDo($cap) { 6986e0f1b9SPhilipp Neuser global $conf; 7086e0f1b9SPhilipp Neuser if(is_null($this->chained_auth)) 7186e0f1b9SPhilipp Neuser { 7286e0f1b9SPhilipp Neuser foreach($this->chained_plugins as $module) 7386e0f1b9SPhilipp Neuser { 7486e0f1b9SPhilipp Neuser #echo "TEST AUTHMANAGER!!!"; 7586e0f1b9SPhilipp Neuser if($module[0] == 76*9e84dbfbSPhilipp Neuser $conf['plugin']['authchained']['usermanager_authtype']){ 7786e0f1b9SPhilipp Neuser $module[1]->canDo($cap); 7886e0f1b9SPhilipp Neuser } 7986e0f1b9SPhilipp Neuser } 8086e0f1b9SPhilipp Neuser return false; 8186e0f1b9SPhilipp Neuser } 8286e0f1b9SPhilipp Neuser else{ 8386e0f1b9SPhilipp Neuser #echo "canDo $cap ".$this->chained_auth->canDo($cap)."\n"; 8486e0f1b9SPhilipp Neuser return $this->chained_auth->canDo($cap); 8586e0f1b9SPhilipp Neuser } 8686e0f1b9SPhilipp Neuser } 8786e0f1b9SPhilipp Neuser 8886e0f1b9SPhilipp Neuser /** 8986e0f1b9SPhilipp Neuser * Forwards the result of the auth plugin of the logged in user or 9086e0f1b9SPhilipp Neuser * returns false 9186e0f1b9SPhilipp Neuser * 9286e0f1b9SPhilipp Neuser * @author Philipp Neuser <pneuser@physik.fu-berlin.de> 9386e0f1b9SPhilipp Neuser * @param string $type Modification type ('create', 'modify', 'delete') 9486e0f1b9SPhilipp Neuser * @param array $params Parameters for the createUser, modifyUser or deleteUsers method. The content of this array depends on the modification type 9586e0f1b9SPhilipp Neuser * @return mixed Result from the modification function or false if an event handler has canceled the action 9686e0f1b9SPhilipp Neuser */ 9786e0f1b9SPhilipp Neuser public function triggerUserMod($type, $params) { 9886e0f1b9SPhilipp Neuser if(is_null($this->chained_auth)) 9986e0f1b9SPhilipp Neuser return false; 10086e0f1b9SPhilipp Neuser else 10186e0f1b9SPhilipp Neuser return $this->chained_auth->canDo($cap); 10286e0f1b9SPhilipp Neuser } 10386e0f1b9SPhilipp Neuser 10486e0f1b9SPhilipp Neuser /** 10586e0f1b9SPhilipp Neuser * Forwards the result of the auth plugin of the logged in user and 10686e0f1b9SPhilipp Neuser * unsets our session variable. 10786e0f1b9SPhilipp Neuser * @see auth_logoff() 10886e0f1b9SPhilipp Neuser * @author Philipp Neuser <pneuser@physik.fu-berlin.de 10986e0f1b9SPhilipp Neuser */ 11086e0f1b9SPhilipp Neuser public function logOff() { 11186e0f1b9SPhilipp Neuser if(!is_null($this->chained_auth)) 11286e0f1b9SPhilipp Neuser $this->chained_auth->logOff(); 113*9e84dbfbSPhilipp Neuser unset($_SESSION[DOKU_COOKIE]['plugin']['authchained']['module']); 11486e0f1b9SPhilipp Neuser } 11586e0f1b9SPhilipp Neuser 11686e0f1b9SPhilipp Neuser /** 11786e0f1b9SPhilipp Neuser * Do all authentication [ OPTIONAL ] 11886e0f1b9SPhilipp Neuser * If the current plugin is external, be external. 11986e0f1b9SPhilipp Neuser * 12086e0f1b9SPhilipp Neuser * @see auth_login() 12186e0f1b9SPhilipp Neuser * @author Philipp Neuser <pneuser@physik.fu-berlin.de> 12286e0f1b9SPhilipp Neuser * 12386e0f1b9SPhilipp Neuser * @param string $user Username 12486e0f1b9SPhilipp Neuser * @param string $pass Cleartext Password 12586e0f1b9SPhilipp Neuser * @param bool $sticky Cookie should not expire 12686e0f1b9SPhilipp Neuser * @return bool true on successful auth 12786e0f1b9SPhilipp Neuser */ 12886e0f1b9SPhilipp Neuser public function trustExternal($user, $pass, $sticky = false) { 12986e0f1b9SPhilipp Neuser if(!is_null($this->chained_auth) && $this->chained_auth->canDo('external')) 13086e0f1b9SPhilipp Neuser $this->chained_auth->trustExternal($user, $pass, $sticky); 13186e0f1b9SPhilipp Neuser } 13286e0f1b9SPhilipp Neuser 13386e0f1b9SPhilipp Neuser /** 13486e0f1b9SPhilipp Neuser * Check user+password [ MUST BE OVERRIDDEN ] 13586e0f1b9SPhilipp Neuser * 13686e0f1b9SPhilipp Neuser * Checks if the given user exists in one of the plugins and checks 13786e0f1b9SPhilipp Neuser * against the given password. The first plugin returning true becomes 13886e0f1b9SPhilipp Neuser * auth plugin of the user session. 13986e0f1b9SPhilipp Neuser * 14086e0f1b9SPhilipp Neuser * @author Philipp Neuser <pneuser@physik.fu-berlin.de 14186e0f1b9SPhilipp Neuser * @param string $user the user name 14286e0f1b9SPhilipp Neuser * @param string $pass the clear text password 14386e0f1b9SPhilipp Neuser * @return bool 14486e0f1b9SPhilipp Neuser */ 14586e0f1b9SPhilipp Neuser public function checkPass($user, $pass) { 14686e0f1b9SPhilipp Neuser //debug 14786e0f1b9SPhilipp Neuser //print_r($this->chained_plugins); 14886e0f1b9SPhilipp Neuser foreach($this->chained_plugins as $module) 14986e0f1b9SPhilipp Neuser { 15086e0f1b9SPhilipp Neuser if($module[1]->canDo('external')) 15186e0f1b9SPhilipp Neuser { 15286e0f1b9SPhilipp Neuser if($module[1]->trustExternal($user, $pass)) 15386e0f1b9SPhilipp Neuser { 154*9e84dbfbSPhilipp Neuser $_SESSION[DOKU_COOKIE]['plugin']['authchained']['module'] = 15586e0f1b9SPhilipp Neuser $module[0]; 15686e0f1b9SPhilipp Neuser $this->chained_auth = $module[1]; 15786e0f1b9SPhilipp Neuser return true; 15886e0f1b9SPhilipp Neuser }else{ 15986e0f1b9SPhilipp Neuser if($module[1]->checkPass($user, $pass)) 16086e0f1b9SPhilipp Neuser { 161*9e84dbfbSPhilipp Neuser $_SESSION[DOKU_COOKIE]['plugin']['authchained']['module'] = 16286e0f1b9SPhilipp Neuser $module[0]; 16386e0f1b9SPhilipp Neuser $this->chained_auth = $module[1]; 16486e0f1b9SPhilipp Neuser return true; 16586e0f1b9SPhilipp Neuser } 16686e0f1b9SPhilipp Neuser } 16786e0f1b9SPhilipp Neuser }else{ 16886e0f1b9SPhilipp Neuser if($module[1]->checkPass($user, $pass)) 16986e0f1b9SPhilipp Neuser { 170*9e84dbfbSPhilipp Neuser $_SESSION[DOKU_COOKIE]['plugin']['authchained']['module'] = 17186e0f1b9SPhilipp Neuser $module[0]; 17286e0f1b9SPhilipp Neuser $this->this->chained_auth = $module[1]; 17386e0f1b9SPhilipp Neuser return true; 17486e0f1b9SPhilipp Neuser } 17586e0f1b9SPhilipp Neuser } 17686e0f1b9SPhilipp Neuser } 17786e0f1b9SPhilipp Neuser return false; 17886e0f1b9SPhilipp Neuser } 17986e0f1b9SPhilipp Neuser 18086e0f1b9SPhilipp Neuser /** 18186e0f1b9SPhilipp Neuser * Forwards the result of the auth plugin of the logged in user or 18286e0f1b9SPhilipp Neuser * checks all plugins if the users exists. The first plugin returning 18386e0f1b9SPhilipp Neuser * data is used. 18486e0f1b9SPhilipp Neuser * 18586e0f1b9SPhilipp Neuser * name string full name of the user 18686e0f1b9SPhilipp Neuser * mail string email addres of the user 18786e0f1b9SPhilipp Neuser * grps array list of groups the user is in 18886e0f1b9SPhilipp Neuser * 18986e0f1b9SPhilipp Neuser * @author Philipp Neuser <pneuser@physik.fu-berlin.de> 19086e0f1b9SPhilipp Neuser * @param string $user the user name 19186e0f1b9SPhilipp Neuser * @return array containing user data or false 19286e0f1b9SPhilipp Neuser */ 19386e0f1b9SPhilipp Neuser public function getUserData($user) { 19486e0f1b9SPhilipp Neuser //if(!$this->cando['external']) msg("no valid authorisation system in use", -1); 19586e0f1b9SPhilipp Neuser// echo "TESTSETEST"; 19686e0f1b9SPhilipp Neuser if(is_null($this->chained_auth)) 19786e0f1b9SPhilipp Neuser { 19886e0f1b9SPhilipp Neuser foreach($this->chained_plugins as $module) 19986e0f1b9SPhilipp Neuser { 20086e0f1b9SPhilipp Neuser $tmp_array = $module[1]->getUserData($user); 20186e0f1b9SPhilipp Neuser if(!is_bool($tmp_array)) 20286e0f1b9SPhilipp Neuser $tmp_chk_arr =array_filter($tmp_array); 20386e0f1b9SPhilipp Neuser if(!empty($tmp_chk_arr) && $tmp_array) 20486e0f1b9SPhilipp Neuser return $tmp_array; 20586e0f1b9SPhilipp Neuser } 20686e0f1b9SPhilipp Neuser return false; 20786e0f1b9SPhilipp Neuser } 20886e0f1b9SPhilipp Neuser else 20986e0f1b9SPhilipp Neuser { 21086e0f1b9SPhilipp Neuser return $this->chained_auth->getUserData($user); 21186e0f1b9SPhilipp Neuser } 21286e0f1b9SPhilipp Neuser } 21386e0f1b9SPhilipp Neuser 21486e0f1b9SPhilipp Neuser /** 21586e0f1b9SPhilipp Neuser * Forwards the result of the auth plugin of the logged in user or 21686e0f1b9SPhilipp Neuser * returns null. 21786e0f1b9SPhilipp Neuser * 21886e0f1b9SPhilipp Neuser * @author Philipp Neuser <pneuser@physik.fu-berlin.de> 21986e0f1b9SPhilipp Neuser * @param string $user 22086e0f1b9SPhilipp Neuser * @param string $pass 22186e0f1b9SPhilipp Neuser * @param string $name 22286e0f1b9SPhilipp Neuser * @param string $mail 22386e0f1b9SPhilipp Neuser * @param null|array $grps 22486e0f1b9SPhilipp Neuser * @return bool|null 22586e0f1b9SPhilipp Neuser */ 22686e0f1b9SPhilipp Neuser public function createUser($user, $pass, $name, $mail, $grps = null) { 22786e0f1b9SPhilipp Neuser if(is_null($this->chained_auth)){ 22886e0f1b9SPhilipp Neuser msg("authorisation method does not allow creation of new users", 22986e0f1b9SPhilipp Neuser -1); 23086e0f1b9SPhilipp Neuser return null; 23186e0f1b9SPhilipp Neuser } 23286e0f1b9SPhilipp Neuser else{ 23386e0f1b9SPhilipp Neuser //please note: users will be added to the module, to which the 23486e0f1b9SPhilipp Neuser //current user is logged into 23586e0f1b9SPhilipp Neuser if($this->canDo('addUser')){ 23686e0f1b9SPhilipp Neuser return $this->chained_auth->createUser($user, $pass, $name, $mail, 23786e0f1b9SPhilipp Neuser $grps); 23886e0f1b9SPhilipp Neuser }else{ 23986e0f1b9SPhilipp Neuser msg("authorisation method does not allow creation of new 24086e0f1b9SPhilipp Neuser users", -1); 24186e0f1b9SPhilipp Neuser return null; 24286e0f1b9SPhilipp Neuser } 24386e0f1b9SPhilipp Neuser } 24486e0f1b9SPhilipp Neuser } 24586e0f1b9SPhilipp Neuser 24686e0f1b9SPhilipp Neuser /** 24786e0f1b9SPhilipp Neuser * Forwards the result of the auth plugin of the logged in user or 24886e0f1b9SPhilipp Neuser * returns false 24986e0f1b9SPhilipp Neuser * 25086e0f1b9SPhilipp Neuser * @author Philipp Neuser <pneuser@physik.fu-berlin.de> 25186e0f1b9SPhilipp Neuser * @param string $user nick of the user to be changed 25286e0f1b9SPhilipp Neuser * @param array $changes array of field/value pairs to be changed (password will be clear text) 25386e0f1b9SPhilipp Neuser * @return bool 25486e0f1b9SPhilipp Neuser */ 25586e0f1b9SPhilipp Neuser public function modifyUser($user, $changes) { 25686e0f1b9SPhilipp Neuser if(is_null($this->chained_auth)){ 25786e0f1b9SPhilipp Neuser msg("authorisation method does not allow modifying of user data", 25886e0f1b9SPhilipp Neuser -1); 25986e0f1b9SPhilipp Neuser return false; 26086e0f1b9SPhilipp Neuser } 26186e0f1b9SPhilipp Neuser else{ 26286e0f1b9SPhilipp Neuser //please note: users will be modified in the module, to which the 26386e0f1b9SPhilipp Neuser //current user is logged into 26486e0f1b9SPhilipp Neuser if($this->canDo('modLogin') && $this->canDo('modPass') && 26586e0f1b9SPhilipp Neuser $this->canDo('modName') && $this->canDo('modMail') && 26686e0f1b9SPhilipp Neuser $this->canDo('modGroups')){ 26786e0f1b9SPhilipp Neuser return $this->chained_auth->createUser($user, $changes); 26886e0f1b9SPhilipp Neuser }else{ 26986e0f1b9SPhilipp Neuser msg("authorisation method does not allow modifying of user 27086e0f1b9SPhilipp Neuser data", -1); 27186e0f1b9SPhilipp Neuser return false; 27286e0f1b9SPhilipp Neuser } 27386e0f1b9SPhilipp Neuser } 27486e0f1b9SPhilipp Neuser 27586e0f1b9SPhilipp Neuser } 27686e0f1b9SPhilipp Neuser 27786e0f1b9SPhilipp Neuser /** 27886e0f1b9SPhilipp Neuser * Forwards the result of the auth plugin of the logged in user or 27986e0f1b9SPhilipp Neuser * returns false 28086e0f1b9SPhilipp Neuser * 28186e0f1b9SPhilipp Neuser * @author Philipp Neuser <pneuser@physik.fu-berlin.de> 28286e0f1b9SPhilipp Neuser * @param array $users 28386e0f1b9SPhilipp Neuser * @return int number of users deleted 28486e0f1b9SPhilipp Neuser */ 28586e0f1b9SPhilipp Neuser public function deleteUsers($users) { 28686e0f1b9SPhilipp Neuser if(is_null($this->chained_auth)){ 28786e0f1b9SPhilipp Neuser msg("authorisation method does not allow deleting of users", 28886e0f1b9SPhilipp Neuser -1); 28986e0f1b9SPhilipp Neuser return false; 29086e0f1b9SPhilipp Neuser } 29186e0f1b9SPhilipp Neuser else{ 29286e0f1b9SPhilipp Neuser //please note: users will be added to the module, to which the 29386e0f1b9SPhilipp Neuser //current user is logged into 29486e0f1b9SPhilipp Neuser if($this->canDo('delUser')){ 29586e0f1b9SPhilipp Neuser return $this->chained_auth->createUser($users); 29686e0f1b9SPhilipp Neuser }else{ 29786e0f1b9SPhilipp Neuser msg("authorisation method does not allow deleting of users", -1); 29886e0f1b9SPhilipp Neuser return false; 29986e0f1b9SPhilipp Neuser } 30086e0f1b9SPhilipp Neuser } 30186e0f1b9SPhilipp Neuser } 30286e0f1b9SPhilipp Neuser 30386e0f1b9SPhilipp Neuser /** 30486e0f1b9SPhilipp Neuser * Forwards the result of the auth plugin of the logged in user or 30586e0f1b9SPhilipp Neuser * returns 0 30686e0f1b9SPhilipp Neuser * 30786e0f1b9SPhilipp Neuser * @author Philipp Neuser <pneuser@physik.fu-berlin.de> 30886e0f1b9SPhilipp Neuser * @param array $filter array of field/pattern pairs, empty array for no filter 30986e0f1b9SPhilipp Neuser * @return int 31086e0f1b9SPhilipp Neuser */ 31186e0f1b9SPhilipp Neuser public function getUserCount($filter = array()) { 31286e0f1b9SPhilipp Neuser if(is_null($this->chained_auth)){ 31386e0f1b9SPhilipp Neuser msg("authorisation method does not provide user counts", 31486e0f1b9SPhilipp Neuser -1); 31586e0f1b9SPhilipp Neuser return 0; 31686e0f1b9SPhilipp Neuser } 31786e0f1b9SPhilipp Neuser else{ 31886e0f1b9SPhilipp Neuser //please note: users will be counted in the module, to which the 31986e0f1b9SPhilipp Neuser //current user is logged into 32086e0f1b9SPhilipp Neuser if($this->canDo('getUserCount')){ 32186e0f1b9SPhilipp Neuser return $this->chained_auth->getUserCount($filter); 32286e0f1b9SPhilipp Neuser }else{ 32386e0f1b9SPhilipp Neuser msg("authorisation method does not provide user counts", -1); 32486e0f1b9SPhilipp Neuser return 0; 32586e0f1b9SPhilipp Neuser } 32686e0f1b9SPhilipp Neuser } 32786e0f1b9SPhilipp Neuser 32886e0f1b9SPhilipp Neuser } 32986e0f1b9SPhilipp Neuser 33086e0f1b9SPhilipp Neuser /** 33186e0f1b9SPhilipp Neuser * Forwards the result of the auth plugin of the logged in user or 33286e0f1b9SPhilipp Neuser * returns empty array 33386e0f1b9SPhilipp Neuser * 33486e0f1b9SPhilipp Neuser * @author Philipp Neuser <pneuser@physik.fu-berlin.de> 33586e0f1b9SPhilipp Neuser * @param int $start index of first user to be returned 33686e0f1b9SPhilipp Neuser * @param int $limit max number of users to be returned 33786e0f1b9SPhilipp Neuser * @param array $filter array of field/pattern pairs, null for no filter 33886e0f1b9SPhilipp Neuser * @return array list of userinfo (refer getUserData for internal userinfo details) 33986e0f1b9SPhilipp Neuser */ 34086e0f1b9SPhilipp Neuser public function retrieveUsers($start = 0, $limit = -1, $filter = null) { 34186e0f1b9SPhilipp Neuser if(is_null($this->chained_auth)){ 34286e0f1b9SPhilipp Neuser msg("authorisation method does not support mass retrievals", 34386e0f1b9SPhilipp Neuser -1); 34486e0f1b9SPhilipp Neuser return array(); 34586e0f1b9SPhilipp Neuser } 34686e0f1b9SPhilipp Neuser else{ 34786e0f1b9SPhilipp Neuser //please note: users will be retrieved from the module, to which the 34886e0f1b9SPhilipp Neuser //current user is logged into 34986e0f1b9SPhilipp Neuser if($this->canDo('getUsers')){ 35086e0f1b9SPhilipp Neuser return $this->chained_auth->retrieveUsers($start, $limit, $filter); 35186e0f1b9SPhilipp Neuser }else{ 35286e0f1b9SPhilipp Neuser msg("authorisation method does not support mass retrievals", -1); 35386e0f1b9SPhilipp Neuser return array(); 35486e0f1b9SPhilipp Neuser } 35586e0f1b9SPhilipp Neuser } 35686e0f1b9SPhilipp Neuser } 35786e0f1b9SPhilipp Neuser 35886e0f1b9SPhilipp Neuser /** 35986e0f1b9SPhilipp Neuser * Forwards the result of the auth plugin of the logged in user or 36086e0f1b9SPhilipp Neuser * returns false 36186e0f1b9SPhilipp Neuser * 36286e0f1b9SPhilipp Neuser * @author Philipp Neuser <pneuser@physik.fu-berlin.de> 36386e0f1b9SPhilipp Neuser * @param string $group 36486e0f1b9SPhilipp Neuser * @return bool 36586e0f1b9SPhilipp Neuser */ 36686e0f1b9SPhilipp Neuser public function addGroup($group) { 36786e0f1b9SPhilipp Neuser if(is_null($this->chained_auth)){ 36886e0f1b9SPhilipp Neuser msg("authorisation method does not support independent group 36986e0f1b9SPhilipp Neuser creation", 37086e0f1b9SPhilipp Neuser -1); 37186e0f1b9SPhilipp Neuser return false; 37286e0f1b9SPhilipp Neuser } 37386e0f1b9SPhilipp Neuser else{ 37486e0f1b9SPhilipp Neuser //please note: users will be added to the module, to which the 37586e0f1b9SPhilipp Neuser //current user is logged into 37686e0f1b9SPhilipp Neuser if($this->canDo('addGroup')){ 37786e0f1b9SPhilipp Neuser return $this->chained_auth->addGroup($group); 37886e0f1b9SPhilipp Neuser }else{ 37986e0f1b9SPhilipp Neuser msg("authorisation method does not support independent group 38086e0f1b9SPhilipp Neuser creation", -1); 38186e0f1b9SPhilipp Neuser return false; 38286e0f1b9SPhilipp Neuser } 38386e0f1b9SPhilipp Neuser } 38486e0f1b9SPhilipp Neuser } 38586e0f1b9SPhilipp Neuser 38686e0f1b9SPhilipp Neuser /** 38786e0f1b9SPhilipp Neuser * Forwards the result of the auth plugin of the logged in user or 38886e0f1b9SPhilipp Neuser * returns empty array 38986e0f1b9SPhilipp Neuser * 39086e0f1b9SPhilipp Neuser * @author Philipp Neuser <pneuser@physik.fu-berlin.de> 39186e0f1b9SPhilipp Neuser * @param int $start 39286e0f1b9SPhilipp Neuser * @param int $limit 39386e0f1b9SPhilipp Neuser * @return array 39486e0f1b9SPhilipp Neuser */ 39586e0f1b9SPhilipp Neuser public function retrieveGroups($start = 0, $limit = 0) { 39686e0f1b9SPhilipp Neuser if(is_null($this->chained_auth)){ 39786e0f1b9SPhilipp Neuser msg("authorisation method does not support group list retrieval", 39886e0f1b9SPhilipp Neuser -1); 39986e0f1b9SPhilipp Neuser return array(); 40086e0f1b9SPhilipp Neuser } 40186e0f1b9SPhilipp Neuser else{ 40286e0f1b9SPhilipp Neuser //please note: users will be retrieved from the module, to which the 40386e0f1b9SPhilipp Neuser //current user is logged into 40486e0f1b9SPhilipp Neuser if($this->canDo('getGroups')){ 40586e0f1b9SPhilipp Neuser return $this->chained_auth->retrieveGroups($start,$limit); 40686e0f1b9SPhilipp Neuser }else{ 40786e0f1b9SPhilipp Neuser msg("authorisation method does not support group list 40886e0f1b9SPhilipp Neuser retrieval", -1); 40986e0f1b9SPhilipp Neuser return array(); 41086e0f1b9SPhilipp Neuser } 41186e0f1b9SPhilipp Neuser } 41286e0f1b9SPhilipp Neuser } 41386e0f1b9SPhilipp Neuser 41486e0f1b9SPhilipp Neuser /** 41586e0f1b9SPhilipp Neuser * Forwards the result of the auth plugin of the logged in user or 41686e0f1b9SPhilipp Neuser * returns true 41786e0f1b9SPhilipp Neuser * 41886e0f1b9SPhilipp Neuser * @return bool 41986e0f1b9SPhilipp Neuser */ 42086e0f1b9SPhilipp Neuser public function isCaseSensitive() { 42186e0f1b9SPhilipp Neuser if(is_null($this->chained_auth)) 42286e0f1b9SPhilipp Neuser return true; 42386e0f1b9SPhilipp Neuser else 42486e0f1b9SPhilipp Neuser return $this->chained_auth->isCaseSensitive(); 42586e0f1b9SPhilipp Neuser } 42686e0f1b9SPhilipp Neuser 42786e0f1b9SPhilipp Neuser /** 42886e0f1b9SPhilipp Neuser * Sanitize a given username [OPTIONAL] 42986e0f1b9SPhilipp Neuser * Forwards the result of the auth plugin of the logged in user or 43086e0f1b9SPhilipp Neuser * returns false 43186e0f1b9SPhilipp Neuser * 43286e0f1b9SPhilipp Neuser * 43386e0f1b9SPhilipp Neuser * @author Philipp Neuser <pneuser@physik.fu-berlin.de> 43486e0f1b9SPhilipp Neuser * @param string $user username 43586e0f1b9SPhilipp Neuser * @return string the cleaned username 43686e0f1b9SPhilipp Neuser */ 43786e0f1b9SPhilipp Neuser public function cleanUser($user) { 43886e0f1b9SPhilipp Neuser //print_r($this->chained_auth); 43986e0f1b9SPhilipp Neuser if(is_null($this->chained_auth)) 44086e0f1b9SPhilipp Neuser return $user; 44186e0f1b9SPhilipp Neuser else 44286e0f1b9SPhilipp Neuser return $this->chained_auth->cleanUser($user); 44386e0f1b9SPhilipp Neuser } 44486e0f1b9SPhilipp Neuser 44586e0f1b9SPhilipp Neuser /** 44686e0f1b9SPhilipp Neuser * Sanitize a given groupname [OPTIONAL] 44786e0f1b9SPhilipp Neuser * Forwards the result of the auth plugin of the logged in user or 44886e0f1b9SPhilipp Neuser * returns false 44986e0f1b9SPhilipp Neuser * 45086e0f1b9SPhilipp Neuser * @author Philipp Neuser <pneuser@physik.fu-berlin.de> 45186e0f1b9SPhilipp Neuser * @param string $group groupname 45286e0f1b9SPhilipp Neuser * @return string the cleaned groupname 45386e0f1b9SPhilipp Neuser */ 45486e0f1b9SPhilipp Neuser public function cleanGroup($group) { 45586e0f1b9SPhilipp Neuser if(is_null($this->chained_auth)) 45686e0f1b9SPhilipp Neuser { 45786e0f1b9SPhilipp Neuser return $group; 45886e0f1b9SPhilipp Neuser } 45986e0f1b9SPhilipp Neuser else 46086e0f1b9SPhilipp Neuser return $this->chained_auth->cleanGroup($group); 46186e0f1b9SPhilipp Neuser } 46286e0f1b9SPhilipp Neuser 46386e0f1b9SPhilipp Neuser 46486e0f1b9SPhilipp Neuser public function useSessionCache($user) { 46586e0f1b9SPhilipp Neuser global $conf; 46686e0f1b9SPhilipp Neuser if(is_null($this->chained_auth)) 46786e0f1b9SPhilipp Neuser return ($_SESSION[DOKU_COOKIE]['auth']['time'] >= 46886e0f1b9SPhilipp Neuser @filemtime($conf['cachedir'].'/sessionpurge')); 46986e0f1b9SPhilipp Neuser else 47086e0f1b9SPhilipp Neuser return $this->chained_auth->useSessionCache($user); 47186e0f1b9SPhilipp Neuser } 47286e0f1b9SPhilipp Neuser} 473