From 57c70624691969c4ea61eda0b36560f14203e09d Mon Sep 17 00:00:00 2001 From: Pascal Corpet Date: Wed, 12 Jan 2005 15:58:16 +0000 Subject: [PATCH] wish 145 : authentification avec l'alias melix git-archimport-id: opensource@polytechnique.org--2005/platal--mainline--0.9--patch-302 --- htdocs/javascript/do_challenge_response.js | 1 + include/xorg/session.inc.php | 45 +++++++++++++++++++++++++++--- plugins/insert.getUserName.php | 22 +++++++++++++-- templates/password_prompt.tpl | 17 ++++++++++- 4 files changed, 77 insertions(+), 8 deletions(-) diff --git a/htdocs/javascript/do_challenge_response.js b/htdocs/javascript/do_challenge_response.js index c78b435..f5c24ce 100644 --- a/htdocs/javascript/do_challenge_response.js +++ b/htdocs/javascript/do_challenge_response.js @@ -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(); } diff --git a/include/xorg/session.inc.php b/include/xorg/session.inc.php index 3f994cc..5d6a71e 100644 --- a/include/xorg/session.inc.php +++ b/include/xorg/session.inc.php @@ -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(); } diff --git a/plugins/insert.getUserName.php b/plugins/insert.getUserName.php index c70c54b..95782b9 100644 --- a/plugins/insert.getUserName.php +++ b/plugins/insert.getUserName.php @@ -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; + } ?> diff --git a/templates/password_prompt.tpl b/templates/password_prompt.tpl index 8d06f56..fe487b6 100644 --- a/templates/password_prompt.tpl +++ b/templates/password_prompt.tpl @@ -65,13 +65,23 @@ Si tu n'es pas {insert name="getName"}, change le login ci-dessous, ou rends-toi Connexion - + + {if $domains} + Adresse email : + {else} Login (prenom.nom) : + {/if} + {if $domains} + @ + + {/if} @@ -89,6 +99,8 @@ Si tu n'es pas {insert name="getName"}, change le login ci-dessous, ou rends-toi + + +
 [ ? ] mot de passe perdu ? @@ -96,6 +108,8 @@ Si tu n'es pas {insert name="getName"}, change le login ci-dessous, ou rends-toi
+ @@ -119,6 +133,7 @@ Probl + -- 2.1.4