Auteur Sujet: Création d'un bridge vBulletin :  (Lu 7777 fois)

darrhell

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Création d'un bridge vBulletin :
« le: 06 févr. 2015, 18:10:31 »
Bonjour à tous,

Je travail actuellement sur l'élaboration d'un bridge vBulletin. Mush, je sais que nos échanges par mail ont étés houleux mais à l'heure actuelle je me retrouve bloqué et ma team veux absoluement un mush raider.
L'objectif de mon développement est de permettre un SSO pour mes utilisateurs. Le site que j'ai fait de A à Z reprend l'authentification de vBulletin qui pour le coup est assez bien foutue car il suffit juste d'appeler un fichier pour construire la variable contenant (ou non) les infos de la personnne connectée.

J'ai modifié le code du bridge donné en tuto mais mon soucis est que pour le moment je suis incapble de me logger avec l'api bridge. Aucune compte ne fonctionne même le compte admin de l'installation.

En revanche, si j'appel mon bridge en tappant directement son url dans mon navigateur, il me retourne bien les informations et mon code marche.

Aussi je voudrais savoir comment faire pour zapper la connexion et lancer directement la verification de l'authentification (mes users ne veulent pas avoir à se logger deux fois meme si les credentials sont les même).

Merci pour votre aide !

Je poste le code que j'ai fait si cela peut vous aider à me mettre sur une piste :

// Recupération de l'authentification de vbulletin
$curdir = getcwd ();
chdir('/mon/chemin/'); // Modifié pour ne pas afficher sur le forum
require_once('/mon/chemin/monfichier'); // Modifié pour ne pas afficher sur le forum
chdir ($curdir);

// Secret key added in MushRaider's admin
$salt = ''; // Vidé pour ne pas l'afficher sur le forum

// Si la personne est connectée
if($vbulletin->userinfo['userid'] != 0)
{
// 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);

$userInfos = array();
/*
* Test here if the user exist and have the good permissions etc...
* Code goes here...
*/
// Test du grade de la personne
switch($vbulletin->userinfo['usergroupid'])
{
case 10:
case 9:
case 11:
$userInfos['role'] = 'member';
break;

case 13:
$userInfos['role'] = 'admin';
break;

case 12:
case 17:
$userInfos['role'] = 'officier';
break;
}
// Return json to mushraider
$userInfos['authenticated'] = true; // Or false if don't
$userInfos['email'] = $vbulletin->userinfo['email']; // Replace it with the user's email, offcourse
// Optional parameter, force & set the role for this user. Can be 'member' (default), 'officer' or 'admin'
echo json_encode($userInfos);
exit;
}else
{
// si elle n'est pas connectée
echo json_encode(array('authenticated' => false));
exit;
}

Mush

  • Mushraider
  • Administrator
  • Hero Member
  • *****
  • Messages: 768
  • Meh.
    • Voir le profil
    • MushRaider
Re : Création d'un bridge vBulletin :
« Réponse #1 le: 06 févr. 2015, 21:24:23 »
(Petit rappel, il existe déjà des bridges vbulletin)

Concernant ton code, plusieurs points :
  • Il n'y a visiblement pas de définition du header json
  • Tu testes en premier lieu si l'utilisateur est déjà connecté au vbulletin, ce n'est pas forcément nécessaire (mais ça peut être un choix)
  • Je te recommande d'utiliser l'API pour récupérer tous les rôles de ton MushRaider (tu peux t'inspirer de mon bridge Wordpress pour le mapping)

As-tu essayé de vérifier le retour de la requête via postman par exemple ?
Si l'api et l'option bridge sont bien activés sur ton MushRaider, que tu tu as bien remis le bon salt et que la bonne url est bien appelée, je ne vois pas pourquoi le retour ne serait pas le bon.
MushRaider - modern raid planner for modern raiders
Me suivre sur  twitter and Google+
Soutenir le projet et me payer une bière =)

darrhell

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : Création d'un bridge vBulletin :
« Réponse #2 le: 10 févr. 2015, 12:13:57 »
Bonjour Mush,

Merci pour ta réponse.
Alors effectivement j'avais oublié de replacer le header mais cela ne change pas grand chose au fait que le code ne fonctionne toujours pas.

Si j'appel mon bridge directement par l'url voici le retour :
{"role":"admin","authenticated":true,"email":"darrhell@team-legion.fr"}

J'en déduis que ces valeurs sont bonnes. Pourtant lorsque je me connecte a Mush (enfait avec mon code peut importe ce que je saisis en credentials, il devrait me laisser passer si je me suis connecté au par avant sur mon vB). Hors là ce n'est pas le cas, même si je rentre un vrai compte et même si j'utilise le compte admin local de MushRaider configuré  l'installation.

Pour authentification à vB oui je sais et c'est d'ailleurs le but car mon objectif final est de ne pas demander authentification à MushRaider et de vérifier directement si mon user est connecté à vB. Si c'est lecas MushRaider s'ouvre si ce n'est pas le cas, dans la meilleurs des possibilité il est redirigé vers l'accueil de mon site.

