MyBB.support, le portail francophone de MyBB
[Réglé] Bridge pour MushRaider - Version imprimable

+- MyBB.support, le portail francophone de MyBB (https://mybb.fr)
+-- Forum : MyBB.fr (https://mybb.fr/forum-1.html)
+--- Forum : Support (https://mybb.fr/forum-5.html)
+--- Sujet : [Réglé] Bridge pour MushRaider (/thread-7381.html)

Pages : 1 2


Bridge pour MushRaider - Akenstorm - 16-08-2015


VERSION_MyBB : 1.8.4
Bonjour,

Je voulais savoir si quelqu'un pourrait m'aider à mettre en place un Bridge pour un RaidPlanner que j'utilise MushRaider,
des indications sont donné pour créer un Brigde pour MushRaider sur le site du développeur (Ici), mais vu que je maîtrise pas le php et les plugin sur MyBB j'aurais donc besoin de l'aide si quelqu'un de familier avec MyBB veut bien m'aider Smile

Merci d’avance.


RE: Bridge pour MushRaider - Akenstorm - 27-08-2015

J'ai tenté de me débrouiller et j'ai fais ceci comme base juste pour valider l'utilisateur:

Code PHP :
<?php
define
("IN_MYBB",1);
require_once 
"./global.php";
require_once 
MYBB_ROOT."inc/functions_user.php";

/*
Bridge exemple for MushRaider
More infos on http://mushraider.com/bridge
*/
header('Content-Type: application/json');
 
// Secret key added in MushRaider's admin
$salt '***********************';

 
// Test if we get the login & password infos
if(empty($_POST['login']) || empty($_POST['pwd'])) {
 
   echo json_encode(array('authenticated' => false));
 
   exit;
}
else

    
// Decrypt password
    // No reason to change this
    
$iv_size mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128MCRYPT_MODE_ECB);
    
$iv mcrypt_create_iv($iv_sizeMCRYPT_RAND);
    
$pwd mcrypt_decrypt(MCRYPT_RIJNDAEL_128$saltstripslashes($_POST['pwd']), MCRYPT_MODE_ECB$iv);

    
$result_username username_exists($_POST['login']);
    if (
$result_username != false)
    {
        
$result_password validate_password_from_username($_POST['login'], $pwd);
        if (
$result_password != false)
        {
            
$userInfos = array();
            
$userInfos['authenticated'] = true// Or false if don't
            
$userInfos['email'] = 'email@domain.com'// Replace it with the user's email, offcourse
            
$userInfos['role'] = 'member'// Optional parameter, force & set the role for this user. Can be 'member' (default), 'officer' or 'admin'
             
            
echo json_encode($userInfos);
            exit;
        }
        else 
        {
            echo 
json_encode(array('authenticated' => false));
            exit();
        }
    }
    else 
    {
        echo 
json_encode(array('authenticated' => false));
        exit();
    }
}
?>

mais il semblerait que que le code renvoi toujours "'authenticated' => false" et ne vas pas plus loin car quand j'essaye de me connecter après activation du bridge au raidplanner il m'indique que le le password ou username est incorrect.

Quelqu'un veut bien m'aiguiller ? Smile


RE: Bridge pour MushRaider - Saphir - 27-08-2015

Bonjour Akenstorm, et désolé que vous n'ayez pas obtenu de réponse.

Dans un premier temps, pouvez-vous nous indiquer dans quel sens vous souhaiteriez que votre bridge fonctionne : si vous voulez que les utilisateurs se connectent à MushRaider avec leurs identifiants MyBB, ou l'inverse.


RE: Bridge pour MushRaider - Akenstorm - 27-08-2015

Je cherche à ce que les utilisateurs puissent se connecter avec leurs identifiants MyBB, vu que le Bridge pré-intégré de Mushraider est configuré pour envoyé les identifiants au code que j'ai fais pour le validé ou non en fonction de la DB de MyBB.
Enfin c'est ce que j'ai compris Smile


RE: Bridge pour MushRaider - Saphir - 27-08-2015

Personnellement, je ne pense pas que je pourrai vous aider sur cette question.
Peut-être Exdiogene aura une petite idée...


RE: Bridge pour MushRaider - Akenstorm - 27-08-2015

Je vais attendre un réponse de sa part du coup ^^


RE: Bridge pour MushRaider - exdiogene - 27-08-2015

En analysant le code fourni, il y a des erreurs si c'est le nom d'utilisateur et le mot de passe inhérent à MyBB qui doivent être utilisés pour la connexion.

Voici la version corrigée pour obtenir le résultat attendu :

Code PHP :
<?php
define
("IN_MYBB",1);
require_once 
"./global.php";
require_once 
MYBB_ROOT."inc/functions_user.php";

/*
Bridge exemple for MushRaider
More infos on http://mushraider.com/bridge
*/
header('Content-Type: application/json');
 
// Secret key added in MushRaider's admin
$salt '***********************';

 
// Test if we get the login & password infos
if(empty($_POST['login']) || empty($_POST['pwd'])) {
 
   echo json_encode(array('authenticated' => false));
 
   exit;
}
else

    $pwd stripslashes($_POST['pwd']);

 
   $result_username username_exists($_POST['login']);
 
   if ($result_username != false)
 
   {
 
       $result_password validate_password_from_username($_POST['login'], $pwd);
 
       if ($result_password != false)
 
       {
 
           $userInfos = array();
 
           $userInfos['authenticated'] = true// Or false if don't
 
           $userInfos['email'] = $result_password['email']; // Replace it with the user's email, offcourse
 
           $userInfos['role'] = 'member'// Optional parameter, force & set the role for this user. Can be 'member' (default), 'officer' or 'admin'
 
            
            echo json_encode
($userInfos);
 
           exit;
 
       }
 
       else 
        
{
 
           echo json_encode(array('authenticated' => false));
 
           exit();
 
       }
 
   }
 
   else 
    
{
 
       echo json_encode(array('authenticated' => false));
 
       exit();
 
   }
}
?>

