OpenArena FR

Communauté Francophone d'OpenArena

Vous n'êtes pas identifié(e).

#1 25/07/2008 15:03:43

Cacatoes
Passionné(e) d'ArèneOuverte
Lieu : Lille
Inscription : 14/07/2008
Messages : 1 284
Site Web

Authentification commune wiki forum

J'ai activé ça, pour rappel :

Dokuwiki - inc/auth/fluxbb.class.php

<?php
/**
 * FluxBB auth backend
 *
 * Uses external Trust mechanism to check against FluxBB's
 * user cookie. FluxBB's FORUM_ROOT must be defined correctly.
 *
 * @author    Andreas Gohr <andi@splitbrain.org>
 */

if(!defined('FORUM_ROOT')) define('FORUM_ROOT', DOKU_INC.'../forums/');
define('FORUM_DISABLE_CSRF_CONFIRM', 1);
require_once FORUM_ROOT.'include/common.php';
require_once DOKU_INC.'inc/auth/mysql.class.php';

#dbg($GLOBALS);
#dbg($forum_user);

class auth_fluxbb extends auth_mysql {

  /**
   * Constructor.
   *
   * Sets additional capabilities and config strings
   */
  function auth_fluxbb(){
    global $conf;
    $this->cando['external'] = true;
    $this->cando['logoff']   = true;

    $conf['passcrypt'] = 'sha1';

    // get global vars from fluxbb config
    global $db_host;
    global $db_name;
    global $db_username;
    global $db_password;
    global $db_prefix;

    // now set up the mysql config strings
    $conf['auth']['mysql']['server']   = $db_host;
    $conf['auth']['mysql']['user']     = $db_username;
    $conf['auth']['mysql']['password'] = $db_password;
    $conf['auth']['mysql']['database'] = $db_name;

    $conf['auth']['mysql']['checkPass']   = "SELECT u.password AS pass
                                               FROM ${db_prefix}users AS u, ${db_prefix}groups AS g
                                              WHERE u.group_id = g.g_id
                                                AND u.username = '%{user}'
                                                AND g.g_title   != 'Guest'";
    $conf['auth']['mysql']['getUserInfo'] = "SELECT password AS pass, realname AS name, email AS mail,
                                                    id, g_title as `group`
                                               FROM ${db_prefix}users AS u, ${db_prefix}groups AS g
                                              WHERE u.group_id = g.g_id
                                                AND u.username = '%{user}'";
    $conf['auth']['mysql']['getGroups']   = "SELECT g.g_title as `group`
                                               FROM ${db_prefix}users AS u, ${db_prefix}groups AS g
                                              WHERE u.group_id = g.g_id
                                                AND u.username = '%{user}'";
    $conf['auth']['mysql']['getUsers']    = "SELECT DISTINCT u.username AS user
                                               FROM ${db_prefix}users AS u, ${db_prefix}groups AS g
                                              WHERE u.group_id = g.g_id";
    $conf['auth']['mysql']['FilterLogin'] = "u.username LIKE '%{user}'";
    $conf['auth']['mysql']['FilterName']  = "u.realname LIKE '%{name}'";
    $conf['auth']['mysql']['FilterEmail'] = "u.email    LIKE '%{email}'";
    $conf['auth']['mysql']['FilterGroup'] = "g.g_title    LIKE '%{group}'";
    $conf['auth']['mysql']['SortOrder']   = "ORDER BY u.username";
    $conf['auth']['mysql']['addUser']     = "INSERT INTO ${db_prefix}users
                                                    (username, password, email, realname)
                                             VALUES ('%{user}', '%{pass}', '%{email}', '%{name}')";
    $conf['auth']['mysql']['addGroup']    = "INSERT INTO ${db_prefix}groups (g_title) VALUES ('%{group}')";
    $conf['auth']['mysql']['addUserGroup']= "UPDATE ${db_prefix}users
                                                SET group_id=%{gid}
                                              WHERE id='%{uid}'";
    $conf['auth']['mysql']['delGroup']    = "DELETE FROM ${db_prefix}groups WHERE g_id='%{gid}'";
    $conf['auth']['mysql']['getUserID']   = "SELECT id FROM ${db_prefix}users WHERE username='%{user}'";
    $conf['auth']['mysql']['updateUser']  = "UPDATE ${db_prefix}users SET";
    $conf['auth']['mysql']['UpdateLogin'] = "username='%{user}'";
    $conf['auth']['mysql']['UpdatePass']  = "password='%{pass}'";
    $conf['auth']['mysql']['UpdateEmail'] = "email='%{email}'";
    $conf['auth']['mysql']['UpdateName']  = "realname='%{name}'";
    $conf['auth']['mysql']['UpdateTarget']= "WHERE id=%{uid}";
    $conf['auth']['mysql']['delUserGroup']= "UPDATE ${db_prefix}users SET g_id=4 WHERE id=%{uid}";
    $conf['auth']['mysql']['getGroupID']  = "SELECT g_id AS id FROM ${db_prefix}groups WHERE g_title='%{group}'";

    $conf['auth']['mysql']['TablesToLock']= array("${db_prefix}users", "${db_prefix}users AS u",
                                                  "${db_prefix}groups", "${db_prefix}groups AS g");

    $conf['auth']['mysql']['debug'] = 1;
    // call mysql constructor
    $this->auth_mysql();
  }

