par
Jan74 » 17 juin 2016, 14:39
Salut les PHP lovers,
je bloque depuis des jours sur une chose qui doit paraître assez simple pour certains d'entre vous.
J'ai deux CMS distincts qui sont d'un côté Invision power board et de l'autre côté prestashop.
Je souhaiterai mettre prestashop en esclave de IPB. Que les membres identifiés sur ipb puissent l'être automatiquement sur Presta.
Donc j'ai creusé sur le sujet.
Je suis tombé sur un script tout fait sur cette page :
https://www.invisionpower.com/support/g ... onnect-r27
qui montre un exemple de script en esclave du forum avec la méthode de ips connect décrite ci-dessus.
Voici le code qui m’intéresse :
Code : Tout sélectionner
<?php
//-----------------------------------------
// Connect to database
//-----------------------------------------
require_once 'config.php';
$db = new mysqli( $databaseHost, $databaseUsername, $databasePassword, $databaseDatabase );
//-----------------------------------------
// Are we logged in?
//-----------------------------------------
$loggedIn = NULL;
// Only do this if the user has not expressly logged out of the IPS Connect Network
if ( !isset( $_COOKIE[ 'ipsconnect_' . md5( $masterUrl ) ] ) or $_COOKIE[ 'ipsconnect_' . md5( $masterUrl ) ] )
{
// Check local cookies
if ( isset( $_COOKIE['ipsce_user'] ) )
{
if ( $user = $db->query( "SELECT * FROM members WHERE username='". $db->escape_string( $_COOKIE['ipsce_user'] ) ."'" )->fetch_array() )
{
if ( $user['password'] == $_COOKIE['ipsce_pass'] )
{
$loggedIn = $user['username'];
}
}
}
// Check IPS Connect
if ( $loggedIn === NULL and isset( $_COOKIE[ 'ipsconnect_' . md5( $masterUrl ) ] ) and $_COOKIE[ 'ipsconnect_' . md5( $masterUrl ) ] )
{
$check = file_get_contents( $masterUrl . '?' . http_build_query( array( 'act' => 'cookies', 'data' => json_encode( $_COOKIE ) ) ) );
if ( $check = @json_decode( $check, TRUE ) and $check['connect_status'] == 'SUCCESS' )
{
// Load local member
if ( $user = $db->query( "SELECT * FROM members WHERE connect_id=". intval( $check['connect_id'] ) )->fetch_array() )
{
// Update local member
if ( $user['username'] != $check['connect_username'] or $user['email'] != $check['connect_email'] )
{
$db->query( "UPDATE members SET username='". $db->escape_string( $check['connect_username'] ) ."', email='". $db->escape_string( $check['connect_email'] ) ."' WHERE connect_id=". intval( $check['connect_id'] ) .";" );
}
}
else
{
// Create local member
$db->query( "INSERT INTO members ( username, email, password, connect_id ) VALUES ( '". $db->escape_string( $check['connect_username'] ) ."', '". $db->escape_string( $check['connect_email'] ) ."', '". md5( rand( 1, 10000 ) ) ."', ". intval( $check['connect_id'] ) ." )" );
$user = $db->query( "SELECT * FROM members WHERE connect_id=". intval( $check['connect_id'] ) )->fetch_array();
}
// Log in
setcookie( 'ipsce_user', $user['username'], time()+60*60*24*30 );
setcookie( 'ipsce_pass', $user['password'], time()+60*60*24*30 );
$loggedIn = $user['username'];
}
}
}
le seul problème c'est que le fameux $password est juste crypté en MD5 alors que prestashop utilise ce type de méthode :
Code : Tout sélectionner
/**
* Encrypt password
*
* @param string $passwd String to encrypt
*/
public static function encrypt($passwd)
{
return md5(_COOKIE_KEY_.$passwd);
}
donc comment puis je faire pour adapter le code en dessus avec ce type d'encodage MD5 par dessus avec une clé supplémentaire et le password
Merci pour votre aide !

