X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fxnet%2Fsession.inc.php;h=2159954ce170a96098d2485c68820a927d501ccf;hb=eaf30d86cc99df2414cf4f171a9b0f11b0561e3b;hp=83e3a72e3c556a7ab4bb9c443bd26afe17b43eb9;hpb=cab0809050d58f8484608e91f7555ebd69dcb451;p=platal.git diff --git a/include/xnet/session.inc.php b/include/xnet/session.inc.php index 83e3a72..2159954 100644 --- a/include/xnet/session.inc.php +++ b/include/xnet/session.inc.php @@ -1,6 +1,6 @@ asso()) { + $perms = S::v('perms'); + $perms->rmFlag('groupadmin'); + $perms->rmFlag('groupmember'); + $perms->rmFlag('groupannu'); + if (may_update()) { + $perms->addFlag('groupadmin'); + $perms->addFlag('groupmember'); + $perms->addFlag('groupannu'); + } + if (is_member()) { + $perms->addFlag('groupmember'); + if ($globals->asso('pub') == 'public') { + $perms->addFlag('groupannu'); + } + } + if ($globals->asso('cat') == 'Promotions') { + $perms->addFlag('groupannu'); + } + $_SESSION['perms'] = $perms; + } } // }}} - // {{{ function destroy() + // {{{ public static function destroy() - function destroy() { + public static function destroy() { S::destroy(); XnetSession::init(); } // }}} - // {{{ function doAuth() + // {{{ public static function doAuth() /** Try to do an authentication. * * @param page the calling page (by reference) */ - function doAuth(&$page) + public static function doAuth() { - if (S::identified()) { // ok, c'est bon, on n'a rien à faire - return true; - } + if (S::identified()) { // ok, c'est bon, on n'a rien à faire + return true; + } if (Get::has('auth')) { - return XnetSession::doAuthX($page); - } else { - XnetSession::doLogin($page); + return XnetSession::doAuthX(); } + + return false; + } + + // }}} + // {{{ doAuthCookie + + public static function doAuthCookie() { + return XnetSession::doAuth(); } // }}} // {{{ doAuthX - function doAuthX(&$page) { - global $globals; + public static function doAuthX() + { + global $globals, $page; - if (md5('1'.S::v('challenge').$globals->xnet->secret.Get::getInt('uid').'1') != Get::get('auth')) { + if (md5('1'.S::v('challenge').$globals->xnet->secret.Get::i('uid').'1') != Get::v('auth')) { $page->kill("Erreur d'authentification avec polytechnique.org !"); } @@ -95,65 +120,123 @@ class XnetSession INNER JOIN aliases AS a ON (u.user_id = a.id AND a.type='a_vie') INNER JOIN aliases AS a2 ON (u.user_id = a2.id AND FIND_IN_SET('bestalias',a2.flags)) WHERE u.user_id = {?} AND u.perms IN('admin','user') - LIMIT 1", Get::getInt('uid')); + LIMIT 1", Get::i('uid')); $_SESSION = array_merge($_SESSION, $res->fetchOneAssoc()); $_SESSION['auth'] = AUTH_MDP; + require_once 'xorg/session.inc.php'; + $_SESSION['perms'] =& XorgSession::make_perms(S::v('perms')); S::kill('challenge'); S::kill('loginX'); + S::kill('may_update'); + S::kill('is_member'); Get::kill('auth'); Get::kill('uid'); + $path = Get::v('n'); + Get::kill('n'); + Get::kill('PHPSESSID'); + $args = array(); - foreach($_GET as $key=>$val) { + foreach($_GET as $key => $val) { $args[] = urlencode($key).'='.urlencode($val); } - redirect($_SERVER['PHP_SELF'] . '?' . join('&', $args)); + + http_redirect($globals->baseurl . '/' . $path, join('&', $args)); + } + + // }}} + // {{{ doSelfSuid + + public static function doSelfSuid() + { + if (!S::has('suid')) { + $_SESSION['suid'] = $_SESSION; + } + require_once 'xorg/session.inc.php'; + $_SESSION['perms'] =& XorgSession::make_perms('user'); } // }}} - // {{{ doLogin + // {{{ killSuid - function doLogin(&$page) { - redirect(S::v('loginX')); + public static function killSuid() + { + if (!S::has('suid')) { + return; + } + $suid = S::v('suid'); + S::kill('suid'); + S::kill('may_update'); + S::kill('is_member'); + $_SESSION['perms'] = $suid['perms']; } // }}} } // }}} -// {{{ may_update +// {{{ function may_update + +/** Return administration rights for the current asso + * @param force Force administration rights to be read from database + * @param lose Force administration rights to be false + */ +function may_update($force = false, $lose = false) +{ + if (!isset($_SESSION['may_update'])) { + $_SESSION['may_update'] = array(); + } + $may_update =& $_SESSION['may_update']; -function may_update() { global $globals; - if (!$globals->asso('id')) { return false; } - if (S::has_perms()) { return true; } - $res = XDB::query( - "SELECT perms - FROM groupex.membres - WHERE uid={?} AND asso_id={?}", S::v('uid'), $globals->asso('id')); - return $res->fetchOneCell() == 'admin'; + $asso_id = $globals->asso('id'); + if (!$asso_id) { + return false; + } elseif ($lose) { + $may_update[$asso_id] = false; + } elseif (S::has_perms() || (S::has('suid') && $force)) { + $may_update[$asso_id] = true; + } elseif (!isset($may_update[$asso_id]) || $force) { + $res = XDB::query("SELECT perms + FROM groupex.membres + WHERE uid={?} AND asso_id={?}", + S::v('uid'), $asso_id); + $may_update[$asso_id] = ($res->fetchOneCell() == 'admin'); + } + return $may_update[$asso_id]; } // }}} -// {{{ is_member +// {{{ function is_member + +/** Get membership informations for the current asso + * @param force Force membership to be read from database + * @param lose Force membership to be false + */ +function is_member($force = false, $lose = false) +{ + if (!isset($_SESSION['is_member'])) { + $_SESSION['is_member'] = array(); + } + $is_member =& $_SESSION['is_member']; -function is_member() { global $globals; $asso_id = $globals->asso('id'); - if (!$asso_id) { return false; } - static $is_member; - if (!$is_member) $is_member = array(); - if (!isset($is_member[$asso_id])) - { - $res = XDB::query( - "SELECT COUNT(*) - FROM groupex.membres - WHERE uid={?} AND asso_id={?}", + if (!$asso_id) { + return false; + } elseif ($lose) { + $is_member[$asso_id] = false; + } elseif (S::has('suid') && $force) { + $is_member[$asso_id] = true; + } elseif (!isset($is_member[$asso_id]) || $force) { + $res = XDB::query("SELECT COUNT(*) + FROM groupex.membres + WHERE uid={?} AND asso_id={?}", S::v('uid'), $asso_id); - $is_member[$asso_id] = $res->fetchOneCell() == 1; + $is_member[$asso_id] = ($res->fetchOneCell() == 1); } return $is_member[$asso_id]; } // }}} -// vim:set et sw=4 sts=4 sws=4 foldmethod=marker: +// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: ?>