  /**
   * Just checks against the $forum_user variable
   */
  function trustExternal($user,$pass,$sticky=false){
    global $USERINFO;
    global $conf;
    global $lang;
    global $forum_user;
    global $forum_config;
    global $cookie_name;
    $sticky ? $sticky = true : $sticky = false; //sanity check

    // someone used the login form
    if(!empty($user)){
      authenticate_user($user, $pass);
      if (!$forum_user['is_guest']){
        $expire = ($forum_user['save_pass'] == '1') ? time() + 31536000 : 0;
        forum_setcookie($cookie_name, base64_encode($forum_user['id'].'|'.$forum_user['password']), $expire);
      }else{
        //invalid credentials - log off
        msg($lang['badlogin'],-1);
        auth_logoff();
        return false;
      }
    }

    if(isset($forum_user) && !$forum_user['is_guest']){
      // okay we're logged in - set the globals
      $USERINFO['pass'] = $forum_user['password'];
      $USERINFO['name'] = $forum_user['realname'];
      $USERINFO['mail'] = $forum_user['email'];
      $USERINFO['grps'] = array($forum_user['g_title']);
      if ($forum_user['g_id'] == FORUM_ADMIN)
        $USERINFO['grps'][] = 'admin';

      $_SERVER['REMOTE_USER'] = $forum_user['username'];
      $_SESSION[DOKU_COOKIE]['auth']['user'] = $forum_user['username'];
      $_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO;
      return true;
    }

    // to be sure
    auth_logoff();
    return false;
  }

  /**
   * remove fluxbb cookie on logout
   */
  function logOff(){
    global $forum_user;
    global $cookie_name;
    $forum_user = array();
    $forum_user['is_guest'] = true;
    forum_setcookie($cookie_name, base64_encode('1|'.random_key(8, true)), time() + 31536000);
  }
}

// Modif par cacatoes : désactiver les notifications de non-initialisation des variables, etc... 
error_reporting(E_ALL ^ E_NOTICE);

//Setup VIM: ex: et ts=2 enc=utf-8 :


Dokuwiki - conf/local.php :

$conf['authtype']='fluxbb';
define('FORUM_ROOT','/data/web/59/0e/7c/openarena.tuxfamily.org/htdocs/forum/');

Ce qu'on avait avant fonctionnait, mais les messages d'erreurs qui apparaissaient étaient dûs au mode debug en gros.

Source: http://fluxbb.org/forums/post/11507


Move your ass.

Hors ligne

#2 27/08/2008 04:14:44

Cacatoes
Passionné(e) d'ArèneOuverte
Lieu : Lille
Inscription : 14/07/2008
Messages : 1 284
Site Web

Re : Authentification commune wiki forum

