linea21-utils
[ class tree: linea21-utils ] [ index: linea21-utils ] [ all elements ]

Source for file functions_auth.php

Documentation is available at functions_auth.php

  1. <?php
  2. /**
  3.  * @package linea21.utils
  4.  * @subpackage lib
  5.  * @author linea21 <info@linea21.com>
  6.  * @version $id SVN
  7.  * @access public
  8.  * @license http://opensource.org/licenses/gpl-3.0.html
  9.  */
  10.  
  11.  
  12.  
  13. function loginAuth($login{
  14.   $data $GLOBALS['sql_object']->DBSelect(SQL_get_UserInfo($login));
  15.   if ($data != && count($data== 1{
  16.     return $data[0];
  17.   else {
  18.     return false;
  19.   }
  20. }
  21.  
  22.  
  23. /**
  24.  * AuthenthificationProcess()
  25.  * Authentification d'un utilisateur
  26.  *
  27.  * @param  $login 
  28.  * @param  $pass 
  29.  * @param  $type ='PUBLIC' || 'ADMIN'
  30.  * @return boolean (true) ou message d'erreur
  31.  */
  32. function AuthenthificationProcess($login$pass$type)
  33. {
  34.   if($type == 'PUBLIC'$src LOG_PUBLIC_ACCESS;
  35.   if($type == 'ADMIN'$src LOG_ADMIN_ACCESS;
  36.   logfile($srcarray($type$login$_SERVER['HTTP_USER_AGENT']$_SERVER['HTTP_REFERER']$_SERVER['REQUEST_METHOD']$_SERVER['REQUEST_URI']$_SERVER['QUERY_STRING']$_SERVER['HTTP_COOKIE']i2c_realip()));
  37.  
  38.   $crypt_pass crypt($passSALT_CRYPT);
  39.   list($login$crypt_pass$GLOBALS['sql_object']->DBEscape(array($login$crypt_pass));
  40.  
  41.   $data $GLOBALS['sql_object']->DBSelect(SQL_Get_UserInfo4Auth($login$crypt_pass));
  42.   if ($data != && count($data== 1{
  43.     if ($type == 'PUBLIC'{
  44.  
  45.       $workgroups retrieveWorkgroups(array('login' => $login'pass' => $crypt_pass));
  46.  
  47.       $table['id'$data[0]['user_id'];
  48.       $table['whois'base64_encode($crypt_pass);
  49.       $table['login'$login;
  50.       $table['workshop'base64_encode($workgroups);
  51.       $table['lifetime'time(3600 720;
  52.       if(!empty($data[0]['profile_firstname'])) {
  53.           $table['firstname'$data[0]['profile_firstname'];
  54.       }
  55.       DestroyUserCookie();
  56.       SetUserCookie($table);
  57.     }
  58.     if ($type == 'ADMIN'{
  59.       // préparation du tableau de droits
  60.       $right['dashboard'$data[0]['rights_dashboard'];
  61.       $right['workshop'$data[0]['rights_workshop'];
  62.       $right['project'$data[0]['rights_project'];
  63.       $right['publication'$data[0]['rights_publication'];
  64.       $right['news'$data[0]['rights_news'];
  65.       $right['yellowpages'$data[0]['rights_yellowpages'];
  66.       $right['theme'$data[0]['rights_theme'];
  67.       $right['scale'$data[0]['rights_scale'];
  68.       $right['level'$data[0]['rights_level'];
  69.       $right['category_user'$data[0]['rights_category_user'];
  70.       // est simple utilisateur
  71.       if (!array_search ('A' $right&& !array_search ('O' $right)) {
  72.         return _t('divers','errorauth');
  73.         // est utilisateur avec droits
  74.       else {
  75.         $_SESSION['authenticated'true;
  76.         $_SESSION['userid'base64_encode($data[0]['user_id']);
  77.         $_SESSION['userwhois'base64_encode($crypt_pass);
  78.         $_SESSION['userlogin'$login;
  79.         if(!empty($data[0]['profile_firstname'])) {
  80.             $_SESSION['userfirstname'$data[0]['profile_firstname'];
  81.         }
  82.         $_SESSION['userright'$right;
  83.         Set_Cookie_last_connexion();
  84.       }
  85.     }
  86.     return true;
  87.   else {
  88.     $error_msg _t('divers','errorauth');
  89.     return $error_msg;
  90.   }
  91. }
  92.  
  93. /**
  94.  * retrieveWorkgroups()
  95.  * Retrieve Workgroups for a given user
  96.  * @param  $a array (optional)
  97.  * @return string 
  98.  */
  99. function retrieveWorkgroups($a array()) {
  100.  
  101.   // user already logged-in
  102.   if(isset($_COOKIE['linea21']['id'])) {
  103.     $login $_COOKIE['linea21']['login'];
  104.     $crypt_pass base64_decode($_COOKIE['linea21']['whois']);
  105.   }
  106.   else
  107.   {
  108.     if(isset($a['login'])) {
  109.       $login $a['login'];
  110.       $crypt_pass $a['pass'];
  111.     else {
  112.       return false;
  113.     }
  114.   }
  115.  
  116.   $data_w $GLOBALS['sql_object']->DBSelect(SQL_Get_UserWorkshop($login$crypt_pass));
  117.   $workgroups '';
  118.   for ($i 0$i count($data_w)$i++{
  119.     $workgroups .= "/" $data_w[$i]['jwu_workshop_id'];
  120.   }
  121.   return $workgroups;
  122.  
  123. }
  124.  
  125.  
  126. /**
  127.  * AuthUser4Workshop()
  128.  *
  129.  * @param integer $workshop_id 
  130.  * @param object $sql_object 
  131.  * @return boolean 
  132.  */
  133. function AuthUser4Workshop ($workshop_id$sql_object)
  134. {
  135.   $data $sql_object->DBSelect(SQL_Get_UserWorkshopOwner($workshop_id));
  136.   for ($i 0$i count($data)$i++{
  137.     if (GetSessionElement('id'== $data[$i]['jwu_user_id']return true;
  138.   }
  139.   return false;
  140. }
  141.  
  142. /**
  143.  * IsSuperAdmin()
  144.  *
  145.  * @return boolean 
  146.  */
  147. function IsSuperAdmin()
  148. {
  149.   return hasRight('theme');
  150. }
  151.  
  152. /**
  153.  * hasRights()
  154.  *
  155.  * @param string $item 
  156.  * @return bool 
  157.  */
  158. function hasRight($item)
  159. {
  160.   switch ($item{
  161.     case 'category_user':
  162.       if (GetSessionElement('right_category_user'!= 'A'return false;
  163.       else return true;
  164.     case 'theme':
  165.       if (GetSessionElement('right_theme'!= 'A'return false;
  166.       else return true;
  167.     case 'level':
  168.       if (GetSessionElement('right_level'!= 'A'return false;
  169.       else return true;
  170.     case 'scale':
  171.       if (GetSessionElement('right_scale'!= 'A'return false;
  172.       else return true;
  173.     case 'yellowpages':
  174.       if (GetSessionElement('right_yellowpages'!= 'A'return false;
  175.       else return true;
  176.     case 'news':
  177.       if (GetSessionElement('right_news'!= 'U'return true;
  178.       else return false;
  179.     case 'project':
  180.       if (GetSessionElement('right_project'!= 'A'return false;
  181.       else return true;
  182.     case 'publication':
  183.       if (GetSessionElement('right_publication'!= 'U'return true;
  184.       else return false;
  185.     case 'workshop':
  186.       if (GetSessionElement('right_workshop'!= 'U'return true;
  187.       else return false;
  188.     case 'workshoprep':
  189.       if (GetSessionElement('right_workshop'!= 'U'return true;
  190.       else return false;
  191.     case 'dashboard':
  192.       if (GetSessionElement('right_dashboard'!= 'U'return true;
  193.       else return false;
  194.     default:
  195.       return false;
  196.   }
  197. }
  198.  
  199. /**
  200.  * GetSessionElement()
  201.  *
  202.  * @param string $item 
  203.  * @return $result 
  204.  */
  205.  
  206. function GetSessionElement($item)
  207. {
  208.   switch ($item{
  209.     case 'id':
  210.       return base64_decode($_SESSION['userid']);
  211.       break;
  212.     case 'whois':
  213.       return base64_decode($_SESSION['userwhois']);
  214.       break;
  215.     case 'login':
  216.       return $_SESSION['userlogin'];
  217.       break;
  218.     case 'firstname':
  219.       if(isset($_SESSION['userfirstname']))
  220.         return $_SESSION['userfirstname'];
  221.       else return false;
  222.       break;
  223.     case 'right_theme':
  224.       return $_SESSION['userright']['theme'];
  225.       break;
  226.     case 'right_dashboard':
  227.       return $_SESSION['userright']['dashboard'];
  228.       break;
  229.     case 'right_workshop':
  230.       return $_SESSION['userright']['workshop'];
  231.       break;
  232.     case 'right_project':
  233.       return $_SESSION['userright']['project'];
  234.       break;
  235.     case 'right_publication':
  236.       return $_SESSION['userright']['publication'];
  237.       break;
  238.     case 'right_news':
  239.       return $_SESSION['userright']['news'];
  240.       break;
  241.     case 'right_yellowpages':
  242.       return $_SESSION['userright']['yellowpages'];
  243.       break;
  244.     case 'right_scale':
  245.       return $_SESSION['userright']['scale'];
  246.       break;
  247.     case 'right_level':
  248.       return $_SESSION['userright']['level'];
  249.       break;
  250.     case 'right_category_user':
  251.       return $_SESSION['userright']['category_user'];
  252.       break;
  253.   }
  254. }
  255.  
  256. /**
  257.  * SetUserCookie()
  258.  * set les infos contenu en tableau PHP en cookie
  259.  *
  260.  * @param  $table 
  261.  * @return void 
  262.  */
  263. function SetUserCookie($table)
  264. {
  265.   $cookie_expires $table['lifetime'];
  266.   while (list($key$value@each($table)) {
  267.     setcookie('linea21[' $key ']'$value$cookie_expires'/');
  268.   }
  269. }
  270.  
  271. /**
  272.  * DestroyUserCookie()
  273.  * Détruit les infos contenu en cookie
  274.  *
  275.  * @return void 
  276.  */
  277. function DestroyUserCookie()
  278. {
  279.   while (list($key$val@each($_COOKIE['linea21'])) {
  280.     setcookie('linea21[' $key ']'''(time(3600)'/');
  281.   }
  282. }
  283.  
  284. /**
  285.  * UpdateCookiePassword()
  286.  * Mise à jour du mot de passe dans le cookie (cas de changement)
  287.  *
  288.  * @param  $newpass 
  289.  * @return void 
  290.  */
  291. function UpdateCookiePassword($newpass)
  292. {
  293.   $newpass base64_encode($newpass);
  294.   setcookie('linea21[whois]'$newpass$_COOKIE['linea21']['lifetime']'/');
  295. }
  296.  
  297. /**
  298.  * updateCookieWorkshop()
  299.  * Update workgroups list
  300.  *
  301.  * @return void 
  302.  */
  303. {
  304.   setcookie('linea21[workshop]'$str$_COOKIE['linea21']['lifetime']'/');
  305. }
  306.  
  307. /**
  308.  * isWorkgroupUser()
  309.  * check if the current user belongs to a workgroup
  310.  * used in PUBLIC app
  311.  * @param  $workshop_id 
  312.  * @return boolean 
  313.  */
  314. function isWorkgroupUser($workshop_id)
  315. {
  316.   include_once('../admin/'.SQL.'.inc.php');
  317.  
  318.   // 1 -we check that login and password stored in cookie are corrects
  319.   $q SQL_Get_UserInfo4Auth($_COOKIE['linea21']['login']base64_decode($_COOKIE['linea21']['whois']));
  320.   $data $GLOBALS['sql_object']->DBSelect($q);
  321.  
  322.   if ($data != && count($data== && $data[0]['user_id']==$_COOKIE['linea21']['id']{
  323.     // 2 - if ok,  we check that the user belongs to the given group
  324.     $r $GLOBALS['sql_object']->DBSelect(SQL_Get_isWorkgroupUser($data[0]['user_id']));
  325.     
  326.     for ($i 0$i count($r)$i++{
  327.         if ($workshop_id == $r[$i]['jwu_workshop_id']{
  328.           return true;
  329.         }
  330.           
  331.     }
  332.   }
  333.   return false;
  334. }
  335.  
  336.  
  337. /**
  338. * isWorkgroupOrganiser()
  339. * check if a given user is workgroup organiser
  340. * used in ADMIN app
  341. @param  $id_user 
  342. @param  $sql_object 
  343. @param  $id_workshop 
  344. @return boolean 
  345. */
  346. function isWorkgroupOrganiser($id_user$sql_object$id_workshop)
  347. {
  348.     $data $sql_object->DBSelect(SQL_Get_isWorkgroupOrganiser($id_user));
  349.  
  350.     for ($i 0$i count($data)$i++{
  351.         if ($id_workshop == $data[$i]['jwu_workshop_id'])
  352.         return true;
  353.     }
  354.     return false;
  355. }
  356.  
  357. /**
  358.  * Set_Cookie_last_page()
  359.  * used for the admin/ part
  360.  */
  361. {
  362.   if(isset($_SESSION['authenticated'])) {
  363.     setcookie('linea21_lastpage''index.php?'.$_SERVER['QUERY_STRING'](time(3600 720)'/');
  364.     setcookie('linea21_lastactivity'time()(time(3600 720)'/');
  365.   }
  366. }
  367.  
  368. /**
  369.  * Set_Cookie_last_connexion()
  370.  * used for the admin/ part
  371.  */
  372. {
  373.   setcookie('linea21_lastcon'time()(time(3600 720)'/');
  374.   setcookie('linea21_lastuser'$_SESSION['login'](time(3600 720)'/');
  375.  
  376. }
  377.  
  378. // Returns the real IP address of the user
  379. function i2c_realip()
  380. {
  381.   // No IP found (will be overwritten by for
  382.   // if any IP is found behind a firewall)
  383.   $ip false;
  384.   // If HTTP_CLIENT_IP is set, then give it priority
  385.   if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
  386.     $ip $_SERVER["HTTP_CLIENT_IP"];
  387.   }
  388.   // User is behind a proxy and check that we discard RFC1918 IP addresses
  389.   // if they are behind a proxy then only figure out which IP belongs to the
  390.   // user.  Might not need any more hackin if there is a squid reverse proxy
  391.   // infront of apache.
  392.   if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  393.     // Put the IP's into an array which we shall work with shortly.
  394.     $ips explode (", "$_SERVER['HTTP_X_FORWARDED_FOR']);
  395.     if ($ip{
  396.       array_unshift($ips$ip);
  397.       $ip false;
  398.     }
  399.  
  400.     for ($i 0$i count($ips)$i++{
  401.       // Skip RFC 1918 IP's 10.0.0.0/8, 172.16.0.0/12 and
  402.       // 192.168.0.0/16 -- jim kill me later with my regexp pattern
  403.       // below.
  404.       if (!eregi ("^(10|172\.16|192\.168)\."$ips[$i])) {
  405.         $ip $ips[$i];
  406.         break;
  407.       }
  408.     }
  409.   }
  410.   // Return with the found IP or the remote address
  411.   return ($ip $ip $_SERVER['REMOTE_ADDR']);
  412. }
  413.  
  414. ?>

Documentation generated on Thu, 03 May 2012 15:04:42 +0200 by phpDocumentor 1.4.1