class xorgAuth extends dcAuth {
public $xorg_infos = array('forlife' => null,
'prenom' => null,
- 'nom' => null);
+ 'nom' => null,
+ 'grpauth' => null,
+ 'perms' => null);
+ static public function behavior_coreBlogConstruct(&$blog) {
+ global $core;
+ $core->auth->sudo(array($core->auth, 'updateUserPerms'), $blog);
+ }
+
public function __construct(&$core) {
parent::__construct($core);
+ $core->addBehavior('coreBlogConstruct', array('xorgAuth', 'behavior_coreBlogConstruct'));
}
public function buildFromSession() {
$this->xorg_infos[$key] = $_SESSION['auth-xorg-' . $key];
}
$this->user_id = $user;
+ $this->user_admin = ($_SESSION['auth-xorg-perms'] == 'admin');
parent::checkUser($this->user_id);
- if (isset($core->blog)) {
- $this->sudo(array($this, 'updateUserPerms'));
- }
$core->getUserBlogs();
}
}
$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_lang = 'fr';
$cur->user_name = $_SESSION['auth-xorg-nom'];
$cur->user_firstname = $_SESSION['auth-xorg-prenom'];
}
}
- private function updateUserPerms() {
+ 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');
+ $level = $this->xorg_infos['grpauth'];
+ $rec = $core->getUser($this->userID());
+ $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);
+ }
+ if (($type == 'group-admin' || $type == 'group-member') && $level == 'admin') {
+ if ($owner != $_SESSION['xorg-group']) {
+ return;
+ }
+ $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 == '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'],
- $core->blog->id,
- array('usage' => true,
- 'contentadmin' => true,
- 'admin' => true));
+ $blog->id,
+ $perms);
}
$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']);
+ }
$url .= "&url=" . urlencode($core->blog->url . "auth/XorgReturn?path=" . $path);
session_write_close();
header("Location: $url");
public function getInfo($n) {
$this->buildFromSession();
+ if ($n == 'xorg_group_member') {
+ global $core;
+ if ($core->blog->settings('xorg_blog_owner') != $_SESSION['xorg-group']) {
+ return false;
+ }
+ $perm = $this->xorg_infos['grpauth'];
+ return $this->isSuperAdmin() || $perm == 'admin' || $perm == 'membre';
+ }
return parent::getInfo($n);
}
$this->buildFromSession();
return parent::getOption($n);
}
-/*
- public function isSuperAdmin() {
- return parent::isSuperAdmin() || ($this->user_id == 'florent.bruneau.2003');
- }
-*/
+
public function getOptions() {
$this->buildFromSession();
return parent::getOptions();