Bonjour,
pour la question: "au fait, ça marche avec ta télécommande lorsque tu fais des appuis longs pour les touches 1 et 4 pour saisir 146 ? " -> oui avec la télécommande ça fonctionne.
Pour la question:"essaie de copier l'URL ci-dessous dans ton Internet Explorer":
ça ne marche pas, j'ai testé dans ie:
http://192.168.1.29/script/?exec=freebo ... ep=CARTOON -> aucune réaction de la tv
pour la partie:
"(sinon avec le code que tu as copié tu as 2 fois &step=CARTOON" -> erreur de transmission car j'ai revérifié sur l'eedomus je n'ai pas mis deux fois &step=CARTOON
Voici le script:
<?
$GLOBALS['freebox_ip'] = getArg('freebox_ip');
$GLOBALS['app_version'] = '1.0.0';
$GLOBALS['app_id'] = 'fr.freebox.eedomus';
function sdk_page_style()
{
?><style type="text/css">
body,td,th {
font-family: Arial, Helvetica, sans-serif;
font-size: 14px;
}
body {
margin-left: 10px;
margin-top: 10px;
}
button
{
font-size: 100%;
padding: 0.5em 1em;
text-decoration: none;
-moz-user-select: none;
cursor: pointer;
line-height: normal;
text-align: center;
vertical-align: baseline;
white-space: nowrap;
border: 0 none rgba(0, 0, 0, 0);
border-radius: 4px;
background-color: #0078e7;
color: #fff;
}
</style>
<img align="absmiddle" src="https://secure.eedomus.com/img/mdm/periph/freebox.png"> <span style="font-size:20px">Freebox et eedomus</span><br />
<?
}
function sdk_hmac_sha1($key, $data)
{
// Adjust key to exactly 64 bytes
if (strlen($key) > 64)
{
$key = str_pad(sha1($key, true), 64, chr(0));
}
if (strlen($key) < 64)
{
$key = str_pad($key, 64, chr(0));
}
// Outter and Inner pad
$opad = str_repeat(chr(0x5C), 64);
$ipad = str_repeat(chr(0x36), 64);
// Xor key with opad & ipad
for ($i = 0; $i < strlen($key); $i++)
{
$opad[$i] = $opad[$i] ^ $key[$i];
$ipad[$i] = $ipad[$i] ^ $key[$i];
}
return sha1($opad.sha1($ipad.$data, true));
}
function sdk_step1()
{
sdk_page_style();
$url = "http://".$GLOBALS['freebox_ip']."/api/v1/login/authorize/";
$post = '{
"app_id": "'.$GLOBALS['app_id'].'",
"app_name": "App eedomus",
"app_version": "'.$GLOBALS['app_version'].'",
"device_name": "Box eedomus"
}';
$response = httpQuery($url, 'POST', $post);
$json = sdk_json_decode($response);
// ex. {"success":true,"result":{"app_token":"XibW6mhg0wsUsaQ2cMWj0a2QGQBHMi0EknUpa9paGJYPf3rMWU0ATNX4LZ20OhDe","track_id":0}}
if ($json['success'] != true)
{
echo "Erreur lors de la connexion à la freebox: <br><br>";
if ($json['msg'] != '')
{
echo "<b>".$json['msg']."</b><br>";
}
else
{
echo $response;
}
die();
}
$app_token = $json['result']['app_token'];
$track_id = $json['result']['track_id'];
if ($app_token != '')
{
saveVariable('new_app_token', $app_token);
saveVariable('new_track_id', $track_id);
}
echo "Veuillez autoriser l'application eedomus en sélectionnant <b>OUI</b> sur l'affichage de votre Freebox Server, puis cliquer sur </b>Continuer</b><br><br>";
$controller_id = getArg('controller_id');
$url = "?controller_id=".$controller_id."&url=".urlencode('http://localhost/script/?exec=freebox.php&controller_id='.$controller_id.'&freebox_ip='.$GLOBALS['freebox_ip'].'&step=2');
echo '<button onclick="window.location.href=\''.$url.'\'">Continuer</button>';
}
function sdk_step2()
{
sdk_page_style();
$track_id = loadVariable('new_track_id');
$url = "http://".$GLOBALS['freebox_ip']."/api/v1/login/authorize/$track_id";
$response = httpQuery($url, 'GET');
$json = sdk_json_decode($response);
// ex. {"success":true,"result":{"status":"granted","challenge":"\/ZRimxCjeGbH20TLeL6\/bQtAOTtRLInV","password_salt":"3qw8v\/0rTvOZfzsFZrBLiB\/WvJ56J9Gh"}}
if ($json['success'] != true)
{
echo "Erreur lors de la connexion à la freebox: <br><br>";
if ($json['msg'] != '')
{
echo "<b>".$json['msg']."</b><br>";
}
else
{
echo $response;
}
die();
}
else if ($json['result']['status'] != 'granted')
{
echo "Erreur l'app n'a pas été autorisée sur votre Freebox Server : <b>".$json['result']['status']."</b><br><br>";
if ($json['result']['status'] == 'timeout')
{
$controller_id = getArg('controller_id');
$url = "?controller_id=".$controller_id."&url=".urlencode('http://localhost/script/?exec=freebox.php&controller_id='.$controller_id.'&freebox_ip='.$GLOBALS['freebox_ip'].'&step=1');
echo '<button onclick="window.location.href=\''.$url.'\'">Recommencer</button>';
}
else
{
$controller_id = getArg('controller_id');
$url = "?controller_id=".$controller_id."&url=".urlencode('http://localhost/script/?exec=freebox.php&controller_id='.$controller_id.'&freebox_ip='.$GLOBALS['freebox_ip'].'&step=2');
echo '<button onclick="window.location.href=\''.$url.'\'">Vérifier à nouveau</button>';
}
die();
}
else
{
$app_token = loadVariable('new_app_token');
saveVariable('app_token', $app_token);
saveVariable('track_id', $track_id);
saveVariable('challenge', $json['result']['challenge']);
echo "<img width='64' src='/img/mdm/01/check.png' align='absmiddle'> L'app eedomus a été autorisée avec succés sur votre Freebox Revolution !";
$json = sdk_session(/*$show_error*/ false, /*$return_result*/ true);
if ($json['success'] != true)
{
// on réessaie
$json = sdk_session(/*$show_error*/ false, /*$return_result*/ true);
}
if (!$json['result']['permissions']['parental'] || !$json['result']['permissions']['settings'])
{
$right_url = "http://".$GLOBALS['freebox_ip']."/#Fbx.os.app.settings.Accounts";
echo "<br><br>Vous devez autoriser les droits d'accés de l'app eedomus sur votre Freebox : <b>Modification des règlages de la Freebox</b> et <b>Accès au contrôle parental</b><br>Rendez vous sur <a target='_blank' href='$right_url'>$right_url</a> puis dans l'onglet <b>Applications</b> et cliquez sur <b>App eedomus</b>.";
$controller_id = getArg('controller_id');
$url = "?controller_id=".$controller_id."&url=".urlencode('http://localhost/script/?exec=freebox.php&controller_id='.$controller_id.'&freebox_ip='.$GLOBALS['freebox_ip'].'&step=2');
echo '<br><br><button onclick="window.location.href=\''.$url.'\'">Vérifier à nouveau les droits</button>';
echo "<br><br><img src='http://doc.eedomus.com/images/c/ce/Eedomus_freebox05.png'>";
}
else
{
echo "<br><br><i>Vous pouvez maintenant fermer cette fenêtre.</i>";
}
}
}
function sdk_session($show_error = false, $return_result = false)
{
$app_token = loadVariable('app_token');
$challenge = loadVariable('challenge');
$password = sdk_hmac_sha1(stripslashes($app_token), stripslashes($challenge));
// on ouvre la session
$url = "http://".$GLOBALS['freebox_ip']."/api/v1/login/session/";
$post = '{
"app_id": "'.$GLOBALS['app_id'].'",
"password": "'.$password.'"
}';
$response = httpQuery($url, 'POST', $post);
$json = sdk_json_decode($response);
//echo "challenge was [$challenge]<br>";
if ($json['result']['challenge'] != '')
{
saveVariable('challenge', $json['result']['challenge']);
}
//echo "challenge is now [".$json['result']['challenge']."]<br>";
if ($return_result) { return $json; }
if ($json['result']['session_token'] != '')
{
saveVariable('session_token', $json['result']['session_token']);
//echo "OK"; // [$response]";
//echo "<br>session_token = [".$json['result']['session_token']."]";
return true;
}
else
{
if ($show_error)
{
echo "<br>Erreur d'authentification: ";
if ($json['msg'] != '')
{
echo "<b>".$json['msg']."</b><br><br>";
}
echo "[$response]<br>";
echo "Challenge was [$challenge]<br>";
}
return false;
}
}
// si la session est perdue il faudra regénérer le challenge puis le session_token, d'où les 3 essais
function sdk_freebox_query($url, $method = 'GET', $post = NULL, $allow_retry = 3, $return_xml = true)
{
$full_url = "http://".$GLOBALS['freebox_ip'].$url;
$session_token = loadVariable('session_token');
$headers = array("X-Fbx-App-Auth: ".stripslashes($session_token));
$response = httpQuery($full_url, $method, $post, NULL, $headers);
$json = sdk_json_decode($response);
if ($json['success'] != true)
{
// on réétabli la session
if ($allow_retry > 0)
{
sdk_session(/*$show_error*/ false);
$allow_retry--;
return sdk_freebox_query($url, $method, $post, $allow_retry);
}
}
if ($json['result']['challenge'] != '')
{
saveVariable('challenge', $json['result']['challenge']);
}
if ($return_xml)
{
// permet d'avoir une mise en forme plus lisible dans un browser
sdk_header('text/xml');
echo jsonToXML($response);
}
else
{
return $json;
}
}
switch($_GET['step'])
{
default:
case '1':
sdk_step1();
break;
case '2':
sdk_step2();
break;
case 'session':
// on essaie 2 fois
if (!sdk_session(/*$show_error*/ false))
{
sdk_session(/*$show_error*/ true);
}
echo "done";
break;
case 'wifi':
$action = getArg('action');
$post = '{ "ap_params": { "enabled": '.$action.' } }';
sdk_freebox_query('/api/v1/wifi/config/', 'PUT', $post);
break;
case 'parental':
$action = getArg('action');
$mac = getArg('mac');
// on commence par rechercher l'id de la règle
$id = '';
$json = sdk_freebox_query('/api/v1/parental/filter/', 'GET', NULL, 3, false);
foreach($json['result'] as $filter)
{
foreach($filter['macs'] as $cur_mac)
{
if (strtolower(trim($cur_mac)) == strtolower(trim($mac)))
{
$id = $filter['id'];
}
}
}
// on ajoute la règle
if ($action == 'status')
{
if ($id === '')
{
// aucun filtre trouvé, équivalent à pas de controle
sdk_header('text/xml');
echo '<root><result><forced_mode>allowed</forced_mode></result></root>';
}
else
{
sdk_freebox_query('/api/v1/parental/filter/'.$id, 'GET');
}
}
else
{
$post = '{ "macs": ["'.$mac.'"], "forced_mode": "'.$action.'", "forced": true}';
if ($id === '')
{
// on créé la règle
sdk_freebox_query('/api/v1/parental/filter/', 'POST', $post);
}
else
{
// on la met à jour
sdk_freebox_query('/api/v1/parental/filter/'.$id, 'PUT', $post);
}
}
break;
case 'reboot':
sdk_freebox_query('/api/v1/system/reboot/', 'POST');
break;
case 'api_get':
$api_url = getArg('api_url');
sdk_freebox_query($api_url);
break;
// CARTOON NETWORK
case 'CARTOON':
httpQuery("192.168.1.1/pub/remote_control?code=56318458&key=1&long=true", "GET");
httpQuery("192.168.1.1/pub/remote_control?code=56318458&key=4&long=true", "GET");
httpQuery("192.168.1.1/pub/remote_control?code=56318458&key=6", "GET");
break;
}
?>