X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fxnetsession.php;h=27ed4d8b638549643b29121c90d5d462a8ddf932;hb=a67a14b4ab7ea2661f7cdbd1e201be6a0aaf6193;hp=cb125d5fafcebd4e43a11f7c802e6a32b563795d;hpb=2db80ab6f7d054ec274c66f7ba983f49596b81cf;p=platal.git diff --git a/classes/xnetsession.php b/classes/xnetsession.php index cb125d5..27ed4d8 100644 --- a/classes/xnetsession.php +++ b/classes/xnetsession.php @@ -1,6 +1,6 @@ trigErrorRedirect('Ce formulaire d\'authentification est réservé aux extérieurs à la communauté polytechnicienne.', ''); + } + + $user = parent::doAuth(AUTH_MDP); + if (is_null($user)) { + return false; + } + if (!parent::checkAuth(AUTH_MDP) || !parent::startSessionAs($user, AUTH_MDP)) { + $this->destroy(); + return false; + } + } + global $globals; - if (!S::logged()) { + if (!S::logged() && $globals->xnet->auth_baseurl) { // prevent connection to be linked to disconnection if (($i = strpos($_SERVER['REQUEST_URI'], 'exit')) !== false) $returl = "http://{$_SERVER['SERVER_NAME']}".substr($_SERVER['REQUEST_URI'], 0, $i); else $returl = "http://{$_SERVER['SERVER_NAME']}{$_SERVER['REQUEST_URI']}"; - $url = "https://www.polytechnique.org/auth-groupex"; + $url = $globals->xnet->auth_baseurl; $url .= "?session=" . session_id(); $url .= "&challenge=" . S::v('challenge'); $url .= "&pass=" . md5(S::v('challenge') . $globals->xnet->secret); @@ -64,6 +84,8 @@ class XnetSession extends XorgSession if ($globals->asso('pub') != 'private') { $perms->addFlag('groupannu'); } + } else if ($globals->asso('pub') == 'public') { + $perms->addFlag('groupannu'); } if ($globals->asso('cat') == 'Promotions') { $perms->addFlag('groupannu'); @@ -76,7 +98,7 @@ class XnetSession extends XorgSession protected function doAuth($level) { if (S::identified()) { // ok, c'est bon, on n'a rien à faire - return User::getSilentWithValues(null, array('user_id' => S::i('uid'))); + return User::getSilentWithValues(null, array('uid' => S::i('uid'))); } if (!Get::has('auth')) { return null; @@ -87,25 +109,33 @@ class XnetSession extends XorgSession } Get::kill('auth'); S::set('auth', AUTH_MDP); - return User::getSilentWithValues(null, array('user_id' => Get::i('uid'))); + return User::getSilentWithValues(null, array('uid' => Get::i('uid'))); } protected function startSessionAs($user, $level) { + // The user must have 'groups' permission to access X.net + if (!$user->checkPerms('groups')) { + return false; + } if ($level == AUTH_SUID) { S::set('auth', AUTH_MDP); } - $res = XDB::query("SELECT a.uid, a.hruid, a.display_name, a.full_name, - a.sex = 'female' AS femme, - a.email_format, a.token, - at.perms, a.is_admin - FROM accounts AS a - INNER JOIN account_types AS at ON (at.type = a.type) - WHERE a.uid = {?} AND a.state = 'active' - LIMIT 1", $user->id()); - $sess = $res->fetchOneAssoc(); - $_SESSION = array_merge($_SESSION, $sess); - $this->makePerms(S::s('perms'), S::b('is_admin')); + + S::set('uid', $user->uid); + S::set('hruid', $user->hruid); + + // XXX: Transition code, should not be in session anymore + S::set('display_name', $user->display_name); + S::set('full_name', $user->full_name); + S::set('femme', $user->isFemale()); + S::set('email_format', $user->email_format); + S::set('token', $user->token); + S::set('perms', $user->perms); + S::set('is_admin', $user->is_admin); + + + $this->makePerms($user->perms, $user->is_admin); S::kill('challenge'); S::kill('loginX'); S::kill('may_update'); @@ -126,7 +156,7 @@ class XnetSession extends XorgSession if (!$this->startSUID($user)) { return false; } - S::set('perms', User::makePerms('user')); + S::set('perms', User::makePerms(PERMS_USER)); return true; } @@ -166,7 +196,7 @@ function may_update($force = false, $lose = false) $may_update[$asso_id] = true; } elseif (!isset($may_update[$asso_id]) || $force) { $res = XDB::query("SELECT perms - FROM groupex.membres + FROM group_members WHERE uid={?} AND asso_id={?}", S::v('uid'), $asso_id); $may_update[$asso_id] = ($res->fetchOneCell() == 'admin'); @@ -198,7 +228,7 @@ function is_member($force = false, $lose = false) $is_member[$asso_id] = true; } elseif (!isset($is_member[$asso_id]) || $force) { $res = XDB::query("SELECT COUNT(*) - FROM groupex.membres + FROM group_members WHERE uid={?} AND asso_id={?}", S::v('uid'), $asso_id); $is_member[$asso_id] = ($res->fetchOneCell() == 1);