Salut les PHP lovers,
je bloque depuis des jours sur une chose qui doit paraître assez simple pour certains d'entre vous.
J'ai deux CMS distincts qui sont d'un côté Invision power board et de l'autre côté prestashop.
Je souhaiterai mettre prestashop en esclave de IPB. Que les membres identifiés sur ipb puissent l'être automatiquement sur Presta.
Donc j'ai creusé sur le sujet.
Je suis tombé sur un script tout fait sur cette page :
https://www.invisionpower.com/support/guides/_/advanced-and-developers/integration/ips-connect-r27
qui montre un exemple de script en esclave du forum avec la méthode de ips connect décrite ci-dessus.
Voici le code qui m’intéresse :
[code]<?php
//-----------------------------------------
// Connect to database
//-----------------------------------------
require_once 'config.php';
$db = new mysqli( $databaseHost, $databaseUsername, $databasePassword, $databaseDatabase );
//-----------------------------------------
// Are we logged in?
//-----------------------------------------
$loggedIn = NULL;
// Only do this if the user has not expressly logged out of the IPS Connect Network
if ( !isset( $_COOKIE[ 'ipsconnect_' . md5( $masterUrl ) ] ) or $_COOKIE[ 'ipsconnect_' . md5( $masterUrl ) ] )
{
// Check local cookies
if ( isset( $_COOKIE['ipsce_user'] ) )
{
if ( $user = $db->query( "SELECT * FROM members WHERE username='". $db->escape_string( $_COOKIE['ipsce_user'] ) ."'" )->fetch_array() )
{
if ( $user['password'] == $_COOKIE['ipsce_pass'] )
{
$loggedIn = $user['username'];
}
}
}
// Check IPS Connect
if ( $loggedIn === NULL and isset( $_COOKIE[ 'ipsconnect_' . md5( $masterUrl ) ] ) and $_COOKIE[ 'ipsconnect_' . md5( $masterUrl ) ] )
{
$check = file_get_contents( $masterUrl . '?' . http_build_query( array( 'act' => 'cookies', 'data' => json_encode( $_COOKIE ) ) ) );
if ( $check = @json_decode( $check, TRUE ) and $check['connect_status'] == 'SUCCESS' )
{
// Load local member
if ( $user = $db->query( "SELECT * FROM members WHERE connect_id=". intval( $check['connect_id'] ) )->fetch_array() )
{
// Update local member
if ( $user['username'] != $check['connect_username'] or $user['email'] != $check['connect_email'] )
{
$db->query( "UPDATE members SET username='". $db->escape_string( $check['connect_username'] ) ."', email='". $db->escape_string( $check['connect_email'] ) ."' WHERE connect_id=". intval( $check['connect_id'] ) .";" );
}
}
else
{
// Create local member
$db->query( "INSERT INTO members ( username, email, password, connect_id ) VALUES ( '". $db->escape_string( $check['connect_username'] ) ."', '". $db->escape_string( $check['connect_email'] ) ."', '". md5( rand( 1, 10000 ) ) ."', ". intval( $check['connect_id'] ) ." )" );
$user = $db->query( "SELECT * FROM members WHERE connect_id=". intval( $check['connect_id'] ) )->fetch_array();
}
// Log in
setcookie( 'ipsce_user', $user['username'], time()+60*60*24*30 );
setcookie( 'ipsce_pass', $user['password'], time()+60*60*24*30 );
$loggedIn = $user['username'];
}
}
}
[/code]
le seul problème c'est que le fameux $password est juste crypté en MD5 alors que prestashop utilise ce type de méthode :
[code] /**
* Encrypt password
*
* @param string $passwd String to encrypt
*/
public static function encrypt($passwd)
{
return md5(_COOKIE_KEY_.$passwd);
}
[/code]
donc comment puis je faire pour adapter le code en dessus avec ce type d'encodage MD5 par dessus avec une clé supplémentaire et le password :(
Merci pour votre aide ! 8-|