<?php
+if (!defined('DC_BLOG_ID')) {
+ define('DC_BLOG_ID', $_SERVER['DC_BLOG_ID']);
+}
+
class xorgAuth extends dcAuth {
public $xorg_infos = array('forlife' => null,
'prenom' => null,
'nom' => null,
'grpauth' => null,
'perms' => null);
- static public function behavior_coreBlogConstruct(&$blog) {
+ static public function behavior_coreBlogConstruct($blog) {
global $core;
$core->auth->sudo(array($core->auth, 'updateUserPerms'), $blog);
}
- public function __construct(&$core) {
+ public function __construct($core) {
parent::__construct($core);
$core->addBehavior('coreBlogConstruct', array('xorgAuth', 'behavior_coreBlogConstruct'));
}
$this->user_id = $user;
$this->user_admin = ($_SESSION['auth-xorg-perms'] == 'admin');
parent::checkUser($this->user_id);
- $core->getUserBlogs();
+// $core->getUserBlogs();
+ $this->setCommentCookie();
+ }
+ }
+
+ private function setCommentCookie() {
+ if (!isset($_COOKIE['comment_info_xorg']) || $_COOKIE['comment_info_xorg'] != $this->user_id) {
+ $cookie = $this->getInfo('user_displayname') . "\n" . $this->getInfo('user_email') . "\n" . $this->getInfo('user_url');
+ setcookie('comment_info_xorg', $this->user_id, time() + 30 * 86400, '/');
+ setrawcookie('comment_info', rawurlencode($cookie), time() + 30 * 86400, '/');
}
}
$cur = new cursor($this->con, 'dc_user');
$cur->user_id = $_SESSION['auth-xorg'];
$cur->user_pwd = md5(rand());
- $cur->user_super = ($_SESSION['auth-xorg-perms'] == 'admin');
+ $cur->user_super = ($_SESSION['auth-xorg-perms'] == 'admin') ? '1' : '0';
$cur->user_lang = 'fr';
$cur->user_name = $_SESSION['auth-xorg-nom'];
$cur->user_firstname = $_SESSION['auth-xorg-prenom'];
$cur->user_displayname = $cur->user_firstname . ' ' . $cur->user_name;
$cur->user_email = $_SESSION['auth-xorg'] . '@polytechnique.org';
- $cur->user_options = $core->userDefaults();
- $cur->user_options['post_xorg_perms'] = 'public';
- $cur->user_default_blog = 'default'; // FIXME
+ $cur->user_url = 'https://www.polytechnique.org/profile/' . $_SESSION['auth-xorg'];
+ $defaults = $core->userDefaults();
+ $defaults['post_xorg_perms'] = 'public';
+ $cur->user_options = $defaults;
+ $cur->user_lang = 'fr';
+ $cur->user_tz = 'Europe/Paris';
+ $cur->user_default_blog = $_SERVER['DC_BLOG_ID'];
$core->addUser($cur);
}
}
- public function updateUserPerms(&$blog) {
+ public function updateUserPerms($blog) {
global $core;
$this->buildFromSession();
if (!isset($_SESSION['auth-xorg'])) {
return;
}
- $type = $blog->settings->get('xorg_blog_type');
- $owner = $blog->settings->get('xorg_blog_owner');
+ $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->userID());
+ $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->userID(), $cur);
+ $core->updUser($this->user_id, $cur);
}
- if (($type == 'group-admin' || $type == 'group-member') && $level == 'admin') {
- if ($owner != $_SESSION['xorg-group']) {
- return;
- }
+ 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') {
- if ($owner != $_SESSION['xorg-group']) {
- return;
- }
+ $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,
/** Xorg SSO API */
public function callXorg($path = null) {
- if (is_null($path)) {
- $path = $_SERVER['REQUEST_URI'];
- }
$this->buildFromSession();
if (@$_SESSION['auth-xorg']) {
return true;
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->get('xorg_blog_type');
- if ($type == 'group-member' || $type == 'group-admin') {
- $_SESSION['xorg-group'] = $core->blog->settings->get('xorg_blog_owner');
- $url .= '&group=' . $core->blog->settings->get('xorg_blog_owner');
- } else {
- unset($_SESSION['xorg-group']);
+ $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();
$_SESSION['sess_blog_id'] = 'default';
$this->sudo(array($this, 'createUser'));
$path = $_GET['path'];
- header("Location: http://murphy.m4x.org" . $_GET['path']);
+ header('Location: ' . $core->blog->url . $_GET['path']);
exit;
}
unset($_SESSION['auth-xorg']);
$core->session->start();
}
$core->session->destroy();
- header('Location: ' . $core->blog->url);
+ if (!isset($core->blog)) {
+ $blog = $core->getBlog(DC_BLOG_ID);
+ } else {
+ $blog = $core->blog;
+ }
+ $url = @$blog->url;
+ if (!$url) {
+ $url = $blog->f('blog_url');
+ }
+
+ header('Location: ' . $url);
exit;
}
public function userID() {
$this->buildFromSession();
+ $isadmin = preg_match('@/admin/[^/]+\.php$@i', $_SERVER['SCRIPT_FILENAME']);
+ if (!$isadmin) {
+ return null;
+ }
return parent::userID();
}
- public function getPermissions() {
+ public function getPermissions($blog_id) {
$this->buildFromSession();
- return parent::getPermissions();
+ return parent::getPermissions($blog_id);
}
public function getInfo($n) {
$this->buildFromSession();
if ($n == 'xorg_group_member') {
global $core;
- if ($core->blog->settings('xorg_blog_owner') != $_SESSION['xorg-group']) {
+ if ($core->blog->settings->xorgauth->get('xorg_blog_owner') != $_SESSION['xorg-group']) {
return false;
}
$perm = $this->xorg_infos['grpauth'];
public function authForm() {
global $core;
- $path = "http://murphy.m4x.org/~x2003bruneau/dotclear/";
+ if (!isset($core->blog)) {
+ $blog = @$core->getBlog(DC_BLOG_ID);
+ } else {
+ $blog = $core->blog;
+ }
+ $path = @$blog->url;
+ if (!$path) {
+ $path = $blog->f('blog_url');
+ }
+
return '<fieldset>'.
- '<p><a href="' . $path . 'auth/Xorg?path=/~x2003bruneau/dotclear/admin/index.php">Via Polytechnique.org</a></p>' .
+ '<p><a href="' . $path . 'auth/Xorg?path=/admin/index.php">Via Polytechnique.org</a></p>' .
'</fieldset>'.
'<p>'.__('You must accept cookies in order to use the private area.').'</p>';
}