On a encore un problème avec l'authentification, les ACL ne fonctionnent pas bien (seulement pour le groupe Admin), j'ai pas encore bien cherché, mais pour le moment certains membres bien qu'inscrits ne peuvent pas éditer les pages du wiki :-/

Donc normal si vous voyez des messages d'erreur avec l'authentification poindre ces jours-ci wink


Move your ass.

Hors ligne

#3 24/10/2008 15:58:41

mathieu
Passionné(e) d'ArèneOuverte
Inscription : 15/07/2008
Messages : 188

Re : Authentification commune wiki forum

Je me suis mis sur le problème de l'authentification et des droits, mais je ne peut pas éditer les fichiers. Pourrais tu faire un « chmod -R g+w » sur le répertoire de doku et éventuellement sur le forum tant qu'on y est.

Merci


:ZZ

Hors ligne

#4 24/10/2008 17:26:20

Cacatoes
Passionné(e) d'ArèneOuverte
Lieu : Lille
Inscription : 14/07/2008
Messages : 1 284
Site Web

Re : Authentification commune wiki forum

J'aime pas reléguer le boulot, mais si t'y arrives j'serais bien content tongue

Les permissions devraient être bonnes wink J'ai changé les perms pour tout htdocs ..


Move your ass.

Hors ligne

#5 25/10/2008 19:01:48

mathieu
Passionné(e) d'ArèneOuverte
Inscription : 15/07/2008
Messages : 188

Re : Authentification commune wiki forum

Cacatoes a écrit :

J'aime pas reléguer le boulot, mais si t'y arrives j'serais bien content tongue

Les permissions devraient être bonnes wink J'ai changé les perms pour tout htdocs ..

T'inquiètes pas pour le partage du boulot, faut que chacun fasse ce qu'il sait faire et le bouzin avancera.

Donc j'ai tout corrigé et tout devrait fonctionner maintenant. Pour information voila le principe :
  * le module que tu as récupéré s'occupe de l'authentification de doku en passant par fluxbb
  * le code ne prend en charge que les bases mysql
  * j'ai corrigé les quelques endroits de fluxbb.class.php qui n'allaient pas et qui empêchaient de fonctionner avec pgsql (suffit de faire un diff pour voir les différences)
  * j'ai ajouté une ligne à pgsql.class.php et mysql.class.php, je comprend d'ailleurs pas comment l'authentification de base avec pgsql peut fonctionner, en l'état actuel il y a forcement une erreur.


Voici le nouveau code de fluxbb.class.php

<?php
/**
 * FluxBB auth backend with Postgresql support
 *
 * Uses external Trust mechanism to check against FluxBB's
 * user cookie. FluxBB's FORUM_ROOT must be defined correctly.
 *
 * @author    Andreas Gohr <andi@splitbrain.org>
 * @author    0xmathieu <oa.20.ultimat@spamgourmet.com>
 */

if(!defined('FORUM_ROOT')) define('FORUM_ROOT', DOKU_INC.'../forum/');
define('FORUM_DISABLE_CSRF_CONFIRM', 1);
require_once FORUM_ROOT.'include/common.php';
require_once DOKU_INC.'inc/auth/pgsql.class.php';

#dbg($GLOBALS);
#dbg($forum_user);

class auth_fluxbb extends auth_pgsql {

