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
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_128, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $pwd = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $salt, stripslashes($_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 ?
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
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_128, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$pwd = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $salt, stripslashes($_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_128, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $salt = trim($this->config['mushraider_apikey']); $password = utf8_decode(trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $salt, stripslashes($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_128, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $pwd = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $salt, stripslashes($_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_128, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $pwd = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $salt, stripslashes($_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_128, MCRYPT_MODE_ECB); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $salt = trim($this->config['mushraider_apikey']); $password = utf8_decode(trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $salt, stripslashes($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...
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...
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
|