+ }
+
+ public function updateUserPerms($blog) {
+ global $core;
+ $this->buildFromSession();
+ if (!isset($_SESSION['auth-xorg'])) {
+ return;
+ }
+ $type = $blog->settings->xorgauth->get('xorg_blog_type');
+ $owner = $blog->settings->xorgauth->get('xorg_blog_owner');
+ $level = $this->xorg_infos['grpauth'];
+ $rec = $core->getUser($this->user_id);
+ $wasAdmin = $rec->f('user_super');
+ $isAdmin = $this->xorg_infos['perms'] == 'admin';
+ if (($wasAdmin && !$isAdmin) || (!$wasAdmin && $isAdmin)) {
+ $cur = new cursor($this->con, 'dc_user');
+ $cur->user_super = $isAdmin ? '1' : '0';
+ $core->updUser($this->user_id, $cur);
+ }
+ if ($_SESSION['xorg-group'] != $owner) {
+ $this->killSession();
+ return;
+ }
+ if (($type == 'group-admin' || $type == 'group-member' || $type == 'connected') && $level == 'admin') {
+ $perms = array('usage' => true,
+ 'contentadmin' => true,
+ 'admin' => true);
+ } else if ($type == 'group-member' && $level == 'membre') {
+ $perms = array('usage' => true);
+ } else if ($type == 'connected' && $this->xorg_infos['forlife'] != '') {
+ $perms = array('usage' => true);
+ } else if ($type == 'user' && $owner == $this->xorg_infos['forlife']) {
+ $perms = array('usage' => true,
+ 'contentadmin' => true,
+ 'admin' => true);
+ } else if ($type != 'user') {
+ $perms = array();
+ } else {
+ return;
+ }
+ $core->setUserBlogPermissions($_SESSION['auth-xorg'],
+ $blog->id,
+ $perms);
+ }
+
+
+ /** Xorg SSO API */
+
+ public function callXorg($path = null) {
+ $this->buildFromSession();
+ if (@$_SESSION['auth-xorg']) {
+ return true;
+ }
+ global $core;
+ if (!session_id()) {
+ $core->session->start();
+ }
+ if (is_null($path)) {
+ $path = @$_SERVER['PATH_INFO'];
+ }
+ $_SESSION["auth-x-challenge"] = md5(uniqid(rand(), 1));
+ $_SESSION['xorg-group'] = $core->blog->settings->xorgauth->get('xorg_blog_owner');
+ $url = "https://www.polytechnique.org/auth-groupex/utf8";
+ $url .= "?session=" . session_id();
+ $url .= "&challenge=" . $_SESSION["auth-x-challenge"];
+ $url .= "&pass=" . md5($_SESSION["auth-x-challenge"] . XORG_AUTH_KEY);
+ $type = $core->blog->settings->xorgauth->get('xorg_blog_type');
+ if ($type == 'group-member' || $type == 'group-admin' || $type == 'connected') {
+ $url .= '&group=' . $core->blog->settings->xorgauth->get('xorg_blog_owner');
+ }
+ $url .= "&url=" . urlencode($core->blog->url . "auth/XorgReturn?path=" . $path);
+ session_write_close();
+ header("Location: $url");
+ exit;