        /**
         * Constructor.
         *
         * Sets additional capabilities and config strings
         */
        function auth_fluxbb(){
                global $conf;
                $this->cando['external'] = true;
                $this->cando['logoff']   = true;

                $conf['passcrypt'] = 'sha1';

                // get global vars from fluxbb config
                global $db_host;
                global $db_name;
                global $db_username;
                global $db_password;
                global $db_prefix;

                // now set up the pgsql config strings
                if (empty($conf['auth'])) {
                        $conf['auth'] = array();
                        $conf['auth']['pgsql'] = array();
                }

                $cf = &$conf['auth']['pgsql'];
                $cf['server']   = $db_host;
                $cf['user']     = $db_username;
                $cf['password'] = $db_password;
                $cf['database'] = $db_name;

                $cf['checkPass']   = "SELECT u.password AS pass
                        FROM ${db_prefix}users AS u, ${db_prefix}groups AS g
                        WHERE u.group_id = g.g_id
                        AND u.username = '%{user}'
                        AND g.g_title   != 'Guest'";
                $cf['getUserInfo'] = "SELECT password AS pass, realname AS name, email AS mail, id, g_title as group
                                FROM ${db_prefix}users AS u, ${db_prefix}groups AS g
                                WHERE u.group_id = g.g_id
                                AND u.username = '%{user}'";
                $cf['getGroups']   = "SELECT g.g_title as group
                        FROM ${db_prefix}users AS u, ${db_prefix}groups AS g
                        WHERE u.group_id = g.g_id
                        AND u.username = '%{user}'";
                $cf['getUsers']    = "SELECT DISTINCT u.username AS user
                        FROM ${db_prefix}users AS u, ${db_prefix}groups AS g
                        WHERE u.group_id = g.g_id";
                $cf['FilterLogin'] = "u.username LIKE '%{user}'";
                $cf['FilterName']  = "u.realname LIKE '%{name}'";
                $cf['FilterEmail'] = "u.email LIKE '%{email}'";
                $cf['FilterGroup'] = "g.g_title LIKE '%{group}'";
                $cf['SortOrder']   = "ORDER BY u.username";
                $cf['addUser']     = "INSERT INTO ${db_prefix}users
                        (username, password, email, realname)
                        VALUES ('%{user}', '%{pass}', '%{email}', '%{name}')";
                $cf['addGroup']    = "INSERT INTO ${db_prefix}groups (g_title) VALUES ('%{group}')";
                $cf['addUserGroup']= "UPDATE ${db_prefix}users SET group_id=%{gid} WHERE id='%{uid}'";
                $cf['delGroup']    = "DELETE FROM ${db_prefix}groups WHERE g_id='%{gid}'";
                $cf['getUserID']   = "SELECT id FROM ${db_prefix}users WHERE username='%{user}'";
                $cf['updateUser']  = "UPDATE ${db_prefix}users SET";
                $cf['UpdateLogin'] = "username='%{user}'";
                $cf['UpdatePass']  = "password='%{pass}'";
                $cf['UpdateEmail'] = "email='%{email}'";
                $cf['UpdateName']  = "realname='%{name}'";
                $cf['UpdateTarget']= "WHERE id=%{uid}";
                $cf['delUserGroup']= "UPDATE ${db_prefix}users SET g_id=4 WHERE id=%{uid}";
                $cf['getGroupID']  = "SELECT g_id AS id FROM ${db_prefix}groups WHERE g_title='%{group}'";

                $cf['TablesToLock']= array("${db_prefix}users", "${db_prefix}users AS u",
                                "${db_prefix}groups", "${db_prefix}groups AS g");

                $cf['debug'] = 1;
                // call pgsql constructor
                $this->auth_pgsql();
        }
        /**
         * Just checks against the $forum_user variable
         */
        function trustExternal($user,$pass,$sticky=false){
                global $USERINFO;
                global $conf;
                global $lang;
                global $forum_user;
                global $forum_config;
                global $cookie_name;
                $sticky ? $sticky = true : $sticky = false; //sanity check

                // someone used the login form
                if(!empty($user)){
                        authenticate_user($user, $pass);
                        if (!$forum_user['is_guest']){
                                $expire = ($forum_user['save_pass'] == '1') ? time() + 31536000 : 0;
                                forum_setcookie($cookie_name, base64_encode($forum_user['id'].'|'.$forum_user['password']), $expire);
                        }else{
                                //invalid credentials - log off
                                msg($lang['badlogin'],-1);
                                auth_logoff();
                                return false;
                        }
                }

                if(isset($forum_user) && !$forum_user['is_guest']){
                        // okay we're logged in - set the globals
                        $USERINFO['pass'] = $forum_user['password'];
                        $USERINFO['name'] = $forum_user['realname'];
                        $USERINFO['mail'] = $forum_user['email'];
                        $USERINFO['grps'] = array($forum_user['g_title']);
                        if ($forum_user['g_id'] == FORUM_ADMIN)
                                $USERINFO['grps'][] = 'admin';

                        $_SERVER['REMOTE_USER'] = $forum_user['username'];
                        $_SESSION[DOKU_COOKIE]['auth']['user'] = $forum_user['username'];
                        $_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO;
                        return true;
                }

                // to be sure
                auth_logoff();
                return false;
        }
        /**
         * remove fluxbb cookie on logout
         */
        function logOff(){
                global $forum_user;
                global $cookie_name;
                $forum_user = array();
                $forum_user['is_guest'] = true;
                forum_setcookie($cookie_name, base64_encode('1|'.random_key(8, true)), time() + 31536000);
        }
}

