From 08ea197e941a86a6fce37b5e657d2b359bb7028d Mon Sep 17 00:00:00 2001 From: "Pierre Habouzit (MadCoder" Date: Sun, 12 Dec 2004 19:28:12 +0000 Subject: [PATCH] refactor code. get_user_login takes an uid, any alias, or any email address and gives one valid alias or false git-archimport-id: opensource@polytechnique.org--2005/platal--mainline--0.9--patch-69 --- .../TESTS/{xorg_errors.inc.php => xorg_errors.php} | 0 htdocs/TESTS/xorg_user.php | 53 +++++++++++++++ htdocs/admin/utilisateurs.php | 71 +++++--------------- include/user.func.inc.php | 77 ++++++++++++++++++++++ templates/alias.tpl | 6 +- 5 files changed, 149 insertions(+), 58 deletions(-) rename htdocs/TESTS/{xorg_errors.inc.php => xorg_errors.php} (100%) create mode 100644 htdocs/TESTS/xorg_user.php diff --git a/htdocs/TESTS/xorg_errors.inc.php b/htdocs/TESTS/xorg_errors.php similarity index 100% rename from htdocs/TESTS/xorg_errors.inc.php rename to htdocs/TESTS/xorg_errors.php diff --git a/htdocs/TESTS/xorg_user.php b/htdocs/TESTS/xorg_user.php new file mode 100644 index 0000000..1470e65 --- /dev/null +++ b/htdocs/TESTS/xorg_user.php @@ -0,0 +1,53 @@ +UnitTestCase('XOrg Users Test'); + } + + function test_get_user_login() { + global $page; + + $login = get_user_login(18742); + $this->assertIdentical($login, 'pierre.habouzit.2000'); + + $login = get_user_login(100000000); + $this->assertIdentical($login, false); + + + $login = get_user_login("madcoder@melix.org"); + $this->assertIdentical($login, 'pierre.habouzit.2000'); + + $login = get_user_login("madcoder@melix.net"); + $this->assertIdentical($login, 'pierre.habouzit.2000'); + + + $login = get_user_login("madcoder@polytechnique.org"); + $this->assertIdentical($login, 'madcoder'); + + $login = get_user_login("madcoder@m4x.org"); + $this->assertIdentical($login, 'madcoder'); + + + $login = get_user_login("pierre.habouzit.2000"); + $this->assertIdentical($login, 'pierre.habouzit.2000'); + + $login = get_user_login("pierre.habouzit.2001"); + $this->assertIdentical($login, false); + + + $login = get_user_login("madcoder@olympe.madism.org"); + $this->assertIdentical($login, 'pierre.habouzit.2000'); + + unset($page); + } +} + +$test = &new TestOfXOrgUsers(); +$test->run(new HtmlReporter()); +?> diff --git a/htdocs/admin/utilisateurs.php b/htdocs/admin/utilisateurs.php index 39c4e97..b192439 100644 --- a/htdocs/admin/utilisateurs.php +++ b/htdocs/admin/utilisateurs.php @@ -22,6 +22,7 @@ require_once("xorg.inc.php"); new_admin_page('admin/utilisateurs.tpl'); require_once("emails.inc.php"); +require_once("user.func.inc.php"); /* * Already in SUID ? @@ -31,23 +32,26 @@ if (isset($_SESSION['suid'])) { $page->kill("déjà en SUID !!!"); } +$login = isset($_REQUEST['login']) ? get_user_login($_REQUEST['login']) : false; + + /* * LOGS de l'utilisateur */ -if(isset($_REQUEST['logs_button'])) { - header("Location: logger.php?loguser={$_REQUEST['login']}&year=".date('Y')."&month=".date('m')); +if(isset($_REQUEST['logs_button']) && $login) { + header("Location: logger.php?loguser=$login&year=".date('Y')."&month=".date('m')); } /* * SUID */ -if(isset($_REQUEST['suid_button']) and isset($_REQUEST['login']) and !isset($_SESSION['suid'])) { - $log_data = $_REQUEST['login']." by ".$_SESSION['forlife']; +if(isset($_REQUEST['suid_button']) and $login and !isset($_SESSION['suid'])) { + $log_data = "login by ".$_SESSION['forlife']; $_SESSION['log']->log("suid_start",$log_data); $_SESSION['suid'] = $_SESSION; - $r=$globals->db->query("SELECT id FROM aliases WHERE alias='{$_REQUEST['login']}'"); + $r=$globals->db->query("SELECT id FROM aliases WHERE alias='$login'"); if(list($uid) = mysql_fetch_row($r)) { start_connexion($uid,true); header("Location: ../"); @@ -60,57 +64,16 @@ if(isset($_REQUEST['suid_button']) and isset($_REQUEST['login']) and !isset($_SE * LE RESTE */ -if (!empty($_REQUEST['login'])) { - $needle = strtolower($_REQUEST['login']); - - if (strstr($needle, '@')!==false) { - list($mbox, $fqdn) = split('@', $needle); - if ($fqdn=='polytechnique.org' || $fqdn=='m4x.org') { - $login = $mbox; - } elseif ($fqdn =='melix.net' || $fqdn=='melix.org') { - $res = $globals->db->query("SELECT redirect - FROM virtual_redirect - INNER JOIN virtual USING(vid) - WHERE alias='$mbox@melix.net'"); - if (list($redir) = mysql_fetch_row($res)) { - list($login) = split('@', $redir); - } else { - $page->trig("il n'y a pas d'utilisateur avec cet alias melix"); - } - mysql_free_result($res); - } else { - $res = $globals->db->query("SELECT alias - FROM aliases AS a - INNER JOIN emails AS e ON e.uid=a.id - WHERE e.email='$needle' AND a.type='a_vie'"); - if (($i=mysql_num_rows($res))!=1) { - if ($i) { - $aliases = Array(); - while (list($a) = mysql_fetch_row($res)) $aliases[] = $a; - $page->trig("Il y a $i utilisateurs avec cette adresse mail : ".join(', ', $aliases)); - } else { - $page->trig("il n'y a pas d'utilisateur avec cette adresse mail"); - } - } else { - list($login) = mysql_fetch_row($res); - } - mysql_free_result($res); - } +if ($login) { + $r=$globals->db->query("SELECT * + FROM auth_user_md5 AS u + INNER JOIN aliases AS a ON ( a.id = u.user_id AND a.alias='$login' AND type!='homonyme' )"); + if ($tmp = mysql_fetch_assoc($r)) { + $mr =& $tmp; } else { - $login = $needle; - } - - if (!empty($login)) { - $r=$globals->db->query("SELECT * - FROM auth_user_md5 AS u - INNER JOIN aliases AS a ON ( a.id = u.user_id AND a.alias='$login' AND type!='homonyme' )"); - if ($tmp = mysql_fetch_assoc($r)) { - $mr =& $tmp; - } else { - $page->trig("il n'y a pas d'utilisateur avec ce login (ou alors il a des homonymes)"); - } - mysql_free_result($r); + $page->trig("il n'y a pas d'utilisateur avec ce login (ou alors il a des homonymes)"); } + mysql_free_result($r); } if (!empty($_REQUEST['user_id'])) { diff --git a/include/user.func.inc.php b/include/user.func.inc.php index e0879fc..aaea635 100644 --- a/include/user.func.inc.php +++ b/include/user.func.inc.php @@ -67,6 +67,83 @@ function user_clear_all_subs($user_id, $really_del=true) } // }}} +// {{{ function get_user_login() +function get_user_login($data) { + global $globals, $page; + + if (preg_match(',^[0-9]*$,', $data)) { + $res = $globals->db->query("SELECT alias FROM aliases WHERE type='a_vie' AND id=$data"); + if (!mysql_num_rows($res)) { + $alias = false; + } else { + list($alias) = mysql_fetch_row($res); + } + mysql_free_result($res); + return $alias; + } + + $data = trim(strtolower($data)); + + if (strstr($data, '@')===false) { + $data = $data.'@'.$globals->mail->domain; + } + + list($mbox, $fqdn) = split('@', $data); + if ($fqdn == $globals->mail->domain || $fqdn == $globals->mail->domain2) { + + $res = $globals->db->query("SELECT COUNT(alias) FROM aliases WHERE alias='$mbox' AND type IN ('alias', 'a_vie')"); + list($c) = mysql_fetch_row($res); + mysql_free_result($res); + if (!$c && $page) { + $page->trig("il n'y a pas d'utilisateur avec ce login"); + } + return $c ? $mbox : false; + + } elseif ($fqdn == $globals->mail->alias_dom || $fqdn == $globals->mail->alias_dom2) { + + $res = $globals->db->query("SELECT redirect + FROM virtual_redirect + INNER JOIN virtual USING(vid) + WHERE alias='$mbox@{$globals->mail->alias_dom}'"); + if (list($redir) = mysql_fetch_row($res)) { + list($alias) = split('@', $redir); + } else { + $page->trig("il n'y a pas d'utilisateur avec cet alias"); + $alias = false; + } + mysql_free_result($res); + return $alias; + + } else { + + $res = $globals->db->query("SELECT alias + FROM aliases AS a + INNER JOIN emails AS e ON e.uid=a.id + WHERE e.email='$data' AND a.type='a_vie'"); + switch ($i = mysql_num_rows($res)) { + case 0: + $page->trig("il n'y a pas d'utilisateur avec cette addresse mail"); + $alias = false; + break; + + case 1: + list($alias) = mysql_fetch_row($res); + break; + + default: + $alias = false; + if (has_perms()) { + $aliases = Array(); + while (list($a) = mysql_fetch_row($res)) $aliases[] = $a; + $page->trig("Il y a $i utilisateurs avec cette adresse mail : ".join(', ', $aliases)); + } + } + mysql_free_result($res); + return $alias; + } +} + +// }}} // vim:set et sw=4 sts=4 sws=4 foldmethod=marker: ?> diff --git a/templates/alias.tpl b/templates/alias.tpl index e3fab2d..9d9893e 100644 --- a/templates/alias.tpl +++ b/templates/alias.tpl @@ -19,8 +19,8 @@ ***************************************************************************} +{dynamic} {if $success} - {dynamic}

a demande de création des alias {$success}@{#globals.mail.alias_dom#} et {$success}@{#globals.mail.alias_dom2#} a bien été enregistrée. Après @@ -29,7 +29,6 @@

Encore merci de nous faire confiance pour tes e-mails !

- {/dynamic} {else}

Adresses e-mail personnalisées @@ -45,7 +44,6 @@ sans doute à toutes tes questions

- {dynamic} {if $actuel}

Note : tu as déjà l'alias {$actuel}, or tu ne peux avoir qu'un seul alias à la fois. @@ -83,7 +81,7 @@ - {/dynamic} {/if} +{/dynamic} {* vim:set et sw=2 sts=2 sws=2: *} -- 2.1.4