Avec ce code vous obtiendrez l'adresse de courriel du membre au retour d'une connexion réussie!


RE: Bridge pour MushRaider - Akenstorm - 27-08-2015

Alors pour la correction que vous m'avez donné bug mais je ne sais pas du tout pourquoi la page renvoi :
Code :
false)); exit;}else{ $pwd = stripslashes($_POST['pwd']); $result_username = username_exists($_POST['login']); if ($result_username != false) { $result_password = validate_password_from_username($_POST['login'], $pwd); if ($result_password != false) { $userInfos = array(); $userInfos['authenticated'] = true; // Or false if don't $userInfos['email'] = $result_password['email']; // Replace it with the user's email, offcourse $userInfos['role'] = 'member'; // Optional parameter, force & set the role for this user. Can be 'member' (default), 'officer' or 'admin' echo json_encode($userInfos); exit; } else { echo json_encode(array('authenticated' => false)); exit; } } else { echo json_encode(array('authenticated' => false)); exit; }}?>

A la place de :
Code :
{"authenticated":false}

du coup j'ai ajouté votre correction sur mon code ce qui donne :
Code PHP :
<?php

define
("IN_MYBB",1);

require_once 
"./global.php";

require_once 
MYBB_ROOT."inc/functions_user.php";



/*

Bridge exemple for MushRaider

More infos on http://mushraider.com/bridge

*/

header('Content-Type: application/json');

 

// Secret key added in MushRaider's admin

$salt '**********************';



 

// Test if we get the login & password infos

if(empty($_POST['login']) || empty($_POST['pwd'])) {

 
   echo json_encode(array('authenticated' => false));

 
   exit;

}

else



    
// Decrypt password

    // No reason to change this

    
$iv_size mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128MCRYPT_MODE_ECB);

    
$iv mcrypt_create_iv($iv_sizeMCRYPT_RAND);

    
$pwd mcrypt_decrypt(MCRYPT_RIJNDAEL_128$saltstripslashes($_POST['pwd']), MCRYPT_MODE_ECB$iv);



    
$result_username username_exists($_POST['login']);

    if (
$result_username != false)

    {

        
$result_password validate_password_from_username($_POST['login'], $pwd);

        if (
$result_password != false)

        {

            
$userInfos = array();

            
$userInfos['authenticated'] = true// Or false if don't

            
$userInfos['email'] = $result_password['email']; // Replace it with the user's email, offcourse

            
$userInfos['role'] = 'member'// Optional parameter, force & set the role for this user. Can be 'member' (default), 'officer' or 'admin'

             

            
echo json_encode($userInfos);

            exit;

        }

        else 

        {

            echo 
json_encode(array('authenticated' => false));
            exit;
        }

    }

    else 

    {

 
       echo json_encode(array('authenticated' => false));
        exit;
 
   }

}

?>
(j'ai pas enlevé le décryptage car je pense que le dev de MushRaider l'a mit car le mot de passe que l'API de MushRaider envoi à la page est crypté)
Mais malheureusement ça ne fonctionne pas non plus je ne comprends pas ^^'

Ps: Si ça peut aider voilà la code du bridge pour phpbb :
Code PHP :
<?php
/**
*
* @package phpBB Extension - phpBB Mushraider
* @copyright (c) 2015 Kyah (Julien Goret)
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/

/**
* @ignore
*/
namespace octetsetquartdepouces\mushraider\controller;
class 
login {
  public function 
__construct(\phpbb\config\config $config, \phpbb\user $user, \phpbb\auth\auth $auth, \phpbb\request\request $request, \phpbb\controller\helper $helper$root_path$php_ext)
  {
    
$this->config $config;
    
$this->user $user;
    
$this->auth $auth;
    
$this->request $request;
    
$this->helper $helper;
    
$this->root_path $root_path;
    
$this->php_ext $php_ext;
  }

  public function 
base() {
    
header('Content-Type: application/json');
    require(
$this->root_path 'includes/constants.' $this->php_ext);
    require(
$this->root_path 'includes/functions_user.' $this->php_ext);
    
$this->user->session_begin();
    
$this->auth->acl($this->user->data);
    if (
$_POST) {
      if (!isset(
$_POST['login']) || !isset($_POST['pwd'])) {
        echo 
json_encode(array('authenticated' => false));
        exit;
      } else {
        
$username request_var('login''');
        
$pwd $this->request->get_super_global(\phpbb\request\request_interface::POST)['pwd'];
        
$iv_size mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128MCRYPT_MODE_ECB);
        
$iv mcrypt_create_iv($iv_sizeMCRYPT_RAND);
        
$salt trim($this->config['mushraider_apikey']);
        
$password utf8_decode(trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128$saltstripslashes($pwd), MCRYPT_MODE_ECB$iv)));;
        
$username request_var('login''');
        
// Test if phpBB connects user
        
$result $this->auth->login($username$password);
        
$error $result['error_msg'];
        if (
$result['status'] == LOGIN_SUCCESS)
        {
          
$admins explode(','$this->config['mushraider_admin']);
          
$officers explode(','$this->config['mushraider_officers']);
          
$members explode(','$this->config['mushraider_members']);
          
//User was successfully logged into phpBB
          
$phpbbUserRow $result['user_row'];
          
$user_id $phpbbUserRow['user_id'];
          
$userInfos = array();
          
// Here we need to find if user is admin, officer or member!
          
foreach ($admins as $admin_group) {
            if (!isset(
$userRole) && group_memberships($admin_group,$user_id,true)) {
              
$userRole 'admin';
            }
          }
          foreach (
$officers as $officer_group) {
            if (!isset(
$userRole) && group_memberships($officer_group,$user_id,true)) {
              
$userRole 'officer';
            }
          }
          foreach (
$members as $member_group) {
            if (!isset(
$userRole) && group_memberships($member_group,$user_id,true)) {
              
$userRole 'member';
            }
          }
          if (isset(
$userRole)) {
            
// Everything is OK!
            
$isAuthenticated true;
            
$userInfos['email'] = $phpbbUserRow['user_email'];
            
$userInfos['role'] = $userRole;
          } else {
            
$isAuthenticated false;
          }
          
// Return json to mushraider
          
$userInfos['authenticated'] = $isAuthenticated;
          echo 
json_encode($userInfos);
        }
        else {
          echo 
json_encode(array('authenticated' => false));
        }
        exit;
      }
    } else {
      
// If we don't come from mushraider, send them back to home...
      
redirect(append_sid("{$this->root_path}index.$this->php_ext"));
    }
  }
}
?>