darrhell

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : Création d'un bridge vBulletin :
« Réponse #3 le: 10 févr. 2015, 16:41:18 »
J'avance un peu ! Enfin j'ai du nouveau !

Si dans le tableau userInfos à l'indice "authenticated" je donne la valeur : false ou true je ne peux me connecter avec aucun des comptes.

Si dans le tableau userInfos à l'indice "authenticated" je donne la valeur : "false" ou "true" alors le compte admin configuré fonctionne. En revanche, si je me connecte avec un autre compte j'ai l'interface MushRaider mais par contre dans le contenu principale j'ai :

Oups, quelque chose a échoué mais ce n'est pas moi !
ou c'est peut être moi mais ce n'est pas ma faute...

Pourrais tu me donner la construction complète du tableau userInfos s'il te plait ? Ou du moins me dire où je peux la trouver

Merci à toi

Mush

  • Mushraider
  • Administrator
  • Hero Member
  • *****
  • Messages: 768
  • Meh.
    • Voir le profil
    • MushRaider
Re : Création d'un bridge vBulletin :
« Réponse #4 le: 10 févr. 2015, 22:11:03 »
Rien de plus que dans la doc, ci-dessous le code que j'ai écrit pour le bridge WP, ça te donnera peut être une idée

<?php
/**
 * @package  MushRaider Bridge
 * @author   Mush
 */

// require_once('../../../wp-blog-header.php');
require_once( '../../../wp-load.php' );
header('Content-Type: application/json');

$salt get_option('mushraider_api_key');
$jsonRoleMapping json_decode(get_option('mushraider_roles_mapping'));

if(!empty(
$salt)) {
    if(empty(
$_POST['login']) || empty($_POST['pwd'])) {
        echo 
json_encode(array('authenticated' => false));
        exit;
    }

    
// Decrypt password
    
$iv_size mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128MCRYPT_MODE_ECB);
    
$iv mcrypt_create_iv($iv_sizeMCRYPT_RAND);
    
$pwd trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128$saltstripslashes($_POST['pwd']), MCRYPT_MODE_ECB$iv));

    
/*
    * Test here if the user exist and have the good permissions etc...
    */
    
$auth = array();
    
$auth['user_login'] = $_POST['login'];
    
$auth['user_password'] = $pwd;
    
$auth['remember'] = false;
    
$user wp_signon($authfalse);
    if(
is_wp_error($user)) {
        echo 
json_encode(array('authenticated' => false));
        exit;
    }

    if(!
$user->has_cap('mushraider_login')) {
        echo 
json_encode(array('authenticated' => false));
        exit;
    }

    
// Return json to mushraider
    
$userInfos = array();
    
$userInfos['authenticated'] = true;
    
$userInfos['email'] = $user->get('user_email');

    if(!empty(
$user->roles)) {
        foreach(
$user->roles as $userRoleSlug) {
            if(isset(
$jsonRoleMapping->$userRoleSlug)) {
                if(
$jsonRoleMapping->$userRoleSlug != 'notallowed' || empty($userInfos['role'])) {
                    
$userInfos['role'] = $jsonRoleMapping->$userRoleSlug;
                }
            }
        }
    }

    if(
$userInfos['role'] == 'notallowed') {
        echo 
json_encode(array('authenticated' => false));
        exit();
    }
     
    echo 
json_encode($userInfos);
    exit;
}
MushRaider - modern raid planner for modern raiders
Me suivre sur  twitter and Google+
Soutenir le projet et me payer une bière =)

darrhell

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : Création d'un bridge vBulletin :
« Réponse #5 le: 11 févr. 2015, 11:54:27 »
J'ai repris ton code.

Je l'ai modifié de manière à ce qu'il colle avec vBulletin.
J'ai interrogé le script avec postman :
{
    "authenticated": true,
    "email": "darrhell@team-legion.fr",
    "role": "admin"
}

Et pourtant rien ne marche ... Toujours echec de connexion coté mushraider.

Je penses que je vais abandonner car je commence à tourner en rond

Mush

  • Mushraider
  • Administrator
  • Hero Member
  • *****
  • Messages: 768
  • Meh.
    • Voir le profil
    • MushRaider
Re : Création d'un bridge vBulletin :
« Réponse #6 le: 11 févr. 2015, 16:51:04 »
As tu essayé de dump le retour au niveau de MushRaider ?
Tout se trouve dans /app/Controller/AuthController.php, il y a genre 2 "if", suffit de debug à ce niveau et tu seras vite fixé sur ce qui pose problème
MushRaider - modern raid planner for modern raiders
Me suivre sur  twitter and Google+
Soutenir le projet et me payer une bière =)

darrhell

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : Création d'un bridge vBulletin :
« Réponse #7 le: 11 févr. 2015, 19:04:38 »
OK Mush merci pour ta réponse qui me dépanne bien.

J'ai cerné le problème:

dans le bridge $_POST['login'] et $_POST['pwd'] n'existent pas !
Je ne comprend pas pourtant je n'ai rien touché au niveau du formulaire

