•  » Utilisation
  •  » Utilisation de la table user de phpBB, Tuto et demande d'aide

#1 2011-03-07 12:21:04

Tok-Ra
Invité

Utilisation de la table user de phpBB, Tuto et demande d'aide

/!\ Cette aide n'est pas complète, ne vous lancez pas dans cette tache car elle n'est pas encore fonctionnelle !!! Ceci est une avancée, pas un tuto complet ! Merci d'en tenir compte !! Si vous souhaitez toutefois faire les modifications, c'est uniquement pour aider à terminer cette fonction ! /!\

Bonjour à tous,

Suivant le titre, j'ai pour projet d'utiliser la base "user" de mon forum phpBB3 (déjà existant, avec plein d'utilisateurs) pour que les utilisateurs de la galerie mise en place, n'ai pas à se créer un nouveau compte !

J'ai trouvé beaucoup d'aide pour phpBB2 mais rien pour la version 3, ou si peu.... C'est pourquoi, je vous fais part ici, de mes avancées mais j'aurais aussi besoin de votre aide, car mes connaissances ont des limites (beaucoup !!! :)).

Attention, ceci n'est valable et ne marchera que si vous utiliser la même base pour Piwigo et phpBB3.

Voici par quoi commencer (les commandes seront à tapper en ligne de commande sous linux, si vous n'avez pas d'accès shell ou que votre serveur est sous Windows), il suffira d'adapter ce qui suit:

Faire une copie de votre fichier de config piwigo qui se trouve dans le repertoire include :

Code:

cd include
cp config_default.inc.php config_default.inc.php

Modifier le fichier config_default.inc.php, il faut dire à piwigo d'aller lire les utilisateurs dans une autre table :

Trouvez et modifiez dans config_default.inc.php :
// delete from piwigo_user_access;
// delete from piwigo_user_cache;
// delete from piwigo_user_feed;
// delete from piwigo_user_group;
// delete from piwigo_user_infos;
// delete from piwigo_sessions;
// delete from piwigo_rate;
// update piwigo_images set average_rate = null;
// delete from piwigo_caddie;
// delete from piwigo_favorites;
//


Mettez ici la table utilisée par phpBB3 pour les utilisateurs (par défaut, phpbb_users) :
$conf['users_table'] = 'phpbb_users';

Mettez ici un genre de lien symbolique, pour que piwigo aille chercher les bonnes informations dans la table de phpBB3. La partie de gauche est la structure de Piwigo, celle de droite, celle de phpBB3. Par défaut, ce qui est ci-dessous devrait être bon pour votre configuration :
$conf['user_fields'] = array(
  'id' => 'user_id',
  'username' => 'username',
  'password' => 'user_password',
  'mail_address' => 'user_email'
  );


Mettez l'id de l'utilisateur Anonymous de phpBB3 (qui correspond au "guest" de piwigo), dans une installation par défaut de phpBB3 l'id est le "1" :
$conf['guest_id'] = 1;

Mettez l'id de l'utilisateur Administrateur de phpBB3 (qui correspond au "Webmaster" de piwigo), dans une installation par défaut de phpBB3 l'id est le "2" :
$conf['webmaster_id'] = 2;

Voila, normalement, les utilisateurs du forum peuvent utiliser leurs login/pass pour se connecter à la galerie.

Reste encore un soucis, l'identification !!

En effet, phpBB3 utilise son propre cryptage pour les mot de passes, c'est pourquoi, il convient de prendre cette fonction de cryptage et l'intégrer à piwigo.

Pour ce faire, il faudra éditer le fichier functions_user.inc.php (toujours dans le repertoire include/) et y modifier les choses suivantes :

Trouvez la fonction function try_log_user et y modifier la ligne :
if ($row['password'] == $conf['pass_convert']($password))

par :

if (phpbb_check_hash($password,$row['password']) == 'true')

Maintenant que cela est fait, il faut ajouter le code qui permet de vérifier la concordance du mot de passe en clair saisi, et celui crypté dans la base de donnée (dans la table phpBB3, toujours). Pour ce faire, aller à la fin de la fonction function try_log_user qui se termine par un "}" et ajouter après tout le code suivant (le code est issue des sources de phpBB3):