>Lien pour Télécharger le fichier complet<


RE: Bridge pour MushRaider - exdiogene - 27-08-2015

Il y a beaucoup de confusion dans votre demande et vos commentaires.

Est-ce que vous voulez utiliser le nom d'utilisateur et le mot de passe de MyBB pour vous connecter sur une page de MushRaider, ou le contraire?

Si c'est le premier, mon code est fonctionnel car je l'ai testé en ligne. Vous avez du mal copié le code...

J'ai retiré la portion "mcrypt" car elle interfère avec la méthode utilisée par MyBB pour valider la connexion...


RE: Bridge pour MushRaider - Akenstorm - 28-08-2015

Je voudrais me connecter à MushRaider avec les identifiants MyBB, j'ai re-testé votre méthode mais il semblerait qu'il ai un problèmes car ça ne fonctionne pas pour moi, vous avez copiez dans quel dossier de MyBB le plugin ? sur Mushraider vous avez indiqué l'url du plugin ?
De mon côté j'ai placé le fichier à cette url : http://lacommunaute-teso.ddns.net/mushraider.php où j'y ai copié votre code corrigé
qui est la même adresse que j'ai indiqué dans l'admin de MushRaider pour le Bridge.


RE: Bridge pour MushRaider - exdiogene - 28-08-2015

