TP HTTP-MYSQL-API-frontend_WebRTC
Prof. Samuel OUYA- decembre 2022
1- Se connecter comme root et installer apache2 par la commande :
apt install apache2
2- Tester le demarrage de apache2
root@boris-VirtualBox:/home/boris# netstat -anp | grep -w 80
tcp6 0 0 :::80 :::* LISTEN 726/apache2
3- Aller dans le repertoire //etc/apache2 et lister le contenu et donner le rôle des sous repertoires
root@boris-VirtualBox:/home/boris# cd /etc/apache2/
root@boris-VirtualBox:/etc/apache2# ls
[Link] conf-enabled magic mods-enabled sites-available
conf-available envvars mods-available [Link] sites-enabled
4- Allez dans le repertoire par defaut d’hebergement de sites web d’apache2 qui est :
//var/www/html et créer le sous dossier tp1 et s’y mettre
root@boris-VirtualBox:/etc/apache2# cd /var/www/html
root@boris-VirtualBox:/var/www/html# mkdir tp1
root@boris-VirtualBox:/var/www/html# cd tp1
5- dans le meme creez votre premier site web dans le fichier [Link]
root@boris-VirtualBox:/var/www/html/tp1# nano [Link]
<html>
<head>
</head>
<body>
Mon premier fichier html est bien présenté
</body>
</html>
Lancer un navigateur et saisissez [Link]
et remarquez que l’ accent sont remplacé par des caractères bizarres
fig1 : le caractère accentué à des problemes
Editer le fichier le fichier //etc/apache2/conf-available/[Link]
et decommentez la ligne AddDefaultCharset UTF-8
Sauvegarder le fichier et redémarrer le serveur apache2 par la commande :
service apache2 restart
Dans le navigateur actualiser la page et que constatez-vous ?
Comment faire en sorte que son serveur web apache2 prenne en compte les caractères
accentués ?
6- prise en compte de code php par apache2
Toujours dans le dossier //var/www/html/tp editer le fichier [Link]
Sauvegarder le fichier et dans un navigateur saississez [Link]
fig : le code sort tel
Pourquoi le code php n’est pas executé ?
Installez la librairie libapache2-mod-php comme suit :
root@boris-VirtualBox:/var/www/html/tp1# apt install libapache2-mod-php
fig : installation du module libapache2-mod-php
Interprétez les informations dans la figure ci-dessus
Actualiser la page et que constatez vous ?
Fig : execution du code php
Comment faire en sorte que apache prenne en compte le code php ?
Que fait la ligne du code echo "<br>";
7- intérêt du fichier journal de apache2 /var/log/apache2/[Link]
éditer votre code php et faites une erreur enlevant ; de la ligne echo "<br>";
fig : erreur à la ligne 3
et relancez votre code dans le navigateur comme suit :
fig : rien ne s’affiche
On constate que dans le log, on nous indique que ; a été oublié à la ligne 3
fig : erreur à la ligne 3 =4-1
Aller à la ligne et ajoutez ; et tester dans le navigateur :
root@boris-VirtualBox:/var/www/html/tp1# nano +3 [Link]
fig : erreur rectifiée
Que fait la commande : nano +3 [Link] ?
8- Gestion de bases de données avec mysql-server
8.1 Installer mysql-server par la commande :
root@boris-VirtualBox:/var/www/html/tp1# apt install mysql-server
8.2 vérifier si le port par défaut du serveur mysql qui est 3306 est ouvert.
root@boris-VirtualBox:/var/www/html/tp1# netstat -anp | grep -w 3306
fig : ouverture du port 3306 de mysql
Se connecter sur le serveur mysql en ligne de commande en tant que root
root@boris-VirtualBox:/var/www/html/tp1# mysql -u root -p
fig : interface de mysql
Avez vous remarqué que n’importe mot de passe est accepté par le serveur pour root ?
8.3 Montrer toutes les bases sue le serveur mysql
mysql> show databases;
8. 4 Quelles sont les tables de la base mysql ?
8.5 creation de la base sgbs :
mysql> create database sgbs;
8.6 se connecter à la base sgbs
mysql> use sgbs;
8.8 creation de la table client(id,prenom,nom,code,numcompte,solde)
mysql> create table client(id int primary key auto_increment, prenom varchar(20), nom
varchar(20), code varchar(5), numcompte varchar(20), montant varchar(20));
8.9 décrire la table client en vue de voir les différents champs ;
fig : opérations de base 1 sur mysql
8.10 insertion des comptes dans la table client
mysql> insert into client(prenom,nom,code,numcompte,montant)
values("Macky","Sall","1111","1001","5800000");
Pourquoi on n’a pas précisé de Macky ?
8.11 : afficher toutes les infos de la table client
mysql> select * from client;;
fig : Affichage du contenu de la table client
8.12 Modification du solde du president Diouf à 12 7000 000
mysql> update client set montant=127000000 where id=3;
fig : update sur l’element dont l’id est 3
Ajoutons Idrissa Seck
mysql> insert into client(prenom,nom,code,numcompte,montant)
values("Idrissa","Seck","4444","1004","15800000");
fig : Ajout de Idrissa Seck
8.13 : Suppression d’un enregistrement
mysql> delete from client where id=4;
fig : suppression d’un enregistrement dans la table client
8.13 : fichier de configuration de mysql et ses principaux paramètres
En utilisant la commande :
root@boris-VirtualBox:/var/www/html/tp1# netstat -anp | grep -w 3306
tcp 0 0 [Link]:3306 [Link]:* LISTEN 11624/mysqld
Peut -on utiliser notre serveur mysql en réseau et pourquoi?
Editons le fichier :
root@boris-VirtualBox:/var/www/html/tp1# nano /etc/mysql/[Link].d/[Link]
fig : les 2 parametres d’ecoute de mysql
Interprétez les 2 paramètres bind-address et mysqlx-bind-address
fig : changement de valeurs de parametres de mysql
on redemarre le serveur mysql pour que les nouveaux parametres soient pris en compte
root@boris-VirtualBox:/var/www/html/tp1# service mysql restart
On fait de nouveau :
root@boris-VirtualBox:/var/www/html/tp1# netstat -anp | grep -w 3306
Interprétez le résultat ?
8.14 : création de compte sur le serveur mysql et affectation des droits sur une base
root@boris-VirtualBox:/var/www/html/tp1# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31-0ubuntu0.20.04.1 (Ubuntu)
mysql> create user bouki identified by 'passer';
Query OK, 0 rows affected (0,06 sec)
mysql> grant all privileges on sgbs.* to bouki;
Query OK, 0 rows affected (0,01 sec)
mysql> flush privileges;
Donner la signification des 3 dernières commandes
9- Recuperation des paramètres dans un programme php avec les variables superglobales
$_GET, $_POST et $_REQUEST et format des messages HTTP
9.1 Methode de reception POST
Editer le fichier :
root@boris-VirtualBox:/var/www/html/tp1# nano [Link]
Avec le contenu suivant :
fig : reception des parametes par la methode POST
9.2 : formulaire html avec la méthode POST
On rappelle qu’un formulaire sert à recueillir les données pour les transmettre à un programme pour
traitement
Editer le fichier html [Link] suivant :
<html>
<head>
</head>
<body>
<form method="POST" action="[Link]">
Prenom: <input type="text" name="prenom"><br>
Nom: <input type="text" name="nom"><br>
<input type="submit" value="Valider">
</form>
</body>
</html>
Dans un navigateur utiliser l’url [Link]
et remplissez comme suit :
fig : formulaire
Après validation, on obtient :
fig : appel de [Link] par la methode POST
9.3 Nécessité d’utilisation d’une même méthode aussi bien à l’envoi qu’à la réception :
Editer le fichier du formulaire et remplacez la methode POST par GET tout en gardant POST
dans [Link]
fig : changement de la méthode POST en GET
fig
On teste dans un navigateur comme suit :
fig : methode GET
fig : les prenom et nom sont vides et les parametres sont envoyés dans l’url
Expliquez pourquoi ces 2 paramètres sont vides
Remplacer dans le fichier [Link] par GET et reessayez
fig : meme methode GET dans le formulaire que dans [Link]
Expliquez pour tout marche correctement
remplacer la methode de reception dans [Link] par REQUEST comme suit :
fig : Methode REQUEST traitant des données aussi bien par GET que par POST
on teste
fig : tout marce malgré qu’à l’envoi la méthode est GET
Donner votre conclusion et expliquer ce qui s’est passé en utilisant le format des messages
HTTP
10- module de prise en charge de mysql dans php
10.1 se faire aider par le fichier journal de son serveur web
On edite le code php sensé afficher de maniere brute tous les clients de notre banque sgbs
root@boris-VirtualBox:/var/www/html/tp1# nano [Link]
<?php
// connexion à la base sgbs
$conn=mysqli_connect("localhost","bouki","passer","sgbs");
// preparation de la requete
$sql="select * from client";
// execution de la requte
$result=mysqli_query($conn,$sql);
// recuperation de tous les resultats dans un tableau
$tab=mysqli_fetch_all($result);
// affichage brut des resultats
print_r($tab);
?>
On execute le programme [Link] dans un navigateur
Fig : rien ne s’affiche
Utilisons la commande tail -f pour consulter le logs d’apache2
fig : indication que la fonction mysqli_connect() est inconnue
Installons le paquet php-mysql
root@boris-VirtualBox:/var/www/html/tp1# apt install php-mysql
root@boris-VirtualBox:/var/www/html/tp1# service apache2 restart
NB : il est necessaire de redemarrer apache2
On reteste
fig : Prise en compte des fonctions php fournies par le paquet php-mysql et affichage des
données de la table client de la base sgbs
10.2 Ecriture des [Link] ; [Link], [Link]
on copie [Link] en [Link] et on edite le dernier fichier
root@boris-VirtualBox:/var/www/html/tp1# cp [Link] [Link]
<?php
$prenom=$_REQUEST['prenom'];
$nom=$_REQUEST['nom'];
$code=$_REQUEST['code'];
$numcompte=$_REQUEST['numcompte'];
$montant=$_REQUEST['montant'];
// connexion à la base sgbs
$conn=mysqli_connect("localhost","bouki","passer","sgbs");
// preparation de la requete
$sql="insert into client(prenom,nom,code,numcompte,montant)
values('$prenom','$nom','$code','$numcompte','$montant')";
// execution de la requte
$result=mysqli_query($conn,$sql);
// affichage indo pour informer l'utilisateur
echo "Insertion reussie";
On installe le client HTTP avancé curl par la commande :
root@boris-VirtualBox:/var/www/html/tp1# apt install curl
On utilise curl pour tester le programme create avec la methode GET
root@boris-VirtualBox:/var/www/html/tp1# curl -X GET "[Link]
prenom=Ousmane&nom=Sonko&code=5555&numcompte=1005&montant=2500000"
En actualisant dans le navigateur, on voit que Ousmane sonko a ete creé
fig : affichage de ousmane sonko
Testons l’ajout de Khalifa Sall par la methode POST
root@boris-VirtualBox:/var/www/html/tp1# curl -X POST "[Link] -d
"prenom=Khalifa&nom=Sall&code=6666&numcompte=1006&montant=3500000"
Reaffichons le resultat de [Link] dans le navigateur
fig : affichage de khalifa inseré par la methode POST
copions le programme [Link] en [Link] qui prend le prenom et le nom et le nouveau
montant fait la mise à jour du montant.
root@boris-VirtualBox:/var/www/html/tp1# cp [Link] [Link]
et on le modifie comme suit :
<?php
$prenom=$_REQUEST['prenom'];
$nom=$_REQUEST['nom'];
$montant=$_REQUEST['montant'];
// connexion à la base sgbs
$conn=mysqli_connect("localhost","bouki","passer","sgbs");
// preparation de la requete
$sql="iupdate client set montant='$montant' where prenom='$prenom' and nom='$nom'";
// execution de la requte
$result=mysqli_query($conn,$sql);
// affichage indo pour informer l'utilisateur
echo "Mise a reussie";
?>
On execute le programme [Link] en inserant les données dans la ligne de requete avec la
methode PUT
On regarde le resultat avec [Link] dans le navigateur
fig : passage de montant de Sonko à 48500000
copions le programme [Link] en [Link]
root@boris-VirtualBox:/var/www/html/tp1# cp [Link] [Link]
et le modifions comme suit:
<?php
$prenom=$_REQUEST['prenom'];
$nom=$_REQUEST['nom'];
// connexion à la base sgbs
$conn=mysqli_connect("localhost","bouki","passer","sgbs");
// preparation de la requete
$sql="delete from client where prenom='$prenom' and nom='$nom'";
// execution de la requte
$result=mysqli_query($conn,$sql);
// affichage indo pour informer l'utilisateur
echo "Suppression reussie";
?>
Executons le programme [Link] en ligne de requete avec la methode DELETE en inserant les
données dans la ligne de requete
root@boris-VirtualBox:/var/www/html/tp1# curl -X DELETE "[Link]
prenom=Khalifa&nom=Sall"
En consultant [Link] , on voit que Khalifa a eté supprimé
fig : suppression de Khalifa en envoyant les données dans la ligne de requete
11- Installation et utilisation du client HTTP avancé graphique postman
on utilise le gestionnaire de paquet snap pour installer postman
root@boris-VirtualBox:/var/www/html/tp1# snap install postman
fig : installation postman
11.1 lancement de postman en tant que simple utilisateur en tache de fond
boris@boris-VirtualBox:~$ postman &
fig : on signe avec son compte gmail
fig : on entre son email et on valide
on obtient cet interface
fig : interface obtenue apres creation de workspace
methode GET sans données
fig : postman avec get sans parametre
Modifions le montant do president Wade
fig : parametre avec put dans la ligne de requete
Ajotons le president Toumani Touré par la methode POST avec [Link]
fig : [Link] avec les données dans le body sous forme de cle/valeur
fig : visualisation des resultats dans le navigateur
Passons à la methode DELETE
fig : uttlisatation de [Link] avec des parametres dans la ligne de requete
fig : Toumani Toure est bien supprimé
11.2 Parcours de tableau de tableau avec foreach et balise HTML <table>
Copiions le programme [Link] en [Link] pour améliorer la présentation des résultats à
l’aide de tableau
On utilise la constante MYSQLI_ASSOC dans la fonction mysqli_fetch_all() pour avoir un
tableau associatif indexé par des noms des champs de notre table mysql client
root@boris-VirtualBox:/var/www/html/tp1# cp [Link] [Link]
oot@boris-VirtualBox:/var/www/html/tp1# nano [Link]
/ connexion à la base sgbs
$conn=mysqli_connect("localhost","bouki","passer","sgbs");
// preparation de la requete
$sql="select * from client";
// execution de la requte
$result=mysqli_query($conn,$sql);
// recuperation de tous les resultats dans un tableau
$tab=mysqli_fetch_all($result,MYSQLI_ASSOC);
// affichage brut des resultats
$chaine="<table
border='1px'><tr><td>ID</td>td>Prenom</td>td>Nom</td>td>Code</td>td>NumCompte</
td>td>Solde</td></tr>";
foreach ($tab as $ligne) {
$chaine=$chaine."<tr><td>$ligne[id]</td>td>$ligne[prenom]</td>td>$ligne[nom]</
td>td>$ligne[code]</td>td>$ligne[numcompte]</td>td>$ligne[montant]</td></tr>";
}
$chaine=$chaine."</table>";
echo $chaine;
On executte comme suit :
fig : Amélioration des résultats via un tableau.
Comment parcourt -on un tableau en php ?
Comment concatène t-on de chaines de caracteres en php ?
12- Gestion de format de données Json et entetes
12.1 installation du paquet php-curl et utilisation des fonctions fournies json_encode() et
json_decode()
On verifie si le paquet php-json est installé
root@boris-VirtualBox:/var/www/html/tp1# apt policy php-curl
php-curl:
Installé : (aucun)
Candidat : 2:7.4+75
Table de version :
2:7.4+75 500
500 [Link] focal/main amd64 Packages
500 [Link] focal/main i386 Packages
le paquet php-json est il installé
Installons php-json
root@boris-VirtualBox:/var/www/html/tp1# apt install php-json
root@boris-VirtualBox:/var/www/html/tp1# cp [Link] [Link]
root@boris-VirtualBox:/var/www/html/tp1# nano [Link]
Joutons l’entete au debut du fichier
header("Content-Type:application/json");
contenu de [Link]
<?php
header("Content-Type:application/json");
// connexion à la base sgbs
$conn=mysqli_connect("localhost","bouki","passer","sgbs");
// preparation de la requete
$sql="select * from client";
// execution de la requte
$result=mysqli_query($conn,$sql);
// recuperation de tous les resultats dans un tableau
$tab=mysqli_fetch_all($result,MYSQLI_ASSOC);
// affichage brut des resultats
print_r($tab);
?>
et executons à travers un navigateur
fig
Expliquez ce qui s’est passé ?
On modifie le fichier comme suit :
<?php
header("Content-Type:application/json");
// connexion à la base sgbs
$conn=mysqli_connect("localhost","bouki","passer","sgbs");
// preparation de la requete
$sql="select * from client";
// execution de la requte
$result=mysqli_query($conn,$sql);
// recuperation de tous les resultats dans un tableau
$tab=mysqli_fetch_all($result,MYSQLI_ASSOC);
// affichage brut des resultats
$tab2json= json_encode($tab);
print_r($tab2json);
?>
Executons dans un navigateur
fig : json
Interpretez le resultat
13- Prise en charge de curl dans un programme php grace au paquet php-curl
Verifions si php-curl est installé, sinon on l’installe
root@boris-VirtualBox:/var/www/html/tp1# apt policy php-curl
php-curl:
Installé : (aucun)
Candidat : 2:7.4+75
Table de version :
2:7.4+75 500
500 [Link] focal/main amd64 Packages
500 [Link] focal/main i386 Packages
root@boris-VirtualBox:/var/www/html/tp1# apt install php-curl
Editons le fichier [Link] comme suit :
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '[Link]
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
$response = curl_exec($ch);
print_r($response);
curl_close($ch);
Apres execution, on obtient :
fig :
fig :
root@boris-VirtualBox:/var/www/html/tp1# service apache2 restart
On rexecute et on obtient :
fig :
Interpretez ce qui s’est passé
Ameliorons notre backend pour qu’il montre les resultats sous forme de tableau
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '[Link]
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
$response = curl_exec($ch);
curl_close($ch);
$tab=json_decode($response,true) ;
$chaine="<table
border='1px'><tr><td>ID</td><td>Prenom</td><td>Nom</td><td>Code</td><td>NumCompte</
td><td>Solde</td></tr>";
foreach ($tab as $ligne) {
$chaine=$chaine."<tr><td>$ligne[id]</td><td>$ligne[prenom]</td><td>$ligne[nom]</
td><td>$ligne[code]</td><td>$ligne[numcompte]</td><td>$ligne[montant]</td></tr>";
}
$chaine=$chaine."</table>";
echo $chaine;
?>
Apres executions, on obtient :
fig : creation d’un programme frontend qui exploite une applcation backend
Interpretez les resultats
Et remarquez les 3 phases d’utilisation curl dans php
1- initialisation de connexion avec curl_init()
2- pricisons des options
3- execution des requetes http
4- deconnexion avec curl_close()
Quels sont les principaux paramètres des fonctions fournies par le paquet php-curl ?
Utilisation de php-curl avec POST
Observez le code suivant et le commentez
en remplissant le trableau suivant :
Option curl Signification
CURLOPT_RETURNTRANSFER
CURLOPT_POST
CURLOPT_POSTFIELDS,
CURLOPT_HTTPHEADER
[Link]
<?php
$prenom=$_REQUEST['prenom'];
$nom=$_REQUEST['nom'];
$code=$_REQUEST['code'];
$numcompte=$_REQUEST['numcompte'];
$montant=$_REQUEST['montant'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '[Link]
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "prenom=".$prenom."&nom=".$nom."&code=".
$code."&numcompte=".$numcompte."&montant=".$montant);
$headers = array();
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
print_r($result);
?>
Comment dire à une entité HTTP dans un programme php qu’on lui envoie le contenu d ’un
formulaire ?
Ecrivons un formulaire de saisie de données à envoyer à [Link]
[Link]
<html>
<head>
</head>
<body>
<form method="GET" action="[Link]">
Prenom: <input type="text" name="prenom"><br>
Nom: <input type="text" name="nom"><br>
Code: <input type="text" name="code"><br>
Numcompte: <input type="text" name="numcompte"><br>
Montant: <input type="text" name="montant"><br>
<input type="submit" value="Valider">
</form>
</body>
</html>
Apres execution
fig :
fig : insertion du president Touadera
Ecrivons le programme [Link]
<?php
$prenom=$_REQUEST['prenom'];
$nom=$_REQUEST['nom'];
$montant=$_REQUEST['montant'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '[Link]
$nom."&montant=".$montant);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
?>
Quelle est la signification de la ligne
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
[Link]
<html>
<head>
</head>
<body>
<form method="GET" action="[Link]">
Prenom: <input type="text" name="prenom"><br>
Nom: <input type="text" name="nom"><br>
Montant: <input type="text" name="montant"><br>
<input type="submit" value="Valider">
</form>
</body>
</html>
Apres execution , on a :
fig : mise à jour
Code de [Link]
<?php
$prenom=$_REQUEST['prenom'];
$nom=$_REQUEST['nom'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "[Link]
$nom);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
echo $result
?>
executons le programme [Link] en utilisant curl
root@boris-VirtualBox:/var/www/html/tp1# curl -X DELETE "[Link]
prenom=Archange&nom=Touadera"
fig : suppression du compte du presi
14- Urilisation de l’API REST d’asterisk
14-1 installation d’asterisk
root@boris-VirtualBox:~# apt install asterisk
14-2 Activation de serveut sous asterisk
oot@boris-VirtualBox:~# nano /etc/asterisk/[Link]
14,2 activation d’ARI
root@boris-VirtualBox:~# nano /etc/asterisk/[Link]
[general]
enabled = yes ; When set to no, ARI support is disabled.
pretty = yes ; When set to yes, responses from ARI are
; ; formatted to be human readable.
;allowed_origins = ; Comma separated list of allowed origins, for
; ; Cross-Origin Resource Sharing. May be set to * to
; ; allow all origins.
;auth_realm = ; Realm to use for authentication. Defaults to Asterisk
; ; REST Interface.
; Default write timeout to set on websockets. This value may need to be adjust>
; for connections where Asterisk must write a substantial amount of data and t>
; receiving clients are slow to process the received information. Value is in
; milliseconds; default is 100 ms.
;websocket_write_timeout = 100
; Display certain channel variables every time a channel-oriented
; event is emitted:
;
[asterisk]
type = user ; Specifies user configuration
read_only = no ; When set to yes, user is only authorized for
password =asterisk ;
root@boris-VirtualBox:~# service asterisk restart
root@boris-VirtualBox:~# netstat -anp| grep -w 8088
tcp 0 0 [Link]:8088 [Link]:* LISTEN 6220/asterisk
root@boris-VirtualBox:~#
--------------------------------------------------------------------------------------------------------------
dimanche 18/12/2022
root@boris-VirtualBox:/home/boris# nano /etc/asterisk/[Link]
root@boris-VirtualBox:/home/boris# asterisk -rx "module reload res_ari.so"
Module 'res_ari.so' reloaded successfully.
root@boris-VirtualBox:/home/boris# asterisk -rx "reload http"
Module 'http' reloaded successfully.
root@boris-VirtualBox:/home/boris#
fig
[Link]
tlsenable=yes
tlsbindaddr=yourAsteriskServerIP:8089
tlscertfile = /var/lib/asterisk/[Link]
tlsprivatekey = /var/lib/asterisk/[Link]
asterisk -rx "reload http"
asterisk -rx "http show status"
To check:
asterisk -rx "http show status"
asterisk -rx "ari show status"
root@boris-VirtualBox:/home/boris/docasterisk# asterisk -rx "reload http"
Module 'http' reloaded successfully.
root@boris-VirtualBox:/home/boris/docasterisk# asterisk -rx "http show status"
HTTP Server Status:
Prefix:
Server: Asterisk
Server Enabled and Bound to [Link]:8088
Enabled URI's:
/httpstatus => Asterisk HTTP General Status
/phoneprov/... => Asterisk HTTP Phone Provisioning Tool
/static/... => Asterisk HTTP Static Delivery
/ari/... => Asterisk RESTful API
/ws => Asterisk HTTP WebSocket
Enabled Redirects:
None.
root@boris-VirtualBox:/home/boris/docasterisk# netstat -a
root@boris-VirtualBox:/home/boris/docasterisk# ls -l /var/lib/asterisk/[Link]
-rw------- 1 root root 1704 des 18 11:34 /var/lib/asterisk/[Link]
root@boris-VirtualBox:/home/boris/docasterisk#
root@boris-VirtualBox:/home/boris/docasterisk# chmod a+r /var/lib/asterisk/[Link]
root@boris-VirtualBox:/home/boris/docasterisk# ls -l /var/lib/asterisk/[Link]
-rw-r--r-- 1 root root 1704 des 18 11:34 /var/lib/asterisk/[Link]
root@boris-VirtualBox:/home/boris/docasterisk#
root@boris-VirtualBox:~# apt -y install build-essential libncurses5-dev libxml2-dev libsqlite3-dev
libssl-dev libsrtp2-dev uuid-dev libjansson-dev
[Link]
[toto]
username=toto
type=friend
host=dynamic
secret=passer
context=rtn
[bouki]
username=bouki
type=friend
host=dynamic
secret=passer
context=rtn
[babadi]
username=babadi
type=friend
host=dynamic
secret=passer
context=rtn
[Link]
[rtn]
exten =>1001,1,Dial(SIP/toto,40,tr)
exten =>1002,1,Dial(SIP/bouki,40,tr)
exten =>1003,1,Dial(SIP/babadi,40,tr)
Mise en relation du canal SIP/toto avec l’utilisateur dont le numero est 1002 dans le context rtn
root@boris-VirtualBox:/home/boris#curl -v -u asterisk:asterisk -X POST
"[Link]
=rtn"
ARI Resources:
Resources below must be controlled by ARI in order to be reachable:
1. asterisk - global variables,server info, configuration files etc.
2. endpoints - list endpoint, send message etc.
3. channels - list, create, redirect, answer, mute, ring, hold, moh, get variable, dial etc.
4. bridges - construct sharing media among channels: list, create, add channel, remove channel
etc.
5. recordings - list, copy, stop, pause etc.
6. sounds - list, get details etc.
7. playbacks - playback control
8. deviceStates - list, change etc.
9. mailboxes - list, destroy etc.
[Link] - WbSocket events: generate etc.
[Link] - list, subscribe etc.
[Link]
[general]
enabled = yes ; When set to no, ARI support is disabled.
pretty = no ; When set to yes, responses from ARI are
; ; formatted to be human readable.
;allowed_origins = ; Comma separated list of allowed origins, for
; ; Cross-Origin Resource Sharing. May be set to * to
; ; allow all origins.
;auth_realm = ; Realm to use for authentication. Defaults to Asterisk
; ; REST Interface.
; Default write timeout to set on websockets. This value may need to be adjusted
; for connections where Asterisk must write a substantial amount of data and the
; receiving clients are slow to process the received information. Value is in
; milliseconds; default is 100 ms.
;websocket_write_timeout = 100
; Display certain channel variables every time a channel-oriented
; event is emitted:
;allowed_origins=[Link]
allowed_origins=[Link]
;channelvars = var1,var2,var3
[asterisk]
type = user ; Specifies user configuration
read_only = no ; When set to yes, user is only authorized for
; ; read-only requests.
;
password =asterisk ; Crypted or plaintext password (see password_format).
;
; password_format may be set to plain (the default) or crypt. When set to crypt,
; crypt(3) is used to validate the password. A crypted password can be generated
; using mkpasswd -m sha-512.
;
; When set to plain, the password is in plaintext.
;
;password_format = plain
Exercice :
mettre en relation 2 utilisateurs en relation à travers l’interface swagger-ui d’asterisk
fig
[Link]
[rtn]
exten =>1001,1,Dial(SIP/toto,40,tr)
exten =>1002,1,Dial(SIP/bouki,40,tr)
exten =>1003,1,Dial(SIP/babadi,40,tr)
[lisoro]
exten =>matenesi,1,Answer()
exten =>matenesi,2,Playback(en/toto)
Test
fig
Testons une annonce avec un numero fixe
fig
contenu de //var/www/html/tp1/[Link]
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
'[Link]
tn&priority=1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, 'asterisk' . ':' . 'asterisk');
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
?>
Tester le programme dans un navigateur
[Link]
et constatez que l’annonce dans le fichier [Link] est annoncé à l’utilisateur dont le numéro est
1001
Copions [Link] en [Link] qui reçoit un numéro de téléphone tel par la méthode
REQUEST et lit l’annonce à l’utilisateur
root@boris-VirtualBox:/var/www/html/tp1# cp [Link] [Link]
Contenu de [Link]
<?php
$tel=$_REQUEST['tel'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
'[Link]
$tel.'&context=rtn&priority=1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, 'asterisk' . ':' . 'asterisk');
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close($ch);
?>
Tester le programme avec un client avancé tel curl
root@boris-VirtualBox:~# curl -X GET "[Link]
Que constatez-vous ?
Annonce multiple
root@boris-VirtualBox:/var/www/html/tp1# mysql -u root -p sgbs
mysql> create table telephone(tel varchar(20));
Query OK, 0 rows affected (0,04 sec)
mysql> insert into telephone(tel) values("1001"),("1002");
Query OK, 2 rows affected (0,06 sec)
Records: 2 Duplicates: 0 Warnings: 0
[Link]
<?php
$conn=mysqli_connect("localhost","bouki","passer","sgbs");
$sql="select * from telephone";
$result=mysqli_query($conn,$sql);
$tab=mysqli_fetch_all($result);
foreach($tab as $line)
{
$tel=$line[0];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '[Link]
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
}
?>
testez
# curl -X GET "[Link]
Que constatez-vous ?
Conclusion partielle
Nous avons pu :
1- activer un serveur http sur asterisk à travers le fichier [Link]
2- activer l’API ARI d’asterisk à travers le fichier [Link]
3- apprendre à utiliser l’interface web swagger d’asterisk pour exploiter la documentation de ARI
et tester directement des ressources ARI
4- créer des interfaces web de consommation de l’API ARI
5- utiliser le canal Local d’asterisk pour faire faire écouter à un ensemble d’utilisateurs un
message préenregistré
Séquences à venir
Séquence (n+1) : Développement d’API et sécurisation d’API à l’aide du framework flask et du
jeton JWT
L’idée est de :
1- Savoir installer et utiliser un module python de connexion à une base mysql
2- Savoir faire CRUD en python
3- Savoir utiliser flask-restx pour développer une API REST
4- Savoir générer de la documentation swagger d’une API REST sous flask-restx
5- Savoir protéger une API REST en utilisant JWT
Séquence (n+2) : Étude et développement de plateforme WebRTC
objectifs :
1- Comprendre les concepts de base du standard WebRTC
2- Comprendre l’architecture generale d’une application WebRTC
3- Étudier et déploiement de quelques plateformes du marché utilisant WebRTC( Microsoft Teams,
Google meeting, Bigblubutton,openfire,jitsi-meet)
4- Développement d’une application WebRTC à l’aide d’un framework