Support https in blog URLs
[dotclear.git] / class.xorg.auth.php
index 868cdfd..e2290b8 100644 (file)
@@ -10,12 +10,12 @@ class xorgAuth extends dcAuth {
                              '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'));
   }
@@ -38,7 +38,16 @@ class xorgAuth extends dcAuth {
       $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, '/');
     }
   }
 
@@ -48,46 +57,52 @@ class xorgAuth extends dcAuth {
       $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_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 ($_SESSION['xorg-group'] != $owner) {
       $this->killSession();
       return;
     }
-    if (($type == 'group-admin' || $type == 'group-member') && $level == 'admin') {
+    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,
@@ -95,7 +110,6 @@ class xorgAuth extends dcAuth {
     } else if ($type != 'user') {
       $perms = array();
     } else {
-        echo "bad session";
       return;
     }
     $core->setUserBlogPermissions($_SESSION['auth-xorg'],
@@ -119,14 +133,14 @@ class xorgAuth extends dcAuth {
       $path = @$_SERVER['PATH_INFO'];
     }
     $_SESSION["auth-x-challenge"] = md5(uniqid(rand(), 1));
-    $_SESSION['xorg-group'] = $core->blog->settings->get('xorg_blog_owner');
+    $_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') {
-      $url .= '&group=' . $core->blog->settings->get('xorg_blog_owner');
+    $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();
@@ -212,19 +226,23 @@ class xorgAuth extends dcAuth {
 
   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'];