Premièrement je tiens à vous signaler que le lien du droit d'auteur de MyBB n'apparait pas dans votre pied de page, ce qui est contraire à nos règles!

Je ne vous dirai que ceci : Lorsque vous avez collé le code PHP, tous les sauts de lignes ont disparus...


RE: Bridge pour MushRaider - Akenstorm - 28-08-2015

Oups merci de m'avoir prévenu pour le footer j'ai fail quand je me suis occupé du Thème (j'ai edit ça) ....

J'ai retapé le code ligne par ligne, le bug d'avant ne semble plus avoir lieux mais cela ne fonctionne toujours pas ^^'


RE: Bridge pour MushRaider - exdiogene - 28-08-2015

Si votre formulaire qui envoie le nom d'utilisateur et le mot de passe vers ce fichier, les envoient en clair, ils seront validés. Vous verrez alors la ligne affichant votre adresse de courriel de MyBB.

Pour en être certain, il me faudrait le code du formulaire envoyant les données à ce code...


RE: Bridge pour MushRaider - Akenstorm - 28-08-2015

Le formulaire(L'API MushRaider) envoie le login en clair et le mot de passe en crypté ce qui justifie :

Code PHP :
// Secret key added in MushRaider's admin
$salt 'YOUR_SECRET_KEY'

et le décryptage :
Code PHP :
// Decrypt password
// No reason to change this
$iv_size mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128MCRYPT_MODE_ECB);
$iv mcrypt_create_iv($iv_sizeMCRYPT_RAND);
$pwd mcrypt_decrypt(MCRYPT_RIJNDAEL_128$saltstripslashes($_POST['pwd']), MCRYPT_MODE_ECB$iv); 



RE: Bridge pour MushRaider - exdiogene - 28-08-2015

Alors si le mot de passe est crypté avant d'être envoyé en "POST", il faudra donc le décrypter avec probablement ces trois lignes.

Ne connaissant pas les méthodes de "MushRaider", je ne peux pas vous aider sur ce point.

Mais vous pourriez confirmer la validation de la connexion si vous pouviez envoyer le mot de passe en clair avec mon code...


RE: Bridge pour MushRaider - Akenstorm - 28-08-2015

Bah les seules explication que donne le dev de Mushraider pour créer un bridge avec son API c'est cette exemple :

Code PHP :
/*
Bridge exemple for MushRaider
More infos on http://mushraider.com/bridge
*/
header('Content-Type: application/json');
 
// Secret key added in MushRaider's admin
$salt 'YOUR_SECRET_KEY';
 
// Test if we get the login & password infos
if(empty($_POST['login']) || empty($_POST['pwd'])) {
    echo 
json_encode(array('authenticated' => false));
    exit;
}
 
// Decrypt password
// No reason to change this
$iv_size mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128MCRYPT_MODE_ECB);
$iv mcrypt_create_iv($iv_sizeMCRYPT_RAND);
$pwd mcrypt_decrypt(MCRYPT_RIJNDAEL_128$saltstripslashes($_POST['pwd']), MCRYPT_MODE_ECB$iv);
 