//To delete unwanted notices, by Cacatoes
//See http://fluxbb.org/forums/post/11507/#p11507
error_reporting(E_ALL ^ E_NOTICE);

//Setup VIM: ex: et ts=2 enc=utf-8 :

Voici le bout de code à ajouter en haut de pgsql.class.php et mysql.class.php :

if(!defined('DOKU_AUTH')) define('DOKU_AUTH', dirname(__FILE__));

à la place de :

define('DOKU_AUTH', dirname(__FILE__));

:ZZ

Hors ligne

#6 25/10/2008 20:32:40

Cacatoes
Passionné(e) d'ArèneOuverte
Lieu : Lille
Inscription : 14/07/2008
Messages : 1 284
Site Web

Re : Authentification commune wiki forum

Cool ça wink
J'ai pas vérifié si le problème des membres qui ne peuvent éditer est encore d'actu mais je pense que ça roule wink


Move your ass.

Hors ligne

#7 29/10/2008 19:35:18

Cacatoes
Passionné(e) d'ArèneOuverte
Lieu : Lille
Inscription : 14/07/2008
Messages : 1 284
Site Web

Re : Authentification commune wiki forum

Encore un petit soucis, je crois que ça a a voir avec les groupes : les membres utilisateurs ne peuvent pas éditer les pages du wiki, seuls les admins peuvent.
J'ai crû lire que c'était dû à un nom de groupe mal nommé qqpart (groupe "users"/"utilisateurs" qui ne correspondait pas entre fluxbb et dokuwiki)

Si vous voulez tester :

login: Untest
mot de passe: popo


Move your ass.

Hors ligne

#8 31/10/2008 15:08:26

Cacatoes
Passionné(e) d'ArèneOuverte
Lieu : Lille
Inscription : 14/07/2008
Messages : 1 284
Site Web

Re : Authentification commune wiki forum

Toujours le problème bien que j'aie tenté la rustine proposée sur cette page : http://www.dokuwiki.org/auth:punbb (tout en bas)

# <?php exit()?>
# Don't modify the lines above
#
# Access Control Lists
#
# Auto-generated by install script
# Date: Mon, 14 Jul 2008 21:43:37 +0000
*    @ALL    1
about    @user    2
accueil    @user    2
doc:*    @user    16
projet:*    @user    16
wiki:playground    @user    2
english:*    @user    16
creations:*    @user    16
wiki:*    @user    16
about    @members 2
accueil    @members 2
doc:*    @members 16
projet:*    @members 16
wiki:playground    @members 2
english:*    @members 16
creations:*    @members 16

Move your ass.

Hors ligne

#9 09/11/2008 12:06:16

mathieu
Passionné(e) d'ArèneOuverte
Inscription : 15/07/2008
Messages : 188

Re : Authentification commune wiki forum

Avant de ma lancer la-dedans je réfléchissait... si, si, il faut !