Code:

/** On ajoute les fonctions de checks de phpbb */
function phpbb_hash($password)
{
    $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';

    $random_state = unique_id();
    $random = '';
    $count = 6;

    if (($fh = @fopen('/dev/urandom', 'rb')))
    {
        $random = fread($fh, $count);
        fclose($fh);
    }

    if (strlen($random) < $count)
    {
        $random = '';

        for ($i = 0; $i < $count; $i += 16)
        {
            $random_state = md5(unique_id() . $random_state);
            $random .= pack('H*', md5($random_state));
        }
        $random = substr($random, 0, $count);
    }

    $hash = _hash_crypt_private($password, _hash_gensalt_private($random, $itoa64), $itoa64);

    if (strlen($hash) == 34)
    {
        return $hash;
    }

    return md5($password);
}

/**
* Check for correct password
*/
function phpbb_check_hash($password, $hash)
{
    $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    if (strlen($hash) == 34)
    {
        return (_hash_crypt_private($password, $hash, $itoa64) === $hash) ? true : false;
    }

    return (md5($password) === $hash) ? true : false;
}

/**
* Generate salt for hash generation
*/
function _hash_gensalt_private($input, &$itoa64, $iteration_count_log2 = 6)
{
    if ($iteration_count_log2 < 4 || $iteration_count_log2 > 31)
    {
        $iteration_count_log2 = 8;
    }

    $output = '$H$';
    $output .= $itoa64[min($iteration_count_log2 + ((PHP_VERSION >= 5) ? 5 : 3), 30)];
    $output .= _hash_encode64($input, 6, $itoa64);

    return $output;
}

/**
* Encode hash
*/
function _hash_encode64($input, $count, &$itoa64)
{
    $output = '';
    $i = 0;

    do
    {
        $value = ord($input[$i++]);
        $output .= $itoa64[$value & 0x3f];

        if ($i < $count)
        {
            $value |= ord($input[$i]) << 8;
        }

        $output .= $itoa64[($value >> 6) & 0x3f];

        if ($i++ >= $count)
        {
            break;
        }

        if ($i < $count)
        {
            $value |= ord($input[$i]) << 16;
        }

        $output .= $itoa64[($value >> 12) & 0x3f];

        if ($i++ >= $count)
        {
            break;
        }

        $output .= $itoa64[($value >> 18) & 0x3f];
    }
    while ($i < $count);

    return $output;
}

/**
* The crypt function/replacement
*/
function _hash_crypt_private($password, $setting, &$itoa64)
{
    $output = '*';

    // Check for correct hash
    if (substr($setting, 0, 3) != '$H$')
    {
        return $output;
    }

    $count_log2 = strpos($itoa64, $setting[3]);

    if ($count_log2 < 7 || $count_log2 > 30)
    {
        return $output;
    }

    $count = 1 << $count_log2;
    $salt = substr($setting, 4, 8);

    if (strlen($salt) != 8)
    {
        return $output;
    }

    /**
    * We're kind of forced to use MD5 here since it's the only
    * cryptographic primitive available in all versions of PHP
    * currently in use.  To implement our own low-level crypto
    * in PHP would result in much worse performance and
    * consequently in lower iteration counts and hashes that are
    * quicker to crack (by non-PHP code).
    */
    if (PHP_VERSION >= 5)
    {
        $hash = md5($salt . $password, true);
        do
        {
            $hash = md5($hash . $password, true);
        }
        while (--$count);
    }
    else
    {
        $hash = pack('H*', md5($salt . $password));
        do
        {
            $hash = pack('H*', md5($hash . $password));
        }
        while (--$count);
    }

    $output = substr($setting, 0, 12);
    $output .= _hash_encode64($hash, 16, $itoa64);

    return $output;
}