Mush

  • Mushraider
  • Administrator
  • Hero Member
  • *****
  • Messages: 768
  • Meh.
    • Voir le profil
    • MushRaider
Re : Création d'un bridge vBulletin :
« Réponse #8 le: 12 févr. 2015, 09:44:10 »
Sans doute que la requête est interceptée par vbulletin en amont ou quelque chose du genre, tu devrais jeter un oeil aux bridges vbulletin existant voir s'il n'y a pas une subtilité.
MushRaider - modern raid planner for modern raiders
Me suivre sur  twitter and Google+
Soutenir le projet et me payer une bière =)

darrhell

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : Création d'un bridge vBulletin :
« Réponse #9 le: 12 févr. 2015, 11:03:14 »
Alors tu vas sans doute me prendre pour un débile ... Mais je n'ai pas trouvé de bridge pour vBulletin ?

Mush

  • Mushraider
  • Administrator
  • Hero Member
  • *****
  • Messages: 768
  • Meh.
    • Voir le profil
    • MushRaider
Re : Création d'un bridge vBulletin :
« Réponse #10 le: 12 févr. 2015, 12:35:50 »
Ha merde au temps pour moi, j'ai confondu avec phpBB... il y avait un mec qui avait émis l'idée sur les forums officiels vbulletin mais sans suite visiblement.

Dans tous les cas, MushRaider envoie en post à l'url indiquée les login et mot de passe saisis à la connexion, donc soit tu les trouves dans $_POST soit vbulletin intercept la requête (à moins qu'une config serveur puisse bloquer les post arrivant d'un autre domaine...)
MushRaider - modern raid planner for modern raiders
Me suivre sur  twitter and Google+
Soutenir le projet et me payer une bière =)

darrhell

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : Création d'un bridge vBulletin :
« Réponse #11 le: 13 févr. 2015, 11:12:52 »
Bon j'ai continué d'investiguer et j'en suis arrivé au point de tout reprendre à 0.

Le seul soucis c'est que j'ai le même problème avec juste un copié/coller du code que tu fournis pour le bridge.
Donc selon moi deux possibilité :
- Un problème sur l'install de MushRaider
- Un problème de post entre les sous domaines

Du coup afin d'éviter de me retaper une install, peux tu me dire si il y a possibilité de mettre le bridge dans la racine de MushRaider ? A savoir que pour ce faire je penses qu'il faut que je créé une route pour que cela puisse fonctionner car j'ai essayer de le mettre à la racine et de l'appeler par son URL direct et mush ne trouve pas la page car il n'y a pas de route.

Aussi peux tu me dire si le bridge est issue d'un POST classique en HTML / PHP ou y a t'il de l'ajax derrière tout ca ? Ce qui pourrait expliquer mon problème entre deux sous domaines. En effet si il n'y a pas d'ajax les requetes POST devraient passer sans problème par contre si il y a de l'ajax il y a quelques modifs à faire coté serveur.

Merci à toi

Mush

  • Mushraider
  • Administrator
  • Hero Member
  • *****
  • Messages: 768
  • Meh.
    • Voir le profil
    • MushRaider
Re : Création d'un bridge vBulletin :
« Réponse #12 le: 13 févr. 2015, 14:16:15 »
Pas d'ajax à ce niveau, et s'il s'agit simplement de sous domaines différents cela ne devrait pas poser de problème (sauf si vbulletin bloque à son niveau, mais j'en doute)
Si tu veux mettre le fichier à la racine je n'y vois aucun problème (bien que non essayé) mais tu dois mettre ton fichier dans /app/webroot pour qu'il soit trouvé sans ajout de route.
Normalement il n'y a rien à l'installation qui pourrait avoir une incidence sur les bridges

Si tu me donnes un accès à ton ftp ET à MushRaider en admin, je pourrais jeter un œil à la configuration
MushRaider - modern raid planner for modern raiders
Me suivre sur  twitter and Google+
Soutenir le projet et me payer une bière =)

darrhell

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
Re : Création d'un bridge vBulletin :
« Réponse #13 le: 23 févr. 2015, 11:15:56 »
Salut Mush !

Bon j'ai un peu avancé. A savoir j'ai réinstallé MushRaider. Cette fois ci les post passent bien en revanche le code de log de vBulletin de ne s'exécute plus.

Sais tu si depuis ton formulaire de login, il y a un moyen de récupérer les password en clair afin de l'encoder facon vBulletin pour vérifier l'auth via une requete MySQL ?

merci à toi

Mush

  • Mushraider
  • Administrator
  • Hero Member
  • *****
  • Messages: 768
  • Meh.
    • Voir le profil
    • MushRaider
Re : Création d'un bridge vBulletin :
« Réponse #14 le: 24 févr. 2015, 11:38:38 »
Bah comme pour n'importe quel formulaire HTML oO, l'appli reçoit le mdp en clair avant de l'encoder pour le stocker en base, et tout se trouve dans /app/Controller/AuthController.php ($this->request->data['User']['password'])
MushRaider - modern raid planner for modern raiders
Me suivre sur  twitter and Google+
Soutenir le projet et me payer une bière =)