wish 145 : authentification avec l'alias melix
authorPascal Corpet <pascal.corpet@m4x.org>
Wed, 12 Jan 2005 15:58:16 +0000 (15:58 +0000)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Thu, 26 Jun 2008 21:27:30 +0000 (23:27 +0200)
git-archimport-id: opensource@polytechnique.org--2005/platal--mainline--0.9--patch-302

htdocs/javascript/do_challenge_response.js
include/xorg/session.inc.php
plugins/insert.getUserName.php
templates/password_prompt.tpl

index c78b435..f5c24ce 100644 (file)
@@ -26,6 +26,7 @@ function doChallengeResponse() {
     document.forms.loginsub.response.value = MD5(str);
     document.forms.loginsub.username.value = document.forms.login.username.value;
     document.forms.loginsub.remember.value = document.forms.login.remember.checked;
+    document.forms.loginsub.domain.value = document.forms.login.domain.value;
     document.forms.login.password.value = "";
     document.forms.loginsub.submit();
 }
index 3f994cc..5d6a71e 100644 (file)
@@ -74,17 +74,45 @@ class XorgSession extends DiogenesCoreSession
             $session =& Session::getMixed('session');
         }
 
-       if (Env::has('username') && Env::has('response') && isset($session->challenge))
+        if (Env::has('domain')) {
+            if (($domain = Env::get('domain', 'login')) == 'alias') {
+                setcookie('ORGdomain', "alias", (time()+25920000), '/', '', 0);
+            } else {
+                setcookie('ORGdomain', '', (time()-3600), '/', '', 0);
+            }
+            // pour que la modification soit effective dans le reste de la page
+            $_COOKIE['ORGdomain'] = $domain;
+        }
+
+        if (Env::has('username') && Env::has('response') && isset($session->challenge))
        {
            // si on vient de recevoir une identification par passwordpromptscreen.tpl
            // ou passwordpromptscreenlogged.tpl
             $uname = Env::get('username');
-           $field = preg_match('/^\d*$/', $uname) ? 'id' : 'alias';
+            
+            if ($domain == "alias") {
+            
+                $res = $globals->xdb->query(
+                    "SELECT redirect
+                       FROM virtual
+                 INNER JOIN virtual_redirect USING(vid)
+                      WHERE alias LIKE {?}", $uname."@".$globals->mail->alias_dom);
+                $redirect = $res->fetchOneCell();
+                if ($redirect) {
+                    $login = substr($redirect, 0, strpos($redirect, '@'));
+                } else {
+                    $login = "";
+                }
+            } else {
+                $login = $uname;
+            }
+
+           $field = (!$redirect && preg_match('/^\d*$/', $uname)) ? 'id' : 'alias';
            $res   = $globals->xdb->query(
                     "SELECT  u.user_id, u.password
                        FROM  auth_user_md5 AS u
                  INNER JOIN  aliases       AS a ON ( a.id=u.user_id AND type!='homonyme' )
-                      WHERE  a.$field = {?} AND u.perms IN('admin','user')", $uname);
+                      WHERE  a.$field = {?} AND u.perms IN('admin','user')", $login);
 
             $logger =& Session::getMixed('log');
 
@@ -163,6 +191,15 @@ class XorgSession extends DiogenesCoreSession
            $page->changeTpl('password_prompt.tpl');
             $page->addJsLink('javascript/do_challenge_response.js');
            $page->assign("xorg_tpl", "password_prompt.tpl");
+            
+            global $globals;
+            if ($globals->mail->alias_dom) {
+                $page->assign("domains", Array(
+                    $globals->mail->domain."/".$globals->mail->domain2,
+                    $globals->mail->alias_dom."/".$globals->mail->alias_dom2));
+                $page->assign("domains_value", Array("login", "alias"));
+                $page->assign("r_domain", Cookie::get('ORGdomain', 'login'));
+            }
            $page->run();
        }
        exit;
@@ -184,7 +221,7 @@ class XorgSession extends DiogenesCoreSession
     function getUsername($auth,$uid)
     {
        global $globals;
-       $res = $globals->xdb->query("SELECT alias FROM aliases WHERE id = {?} AND type='a_vie'", $uid);
+        $res = $globals->xdb->query("SELECT alias FROM aliases WHERE id = {?} AND type='a_vie'", $uid);
         return $res->fetchOneCell();
     }
 
index c70c54b..95782b9 100644 (file)
@@ -30,8 +30,24 @@ function smarty_insert_getUsername()
         return "";
     }
 
-    $res = $globals->xdb->query("SELECT  alias FROM aliases
-                                  WHERE  id={?} AND (type IN ('a_vie','alias') AND FIND_IN_SET('bestalias', flags))", $id);
-    return $res->fetchOneCell();
+    if (Cookie::get('ORGdomain', 'login') != 'alias') {
+       $res = $globals->xdb->query("SELECT  alias FROM aliases
+                                     WHERE  id={?} AND (type IN ('a_vie','alias') AND FIND_IN_SET('bestalias', flags))", $id);
+       return $res->fetchOneCell();
+    } else {
+       $res = $globals->xdb->query("
+               SELECT v.alias
+                 FROM virtual AS v
+           INNER JOIN virtual_redirect USING(vid)
+           INNER JOIN aliases AS a ON(id={?} AND a.type='a_vie')
+                 WHERE redirect = CONCAT(a.alias, {?}) 
+                      OR redirect = CONCAT(a.alias, {?})",
+               $id, "@".$globals->mail->domain, "@".$globals->mail->domain2);
+       $alias = $res->fetchOneCell();
+       return substr($alias, 0, strpos($alias, "@"));
+     }
+
+     return $login;
+     
 }
 ?>
index 8d06f56..fe487b6 100644 (file)
@@ -65,13 +65,23 @@ Si tu n'es pas {insert name="getName"}, change le login ci-dessous, ou rends-toi
     <tr>
       <th colspan="2">Connexion</th>
     </tr>
-    <tr>
+    <tr style="white-space: nowrap">
       <td class="titre">
+      {if $domains}
+        Adresse email :
+      {else}
         Login (prenom.nom) :
+      {/if}
       </td>
       <td>
         <input type="text" name="username" size="20" maxlength="50"
           value="{insert name="getUserName"}" />
+        {if $domains}
+          @
+        <select name="domain">
+        {html_options values=$domains_value output=$domains selected=$r_domain}
+        </select>
+        {/if}
       </td>
     </tr>
     <tr>
@@ -89,6 +99,8 @@ Si tu n'es pas {insert name="getName"}, change le login ci-dessous, ou rends-toi
       </td>
     </tr>
     <tr>
+      <td colspan="2">
+      <table width="100%"><tr>
       <td>
         <img src="{rel}/images/pi.png" alt=" [ ? ] " />
         <a href="{rel}/recovery.php">mot de passe perdu ?</a>
@@ -96,6 +108,8 @@ Si tu n'es pas {insert name="getName"}, change le login ci-dessous, ou rends-toi
       <td class="right">
         <input type="submit" name="submitbtn" value="Envoyer" />
       </td>
+      </tr></table>
+      </td>
     </tr>
   </table>
 </form>
@@ -119,6 +133,7 @@ Probl
     <input type="hidden" name="response"  value="" />
     <input type="hidden" name="username"  value="" />
     <input type="hidden" name="remember"  value="" />
+    <input type="hidden" name="domain"    value="" />
   </div>
 </form>