Je me disait : avant de donner les droits à n'importe qui de faire n'importe quoi (dont la possibilité d'effacer tout le contenu), il faudrai songer à quoi faire en cas de catastrophe. Donc je me dis qu'il faut sauvegarder. Hors je n'ai pas accès à l'outil crontab, donc impossible de faire proprement un script qui s'exécute régulièrement.

Tout ça pour dire, que je ne me penche pas sur le problème de l'accès 777 à tout le monde sans qu'on ai un système de sauvegarde du wiki avant.


:ZZ

Hors ligne

#10 09/11/2008 12:49:05

Cacatoes
Passionné(e) d'ArèneOuverte
Lieu : Lille
Inscription : 14/07/2008
Messages : 1 284
Site Web

Re : Authentification commune wiki forum

Okay, à ce niveau là je n'ai pas accès au cron non plus.
J'ai vu un dump du pgsql dans mon répertoire, mais je ne sais pas d'où il provient et il date du 24 octobre (donc pas très régulier si y'a un cron derrière).
Pour le wiki ça n'est pas sauvegardé vu que c'est des fichiers, donc ce dump ne suffirait pas de toute façon.
J'en parlerai aux admins de tuxfamily, le hic c'est que l'espace web est assez limité, et que sur ces serveurs mutualisés ils évitent peut être de proposer ces fonctions.

Pour tes inquiétudes, la fonction d'historique du Wiki n'est pas suffisante pour faire les bons reverts ? (elle est sans doute moins bien faite que celle de mediawiki).
Je parlais pour le moment de l'accès aux _membres_, mais c'est vrai qu'on pourrait étendre aux invités.
-


Move your ass.

Hors ligne

#11 09/11/2008 13:19:10

mathieu
Passionné(e) d'ArèneOuverte
Inscription : 15/07/2008
Messages : 188

Re : Authentification commune wiki forum

En ce qui concerne la fonction d'accès aux anciennes révisions d'une page, j'ai bien peur que si la page est effacé, ce ne soit pas facile de récupérer. Je ne connais pas assez cette fonctionnalité pour garantir l'intégrité des données.
À priori je verrais bien une copie hebdomadaire du répertoire « wiki », et puis effectivement un « pg_dump » de la base pour avoir la sauvegarde du forum. Si on ne conserver qu'une ou deux sauvegardes ça ne doit pas prendre tant de place.


:ZZ

Hors ligne

#12 09/11/2008 17:26:30

Cacatoes
Passionné(e) d'ArèneOuverte
Lieu : Lille
Inscription : 14/07/2008
Messages : 1 284
Site Web

Re : Authentification commune wiki forum

La sauvegarde de pgsql est pour le moment en panne sur TF, mais normalement une est faite chaque nuit.

Pour le wiki, vu que c'est des fichiers, rien de prévu. Il faudrait donc mettre ça en place nous-même, avec rsync via ssh, ou bien faire un mirror vers le FTP.

Cela dit, ce serait bien de regarder un peu mieux comment marche dokuwiki, car les pages éffacées sont il me semble conservées ... juste que je trouve que c'est un peu le bordel et pas pratique. (je me plains encore de l'historique de dokuwiki qui il me semble ne recense pas toutes les modifs effectuées)


Move your ass.

Hors ligne

#13 15/01/2009 11:17:50

mathieu
Passionné(e) d'ArèneOuverte
Inscription : 15/07/2008
Messages : 188

Re : Authentification commune wiki forum

Je me suis repenché sur la question d'accès en écriture au pages du wiki. À priori c'était pas grand chose : le nom du groupe dans la base de données de fluxbb est « Members » et nom pas « members ».

Je me suis connecté avec le compte Untest et j'ai pu modifier la page http://openarena.tuxfamily.org/wiki/doc … =revisions.

Tu peux revérifier (c'est recommandé), le site est maintenant prêt à se faire péter wink


:ZZ

Hors ligne

#14 03/10/2009 21:32:10

Cacatoes
Passionné(e) d'ArèneOuverte
Lieu : Lille
Inscription : 14/07/2008
Messages : 1 284
Site Web

Re : Authentification commune wiki forum

Yop,

Simplement pour prévenir que ...

Les mots de passe entre le forum et le wiki discordent.
Donc j'espère que ça n'influence pas les permissions d'édition pour les utilisateurs communs (on avait déjà vérifié y'a un moment, et il semblait que non).

Voilà, bref, c'était juste pour signaler. wink D'ici à ce qu'on ait une solution d'authentification plus propre ...


Move your ass.

Hors ligne

Pied de page des forums