Le terme polymorphisme décrit la caractéristique d’un élément qui peut
prendre plusieurs formes, comme l’eau qui se trouve à l’état solide,
liquide ou gazeux. En informatique, le polymorphisme désigne un concept
de la théorie des types, selon lequel un nom d’objet peut désigner des
instances de classes différentes issues d’une même arborescence.
Cryptage des messages envoyés sur le réseau
Durant les derniers travaux pratiques, nous avons beaucoup travaillés
avec les websockets. Cette technologie est vraiment
intéressante puisqu'elle nous permet de communiquer entre deux
systèmes numériques sur l'intranet et même depuis Internet.
Jusqu'à présent, nous ne nous sommes pas préoccupés de savoir comment
transitaient les informations. Si nous prenions un analyseur de trame,
nous remarquerions que les messages envoyés et reçus apparaîtraient en
clair. Pour certaines données, cela ne pose pas de réels problèmes,
mais pour d'autres, notamment pour la circulation de mots de passe, il
serait souhaitable que l'information soit systématiquement criptée.
C'est l'objet de de ce travaux pratique.
Communication cryptée entre la raspberry et un PC
Nous allons maintenant utiliser cette classe utilitaire de cryptage
afin de vérifier la communication entre deux systèmes numériques, avec
par exemple une rasberry pi d'un côté et un PC
classique de l'autre. Les échanges se feront au travers du
protocole websocket et la communication entre les deux
systèmes sera cryptée si nous envoyons des messages de type binaire,
et non criptée dans le cas de messages au format textuel.
Base de données SQLITE
Il est souvent très utiles de pouvoir sauvegarder des informations
pour les rendre persistantes. Nous pensons tout de suite aux bases de
données. Généralement, les données à sauvegarder ont très peu de
volume et il ne serait pas approprié d'utiliser pour cela un serveur
de bases de données surtout pour les systèmes embarqués comme les raspberry
pi. Heureusement, il existe pour cela le système SQLITE
qui permet d'enregistrer les données dans un fichier persistance
et de pouvoir ensuite les retrouver quand nous le désirons, tout ceci
en utilisant des requête SQL comme nous le ferions avec un
véritable serveur de bases de données. La base de données gérée par SQLITE
existe uniquement pour le projet dans laquelle elle a été créée. Grâce
à ce mécanisme, vous n'avez pas besoin de de sécurisation et les
transactions sont très rapides puisque tout se situe en local pas
de communication réseau et seule l'application qui la créée
l'utilise.
Client-serveur avec base de données et criptage
Pour ce projet, nous allons fusionner les deux études précédentes
afin de permettre la communication entre la rasberry pi
d'un côté et le PC classique de l'autre. Les échanges se
feront toujours au travers du protocole websocket et la
communication entre les deux systèmes sera criptée. Le service à
réaliser sera la gestion de comptes que nous avons élaborés dans le
projet précédent et qui sera enregistrée dans une base de données SQLITE
dans la rasberry pi. Enfin, toutes les informations qui
transiterons au travers du réseau concernant la création, la
modification et la suppression de compte seront envoyées au format JSON.
Système de notification de rendez-vous enregistrés
Nous allons élaborrer un projet qui nous permet d'enregistrer des
rendez-vous afin que par la suite nous ayons des alertes sur chacun
des postes de travail. Comme précédemment, le service de notification
se fait sur la rapberry pi. Chaque poste interroge
ensuite à distance le service afin que chacun puisse recevoir les
notifications sur sa propre barre des tâches. Les clients pourront
utiliser le service aussi bien en réseau local que depuis Intenet proposition
automatique de la bonne adresse IP.
Lancement automatique d'un service au démarrage de la Raspberry PI
Dans ce tout petit chapitre, nous allons voir comment faire en sorte
que les services que nous venons de mettre en oeuvre soient
automatiquement opérationnels dès que nous branchons la Raspberry
PI, sans que nous ayons besoin systématiquement de nous
connecter et de les activer manuellement. Il faut savoir que tout
système d'exploitation lancent un certain nombre de services au
démarrage de la machine afin qu'elle soit pleinement opérationnelle.
C'est grâce à ce mécanisme que nous allons pouvoir intégrer nos
propres services.
Fichier de configuration et accès à une date spécifique d'un
rendez-vous
Reprenons le projet sur la gestion des rendez-vous. Nous allons
rajouter quelques spécificités supplémentaires qui vont nous permettre
d'avoir une meilleure ergonomie. Actuellement, si vous avez beaucoup
de rendez-vous enregistrés, vous êtes obligé de parcourrir la liste un
par un. Nous pourrons dès lors accéder à un rendez-vous en spécifiant
une date. Par ailleurs, dorénavant, nous pourront demander une mise à
jour de la liste complète des rendez-vous déjà enregistrés au
préalable chaque ajout ou modification nous redonnait
automatiquement la liste des rendez-vous mais en se plaçant
systématiquement sur le premier enregistrement. Enfin, notre
application cliente doit pouvoir fonctionner aussi bien en réseau
local que depuis Internet. Les adresses ip de ces deux situations
pouvant changer, il est souhaitable de prévoir un fichier de
configuration qui précisera ces adresses ainsi que le numéro de port
utilisé qui pourront facilement être modifiés par la suite.
Répertoire téléphonique avec base de données dans la Raspberry
Je vous propose un autre projet qui utilise les mêmes techniques que
nous venons déjà de développer. Il s'agit de construire une
application et un service qui permet d'enregistrer les numéros de
téléphone d'un ensemble de personnes, bref un répertoire téléphonique.
Au niveau de l'application cliente, l'ergonomie doit être
soigneusement pensée. Il serait judicieux, d'avoir dès le départ
l'ensemble des noms des personnes déjà enregistrées et de pouvoir
choisir celui qui nous intéresse à l'aide d'une ComboBox. Une
fois que le nom est sélectionné, une deuxième ComboBox nous
permet de choisir ensuite le prénom associé dans une liste réduite tous
les prénoms possibles correspondants au nom choisi. Une fois
que nous disposons de ces deux éléments, l'ensemble des numéros est
alors affiché avec en plus éventuellement, l'adresse mail et des
commentaires associés.
Messagerie instantanée
Pour clôturer l'ensemble de ces projets qui nous ont permis de
communiquer à l'aide du protocole websocket et de ce fait
d'échanger des informations par Internet, je vous propose de réaliser
une messagerie instantanée, ce que nous appelons couramment un chat.
Cette fois-ci, l'échange se fait au travers de plusieurs clients
connectés, ce qui est une nouveauté par rapport au projets précédents.