/*
* Test here if the user exist and have the good permissions etc...
* Code goes here...
*/
// Return json to mushraider
$userInfos = array();
$userInfos['authenticated'] = true// Or false if don't
$userInfos['email'] = 'email@domain.com'// Replace it with the user's email, offcourse
$userInfos['role'] = 'member'// Optional parameter, force & set the role for this user. Can be 'member' (default), 'officer' or 'admin'
 
echo json_encode($userInfos);
exit; 

Indiqué sur cette >page<
Mais je sais pas si ça vous aide beaucoup ^^' , je vais cherché dans les dossier de Mushraider où se trouve le formulaire qui envoi le Login/pwd si je le trouve je le mettrai sur le post.


RE: Bridge pour MushRaider - exdiogene - 28-08-2015

J'avais déjà consulté les trois exemples de Brigde pour MushRaider...

Généralement les mots de passe sont envoyés en clair avec les formulaire, je trouve cela vraiment curieux!


RE: Bridge pour MushRaider - Akenstorm - 28-08-2015

Bah pourtant pour le code de phpBB ils utilisent le décryptage:
Code PHP :
else {
 
       $username request_var('login''');
 
       $pwd $this->request->get_super_global(\phpbb\request\request_interface::POST)['pwd'];
 
       $iv_size mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128MCRYPT_MODE_ECB);
 
       $iv mcrypt_create_iv($iv_sizeMCRYPT_RAND);
 
       $salt trim($this->config['mushraider_apikey']);
 
       $password utf8_decode(trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128$saltstripslashes($pwd), MCRYPT_MODE_ECB$iv)));;
 
       $username request_var('login'''); 
et je ne vois pas l’intérêt d'avoir une clé pour l'API et ne pas l'utilisé ^^'


RE: Bridge pour MushRaider - exdiogene - 28-08-2015

Je vous souhaites donc bonne chance dans votre projet, car la portion de MyBB est réglée... Wink


RE: Bridge pour MushRaider - Akenstorm - 28-08-2015

(28-08-2015, 11:43)exdiogene a écrit :  Je vous souhaites donc bonne chance dans votre projet, car la portion de MyBB est réglée... Wink
Oui c'était surtout ça que je voulais vérifié le reste je verrais avec le dev de mushraider sur son forum.
Merci beaucoup pour l'aide Smile


 Utilitaire de traduction fourni par Regentronique