Maintenant, il faut vider la table piwigo (je ne sais pas pourquoi, mais c'est piwigo qui le suggère !) en effectuant les requetes suivantes :

Code:

delete from piwigo_user_access;
delete from piwigo_user_cache;
delete from piwigo_user_feed;
delete from piwigo_user_group;
delete from piwigo_user_infos;
delete from piwigo_sessions;
delete from piwigo_rate;
update piwigo_images set average_rate = null;
delete from piwigo_caddie; 
delete from piwigo_favorites;

Voila, maintenant tout est prêt !

C'est la que vous arrivez pour m'aider !!!

Car malgré que tout à l'air OK, j'ai beaucoup d'erreur, j'ai tenté de me logger en utilisant les login/pass de mon forum, ça a l'air de marcher, mais une fois loggé, j'ai une grosse erreur.

#2 2011-03-07 12:23:09

ddtddt
Équipe Piwigo
Quetigny (21) - France
2007-07-27
16935

Re: Utilisation de la table user de phpBB, Tuto et demande d'aide


Vous aimez Piwigo alors n'hésitez pas à participer avec nous, plus d'infos sur la page "Contribuer à Piwigo". Si vous n'avez pas beaucoup de temps et que vous souhaitez nous soutenir vous pouvez aussi le faire par un don.

Hors ligne

#3 2011-03-07 12:27:26

Tok-Ra
Invité

Re: Utilisation de la table user de phpBB, Tuto et demande d'aide

Oui j'ai bien vu !

Je me serais pas pris la tête à écrire tout ça sinon !!!

Le problème de tout ces plugins, c'est qu'ils font l'inverse de ce que je veux !

C'est à dire qu'ils utilisent la base de piwigo pour phpBB3 et moi je veux que piwigo utilise la base de phpBB3 car j'ai beaucoup de membre et je ne compte pas leur refaire créer un compte ;)

#4 2011-03-07 12:51:55

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: Utilisation de la table user de phpBB, Tuto et demande d'aide

Tok-Ra a écrit:

Modifier le fichier config_default.inc.php, il faut dire à piwigo d'aller lire les utilisateurs dans une autre table :

Surtout pas ! On ne touche pas à config_default.inc.php mais on se créé un nouveau fichier personnalisé config_local.inc.php.
1- Cela évitera le risque de planter sa galerie en cas de fausse manip
2- Cela évitera de perdre toutes ces modifs lors des mises à jour de la galerie

Ensuite l'authentification externe avec PhpBB3 ne fonctionnera pas ainsi car cette version du forum utilise un système de hachage des mots de passe qui lui est propre. Ainsi Piwigo ne saura pas "lire" le mot de passe stocké dans la table phpBB.

Hors ligne

#5 2011-03-07 12:56:03

Tok-Ra
Membre
2011-03-07
8

Re: Utilisation de la table user de phpBB, Tuto et demande d'aide

Ha ok !
Je ne savais pas pour le config_local,  merci de l'info !

Concernant l'identification, j'ai apporté dans le post toutes les informations pour que cela fonctionne. Il y'a des modifs à faire dans le function_user.inc.php et il semble que les modifs que j'ai apportée font que l'identification fonctionne !

Alors, certe, lors de la mise à jour, ça ne fonctionnera plus, mais je souhaite que ça marche et pourquoi pas, faire un plugin, donc pour le moment, je suis en phase de recherche et de demande d'aide ;)

Hors ligne

#6 2011-03-07 13:43:53

Tok-Ra
Membre
2011-03-07
8

Re: Utilisation de la table user de phpBB, Tuto et demande d'aide

Bon !!

J'avance !

Mes utilisateurs du forum peuvent désormais se connecter à la galerie, et je n'ai plus d'erreur !

Il me reste encore des soucis à régler en Administration mais je suis sur la bonne voie !

Hors ligne

#7 2011-03-07 13:45:08

ddtddt
Équipe Piwigo
Quetigny (21) - France
2007-07-27
16935

Re: Utilisation de la table user de phpBB, Tuto et demande d'aide

Tok-Ra a écrit:

C'est la que vous arrivez pour m'aider !!!

Car malgré que tout à l'air OK, j'ai beaucoup d'erreur, j'ai tenté de me logger en utilisant les login/pass de mon forum, ça a l'air de marcher, mais une fois loggé, j'ai une grosse erreur.

Est ce que tu peux nous dire l'erreur que tu as ?


Vous aimez Piwigo alors n'hésitez pas à participer avec nous, plus d'infos sur la page "Contribuer à Piwigo". Si vous n'avez pas beaucoup de temps et que vous souhaitez nous soutenir vous pouvez aussi le faire par un don.

Hors ligne

#8 2011-03-07 14:25:57

Tok-Ra
Membre
2011-03-07
8

Re: Utilisation de la table user de phpBB, Tuto et demande d'aide

Alors, je me souvient plus de l'erreur, et je l'ai corrigée donc je pourrais pas vous la donner.

Mais pour la supprimer j'ai créé une insertion dans la table piwigo_user_infos avec un id correspondant à mon id dans la table phpbb_user et en lui donnant les droits admin.

J'ai donc pu accéder à l'interface d'admin et j'ai été ensuite été dans "Utilisateurs -> Gérer", tout les utilisateurs de phpbb_user ont donc été créé dans la table piwigo_user_infos avec les bon id et les droits par défaut.

Maintenant, le soucis que j'ai, c'est quand je me log avec mon login/pass (j'ai les droits admin sur la galerie), j'ai une erreur sur la page d'index :

Notice: Undefined index: email in /home/cat/galerie/include/functions.inc.php on line 973


Warning:  [mysql error 1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM phpbb_users
  WHERE user_id = 2' at line 2

SELECT
  FROM phpbb_users
  WHERE user_id = 2
; in /home/cat/galerie/include/dblayer/functions_mysql.inc.php on line 656


Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/cat/galerie/include/dblayer/functions_mysql.inc.php on line 160

Et lorsque je vais dans l'interface d'administration, j'ai tout en haut:

Notice: Undefined index: email in /home/cat/galerie/admin/intro.php on line 121

Warning: Cannot modify header information - headers already sent by (output started at /home/cat/galerie/admin/intro.php:121) in /home/cat/galerie/include/page_header.php on line 98

Et tout en bas :

Notice: Undefined index: email in /home/cat/galerie/include/functions.inc.php on line 973


Warning:  [mysql error 1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM phpbb_users
  WHERE user_id = 2' at line 2

SELECT
  FROM phpbb_users
  WHERE user_id = 2
; in /home/cat/galerie/include/dblayer/functions_mysql.inc.php on line 656

Et pour terminer, quand je veux gérer mes utilisateurs, j'ai :

Notice: Undefined index: email in /home/cat/galerie/admin/user_list.php on line 87


Warning:  [mysql error 1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS email,
                ui.status,
                ui.adviser,
               ' at line 3

SELECT DISTINCT u.user_id AS id,
                u.username AS username,
                u. AS email,
                ui.status,
                ui.adviser,
                ui.enabled_high,
                ui.level
  FROM phpbb_users AS u
    INNER JOIN piwigo_user_infos AS ui
      ON u.user_id = ui.user_id
    LEFT JOIN piwigo_user_group AS ug
      ON u.user_id = ug.user_id
  WHERE u.user_id > 0
  ORDER BY id ASC
; in /home/cat/galerie/include/dblayer/functions_mysql.inc.php on line 656


Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/cat/galerie/include/dblayer/functions_mysql.inc.php on line 155

Warning: Cannot modify header information - headers already sent by (output started at /home/cat/galerie/admin/user_list.php:87) in /home/cat/galerie/include/page_header.php on line 98

Et tout en bas :

Notice: Undefined index: email in /home/cat/galerie/include/functions.inc.php on line 973


Warning:  [mysql error 1064] You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM phpbb_users
  WHERE user_id = 2' at line 2

SELECT
  FROM phpbb_users
  WHERE user_id = 2
; in /home/cat/galerie/include/dblayer/functions_mysql.inc.php on line 656


Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/cat/galerie/include/dblayer/functions_mysql.inc.php on line 160

Ce que je ne comprend pas, dans les requetes, il semble faire appel à l'id "2" or moi, j'ai le "53", donc je trouve ça étrange !

Dernière modification par Tok-Ra (2011-03-07 14:28:53)

Hors ligne

#9 2011-03-07 15:12:01

Tok-Ra
Membre
2011-03-07
8

Re: Utilisation de la table user de phpBB, Tuto et demande d'aide

EDIT :

Pour ceux qui ont lu !!!

Oubliez ça, c'est moi qui me suis planté !!

En effet, dans le config_default.inc.php dans la configuration de l'autentification, il faut mettre :

'email' => 'user_email'

Et tout marche ;)

Dernière modification par Tok-Ra (2011-03-07 15:27:08)

Hors ligne

#10 2011-03-07 15:54:20

Gotcha
Ex Equipe Piwigo
Pierrelatte (26)
2007-03-14
13331

Re: Utilisation de la table user de phpBB, Tuto et demande d'aide

Pour info (et pour compléter ce qu'à dit Eric) en vous rendant dans [ Administration >> Plugins >> LocalFiles Editor > Onglet "Configuration locale" ] apparait le contenu du fichier config_local.inc.php qui n'est autre le petit frère éditable du fichier config_default.inc.php (qui ce dernier ne doit pas être édité).
En plus sur cette page il y a un lien pour lire le contenu du fichier config_default.inc.php

;-)


Ayez comme premier réflexe de consulter le wiki.
Ensuite, veuillez effectuer une recherche sur le forum avant de poser votre question.

LE FAIRE EST LE REVELATEUR DE L'ETRE

Hors ligne

#11 2011-03-07 18:02:00

Tok-Ra
Membre
2011-03-07
8

Re: Utilisation de la table user de phpBB, Tuto et demande d'aide

J'ai donc remis le config_default a l'état d'origine et je me suis servis du config_local.

Tout marche à merveille ;)

Par contre, lors de la prochaine mise à jour, il va falloir que je re-modifie le fichier function_user.php pour gérer l'identification en utilisant le cryptage de phpbb3 :(

Si jamais quelqu'un veut faire la même chose et qu'il n'y arrive pas malgré ce topic, qu'il n'hésite pas à me contacter !

@tt

Hors ligne

#12 2011-03-07 18:52:12

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: Utilisation de la table user de phpBB, Tuto et demande d'aide

Et si tu essayais d'adapter la fonction de hash de phpBB par le biais d'un plugin en jouant avec l'option :

// pass_convert : function to crypt or hash the clear user password to store
// it in the database
$conf['pass_convert'] = create_function('$s', 'return md5($s);');

Cela éviterait de modifier le core de Piwigo et ainsi pérenniser la modif... ?

Hors ligne

#13 2011-03-07 19:22:15

Tok-Ra
Membre
2011-03-07
8

Re: Utilisation de la table user de phpBB, Tuto et demande d'aide

C'est une bonne idée mais je penses que ça dépasse mes compétences :(

Je ne suis pas assez doué pour faire un plugin, moi je suis plus a l'aise a adapter des bout de code que d'en créer !

La, j'ai modifié pas mal de fichiers .tpl pour :

- Retirer toute option permettant de modifier le mot de passe via Piwigo (aussi via l'admin)
- Retirer toute option d'ajout d'utilisateur via l'admin

Je penses que j'ai terminé ce chantier, je reste dans le coin au cas ou ;)

Hors ligne

#14 2011-03-07 19:26:32

Tok-Ra
Membre
2011-03-07
8

Re: Utilisation de la table user de phpBB, Tuto et demande d'aide

Ha oui !!

Il faudra aussi modifier la fonction try_log_user pour virer la sensibilitée à la case, car phpBB3 n'est pas sensible alors que Piwigo, si !

Si quelqu'un veut m'aider à faire un plugin, je suis partant ;)

Hors ligne

#15 2011-03-07 20:57:45

Eric
Former Piwigo Team
VALENCE (FR)
2005-03-25
4579

Re: Utilisation de la table user de phpBB, Tuto et demande d'aide

Tok-Ra a écrit:

Ha oui !!

Il faudra aussi modifier la fonction try_log_user pour virer la sensibilitée à la case, car phpBB3 n'est pas sensible alors que Piwigo, si !

Si quelqu'un veut m'aider à faire un plugin, je suis partant ;)

Cà, c'est déjà en cours : [Forum, topic 19180] Insensible à la casse... ;-)

Hors ligne

  •  » Utilisation
  •  » Utilisation de la table user de phpBB, Tuto et demande d'aide

Pied de page des forums

Propulsé par FluxBB

github twitter newsletter Faire un don Piwigo.org © 2002-2024 · Contact