session->application->applicationId === $validAppId) {
// Vérification de la chaine de signature SSL par expression régulière
if (preg_match("/https:\/\/s3.amazonaws.com(\:443)?\/echo.api\/*/i", $_SERVER['HTTP_SIGNATURECERTCHAINURL']) == false){
ThrowRequestError(400, "Forbidden, unkown SSL Chain Origin!");
}
// Vérification du certificatPEM
// Récupération en cache
$local_pem_hash_file = sys_get_temp_dir() . '/' . hash("sha256", $_SERVER['HTTP_SIGNATURECERTCHAINURL']) . ".pem";
if (!file_exists($local_pem_hash_file)){
file_put_contents($local_pem_hash_file, file_get_contents($_SERVER['HTTP_SIGNATURECERTCHAINURL']));
}
$local_pem = file_get_contents($local_pem_hash_file);
if (openssl_verify($json, base64_decode($_SERVER['HTTP_SIGNATURE']) , $local_pem) !== 1){
ThrowRequestError(400, "Forbidden, failed to verify SSL Signature!");
}
// Vérifications complémentaires
$cert = openssl_x509_parse($local_pem);
if (empty($cert)) ThrowRequestError(400, "Certificate parsing failed!");
// SANs Check
if (stristr($cert['extensions']['subjectAltName'], 'echo-api.amazon.com') != true) ThrowRequestError(400, "Forbidden! Certificate SANs Check failed!");
// Vérification de l'expiration
if ($cert['validTo_time_t'] < time()){
ThrowRequestError(400, "Forbidden! Certificate no longer Valid!");
// Deleting locally cached file to fetch a new at next req
if (file_exists($local_pem_hash_file)) unlink($local_pem_hash_file);
}
// Nettoyage
unset($local_pem_hash_file, $cert, $local_pem);
//la requête a été envoyée depuis moins d'une minute.
if (time() - strtotime($requete->request->timestamp) > 60) ThrowRequestError(400, "Request Timeout! Request timestamp is to old.");
// On récupère le type de requête
$RequestType = $requete->request->type;
if ($RequestType == "LaunchRequest"){
$ReturnValue = array (
'version' => '1.0',
'sessionAttributes' =>
array (
'countActionList' =>
array (
'read' => true,
'category' => true,
),
),
'response' =>
array (
'shouldEndSession' => false,
'outputSpeech' =>
array (
'type' => 'SSML',
'ssml' => ''."Bienvenue dans l'application ma station météo".''." Pour avoir de l'aide dites, aide moi".'',
),
),
);
}
elseif ($RequestType == "SessionEndedRequest"){
// Ici le code pour SessionEndedRequest
}
elseif ($RequestType == "IntentRequest"){
if ($requete->request->intent->name == "AMAZON.HelpIntent"){
$ReturnValue = array (
'version' => '1.0',
'sessionAttributes' =>
array (
'countActionList' =>
array (
'read' => true,
'category' => true,
),
),
'response' =>
array (
'shouldEndSession' => false,
'outputSpeech' =>
array (
'type' => 'SSML',
'ssml' => ''."Voici les commandes".' donne moi les températures'.'',
),
),
);
}
if ($requete->request->intent->name == "grandeur_physique"){
if ($requete->request->intent->slots->valeur->value <> ""){
// Séparation des données dans un tableau
$exploded=(explode(' ', $contenu_du_fichier, 20));
// Suivant la valeur de nous chargeons la réponse dans la variable valeur
switch ($requete->request->intent->slots->valeur->value) {
case "température intérieure":
$valeur='la '.$exploded[0].' '.$exploded[1].' est de '.$exploded[2].' '.$exploded[3];
break;
case "hygrométrie intérieure":
$valeur="l' ".$exploded[4].' '.$exploded[5].' est de '.$exploded[6].' '.$exploded[7];
break;
case "température extérieure":
$valeur='la '.$exploded[8].' '.$exploded[9].' est de '.$exploded[10].' '.$exploded[11];
break;
case "hygrométrie extérieure":
$valeur="l' ".$exploded[12].' '.$exploded[13].' est de '.$exploded[14].' '.$exploded[15];
break;
case "mes températures":
case "les températures":
$valeur='la '.$exploded[0].' '.$exploded[1].' est de '.$exploded[2].' '.$exploded[3].''.' et la '.$exploded[8].' '.$exploded[9].' est de '.$exploded[10].' '.$exploded[11];
break;
case "mes hygrométries":
case "les hygrométries":
$valeur="l' ".$exploded[4].' '.$exploded[5].' est de '.$exploded[6].' '.$exploded[7].''." et l' ".$exploded[12].' '.$exploded[13].' est de '.$exploded[14].' '.$exploded[15];
break;
case "mes mesures":
case "mes valeurs":
$valeur='Pour les températures'.''.'la '.$exploded[0].' '.$exploded[1].' est de '.$exploded[2].' '.$exploded[3].''.' et la '.$exploded[8].' '.$exploded[9].' est de '.$exploded[10].' '.$exploded[11];
$valeur=$valeur.''."Pour l'humidité".''."l' ".$exploded[4].' '.$exploded[5].' est de '.$exploded[6].' '.$exploded[7].''." et l' ".$exploded[12].' '.$exploded[13].' est de '.$exploded[14].' '.$exploded[15];
break;
default:
$valeur="je n'ai pas bien compris votre demande";
}
// Message de fin en fonction de l'heure
$heure = date('G'); // donne l'heure
if ($heure < 8) { // message entre minuit et 7h59
$message= 'Je vous souhaite une bonne nuit.';
} else {
if ($heure < 18) { // message entre 8h00 et 17h59
$message= 'Je vous souhaite une bonne journée.';
} else { // message entre 18h00 et 23h59
$message= 'Je vous souhaite une bonne soirée';
}
}
$ReturnValue = [
"response" => [
"outputSpeech" => [
"type" => 'SSML',
"ssml" => ''.$valeur.''.$message.'',
]
]
];
}
}
}else{
ThrowRequestError();
}
// Setup a JSON response header
header('Content-Type: application/json;charset=UTF-8');
header("Content-length: " . strlen($ReturnValue));
// Return the output
echo json_encode($ReturnValue);
}else {
ThrowRequestError(400, "Forbidden, unkown Application ID!");
}
function ThrowRequestError($code = 400, $msg = 'Bad Request'){
GLOBAL $SETUP;
http_response_code(400);
echo "Error " . $code . "\n" . $msg;
exit();
}
?>