Source for file lds.auth.php

Documentation is available at lds.auth.php

  1. <?php
  2. /**
  3. @package    jelix
  4. @subpackage auth_driver
  5. @author     Nicolas JEUDY
  6. @contributor Laurent Jouanneau
  7. @copyright  2006 Nicolas JEUDY
  8. @copyright  2007 Laurent Jouanneau
  9. @licence  http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public Licence, see LICENCE file
  10. */
  11.  
  12.  
  13. /**
  14.  * object which represent a user
  15.  *
  16.  * @package    jelix
  17.  * @subpackage auth_driver
  18.  */
  19. class jAuthUserLDS extends jAuthUser {
  20. }
  21.  
  22.  
  23.  
  24.  
  25. /**
  26.  * authentification driver, which communicate with a LDS server
  27.  * LDS = Linbox Directory Server
  28.  * @package    jelix
  29.  * @subpackage auth_driver
  30.  * @link http://lds.linbox.org/
  31.  * @see jAuth
  32.  * @since 1.0b1
  33.  */
  34. class ldsAuthDriver implements jIAuthDriver {
  35.  
  36.     protected $_params;
  37.  
  38.     function __construct($params){
  39.         $this->_params = $params;
  40.     }
  41.  
  42.  
  43.     public function saveNewUser($user){
  44.         $login $user->login;
  45.         $pass $user->password;
  46.         $firstname "Jelix User";
  47.         $name "Jelix User";
  48.         // NULL homedir = /tmp ...
  49.         $homedir "/tmp";
  50.         $param array($login$pass$firstname$name$homedir);
  51.         $ret $this->xmlCall("base.createUser",$param);
  52.         return true;
  53.     }
  54.  
  55.     public function removeUser($login){
  56.         //fichier=1 -> remove user files (homeDirectory etc)
  57.         $fichier=0;
  58.         $param=array ($login,$fichier);
  59.         //ldap account can be modified from an other apps, so group can be use in an other app
  60.         $this->xmlCall("base.delUserFromAllGroups"$login);
  61.         $this->xmlCall("base.delUser",$param);
  62.         return true;
  63.     }
  64.  
  65.     public function updateUser($user){
  66.         return true;
  67.     }
  68.  
  69.     public function getUser($login){
  70.         $login '*'.$login.'*';
  71.         $paramsArr $this->xmlCall('base.getUsersLdap',$login);
  72.         $user new jAuthUserLDS();
  73.         $user->login $paramsArr['uid'][0];
  74.         $user->password $paramsArr['userPassword'][0];
  75.         return $user;
  76.     }
  77.  
  78.     public function createUserObject($login,$password){
  79.         $user new jAuthUserLDS();
  80.         $user->login $login;
  81.         $user->password $password;
  82.         return $user;
  83.     }
  84.  
  85.     public function getUserList($pattern){
  86.         $users $this->xmlCall('base.getUsersLdap',$pattern '*');
  87.         $userslist array();
  88.         foreach ($users as $userldap{
  89.             $user new jAuthUserLDS();
  90.             $user->login $userldap['uid'];
  91.             $userslist[$user;
  92.         }
  93.         return $userslist;
  94.     }
  95.  
  96.     public function changePassword($login$newpassword){
  97.         $param[]=$login;
  98.         $param[]=$newpassword;
  99.         return $this->xmlCall("base.changeUserPasswd",$param);
  100.     }
  101.  
  102.     public function verifyPassword($login$password){
  103.         $param[]=$login;
  104.         $param[]=$password;
  105.         $ret$this->xmlCall("base.ldapAuth",$param);
  106.         if $ret == '1'{
  107.             $user new jAuthUserLDS();
  108.             $user->login $login;
  109.             $user->password $password;
  110.         }
  111.         return ($user?$user:false);
  112.     }
  113.  
  114.     /**
  115.     * function wich decode UTF-8 Entity with ref
  116.     * &#03; for example
  117.     * need because XMLRPC server doest not like this sort
  118.     * of encoding
  119.     */
  120.     protected function decodeEntities($text{
  121.         $text html_entity_decode($text,ENT_QUOTES,"ISO-8859-1")/* NOTE: UTF-8 does not work! */
  122.         $textpreg_replace('/&#(\d+);/me',"chr(\\1)",$text)/* decimal notation */
  123.         $textpreg_replace('/&#x([a-f0-9]+);/mei',"chr(0x\\1)",$text);  /* hex notation */
  124.         return $text;
  125.     }
  126.  
  127.     /**
  128.     * call an xmlrpc call for a method
  129.     * via the xmlrpc server in python (lmc-agent)
  130.     * @param $method name of the method
  131.     * @param $params array with param
  132.     */
  133.     protected function xmlCall($method,$params{
  134.  
  135.         $output_options array"output_type" => "xml""verbosity" => "pretty""escaping" => array("markup""non-ascii""non-print")"version" => "xmlrpc""encoding" => "UTF-8" );
  136.  
  137.        //$output_options = array( "output_type" => "xml", "verbosity" => "pretty", "escaping" => array("markup", "non-ascii", "non-print"), "version" => "xmlrpc", "encoding" => "iso-8859-1" );
  138.  
  139.         if ($params==null{
  140.             $request xmlrpc_encode_request($method,null,$output_options);
  141.         }else {
  142.             $request xmlrpc_encode_request($method,$params,$output_options);
  143.             $request $this->decodeEntities($request,ENT_QUOTES,"UTF-8");
  144.         }
  145.  
  146.  
  147.         $host$this->_params['host'].":".$this->_params['port'];
  148.         $url "/";
  149.  
  150.         $httpQuery "POST "$url ." HTTP/1.0\r\n";
  151.         $httpQuery .= "User-Agent: xmlrpc\r\n";
  152.         $httpQuery .= "Host: "$host ."\r\n";
  153.         $httpQuery .= "Content-Type: text/xml\r\n";
  154.         $httpQuery .= "Content-Length: "strlen($request."\r\n";
  155.         $httpQuery .= "Authorization: Basic ".base64_encode($this->_params['login']).":".base64_encode($this->_params['password'])."\r\n\r\n";
  156.         $httpQuery .= $request;
  157.         $sock=null;
  158.  
  159.         // if crypted connexion
  160.         if ($this->_params['scheme']=="https"{
  161.             $prot="ssl://";
  162.         }
  163.         $sock @fsockopen($prot.$this->_params['host'],$this->_params['port']$errNo$errString);
  164.  
  165.         if !$sock {
  166.             jLog::log('Erreur de connexion XMLRPC');
  167.             jLog::dump($prot.$this->_params['host']);
  168.             jLog::dump($this->_params['port']);
  169.             jLOG::dump($httpQuery);
  170.             jLOG::dump(strlen($httpQuery));
  171.             jLOG::dump($errNo);
  172.             jLOG::dump($errString);
  173.             throw new jException('jelix~auth.error.lds.unreachable.server');
  174.         }
  175.  
  176.         if !fwrite($sock$httpQuerystrlen($httpQuery)) ) {
  177.             throw new jException('jelix~auth.error.lds.request.not.send');
  178.         }
  179.  
  180.         fflush($sock);
  181.         // We get the response from the server
  182.         while !feof($sock) ) {
  183.             $xmlResponse .= fgets($sock);
  184.         }
  185.         // Closing the connection
  186.         fclose($sock);
  187.         $xmlResponse substr($xmlResponsestrpos($xmlResponse"\r\n\r\n"+4);
  188.         /*
  189.         To decode the XML into PHP, we use the (finaly a short function)
  190.         xmlrpc_decode function. And that should've done the trick.
  191.         We now have what ever the server function made in our $xmlResponse
  192.         variable.
  193.  
  194.         Test if the XMLRPC result is a boolean value set to False.
  195.         If it is the case, xmlrpc_decode will return an empty string.
  196.         So we need to test this special case. */
  197.  
  198.         $booleanFalse "<?xml version='1.0'?>\n<methodResponse>\n<params>\n<param>\n<value><boolean>0</boolean></value>\n</param>\n</params>\n</methodResponse>\n";
  199.         if ($xmlResponse == $booleanFalse)
  200.             $xmlResponse "0";
  201.         else {
  202.             $xmlResponseTmp xmlrpc_decode($xmlResponse,"UTF-8");
  203.  
  204.             //if we cannot decode in UTF-8
  205.             if (!$xmlResponseTmp{
  206.                     //conversion in UTF-8
  207.                     $xmlResponse iconv("ISO-8859-1","UTF-8",$xmlResponse);
  208.                     $xmlResponse xmlrpc_decode($xmlResponse,"UTF-8");
  209.             else {
  210.                     $xmlResponse=$xmlResponseTmp;
  211.             }
  212.         }
  213.         return $xmlResponse;
  214.     }
  215. }
  216. ?>

Documentation generated on Wed, 07 Sep 2011 13:48:18 +0200 by phpDocumentor 1.4.3