Synkronizator est une application serveur en C conçue pour gérer la disponibilité des propriétés pour la plateforme ALHaIZ Breizh.
Si gcc
n'est pas installé, installez le via :
sudo su
apt-get update
apt-get install build-essential
La librairie postgresql
DOIT être installé, consultez ce lien ou executer la commande suivante :
apt-get install libpq-dev
Après avoir installer les fichiers du Synkronizator (synkronizator.c et .env.template notamment), placez vous dans le dossier les contenants.
cd nom_repertoire
En partant du .env.template
créer un fichier .env
, en remplissant le fichier .env
avec vos informations.
Pour compiler le serveur , utilisez la commande suivante :
gcc -o synkronizator synkronizator.c -lpq
Si la librairie postgresql
est installé à un chemin spécifique utilisez les options -I
et -L
.
Exemple (MacOS) :
gcc -o synkronizator synkronizator.c -Wall -I /opt/homebrew/Cellar/postgresql@14/14.12/include/postgresql@14 -L /opt/homebrew/opt/libpq/lib -lpq
Ajouter les droits d'exécution au programme obtenu.
chmod +rx ./synkronizator
Pour lancer le serveur :
./synkronizator --port <numéro_de_port> [options]
- --port <numéro> : Définit le port d'écoute (obligatoire)
- --help : Affiche l'aide et quitte le programme
- --verbose : Active le mode verbeux (logs détaillés)
- --log : Spécifie le fichier de log (par défaut : application.log)
Le mode --verbose
ajoute les logs au fichier, celui-ci n'est pas remis à zéro lors de l'ouverture.
Explication du protocole utilisé par le Synkronizator. Celui-ci se déroule en différentes phases :
- Le serveur demande la clé API de l'utilisateur, il envoie
WAIT AUTH
au client. - Le client envoie une
clé API
. - Si la clé API est valide, le serveur répond
Hello, <pseudo>
- Le serveur demande une action de l'utilisateur, il envoie
WAIT ACTION
au client. - Le client envoie son action (commande).
- Si l'action existe, on tente de l'executer (voir plus bas).
- Si l'action est inexistante, le serveur envoie
ACTION NOT FOUND
.
LIST_ALL
Liste tous les logements accessibles par l'utilisateur.
Requête : LIST_ALL
Réponse : Liste des logements au format JSON
Exemple:
LIST_ALL
[{"id": 1, "titre": "Maison en bord de mer"}, {"id": 2, "titre": "Appartement centre-ville"}]
id
: Identifiant du logement.titre
: Titre du logement.
GET_PLANNING
Récupère le planning de disponibilité d'un logement.
Requête : GET_PLANNING <ID> <DEBUT> [FIN]
<ID>
: Identifiant du logement
<DEBUT>
: Date de début (format YYYY-MM-DD)
[FIN]
: Date de fin optionnelle (format YYYY-MM-DD)
Réponse : Planning au format JSON
Exemple:
GET_PLANNING 1 2024-07-01 2024-08-01
[{"debut": "2024-07-01", "fin": "2024-07-07"}, {"debut": "2024-07-15", "fin": "2024-07-22"}]
- Liste de tout les réservations d'un logement dans une période donnée.
debut
: Date de début de la réservation.fin
: Date de fin de la réservation.
SET_AVAILABILITY
Définit la disponibilité d'un logement.
Requête : SET_AVAILABILITY <ID> <0/1>
: Identifiant du logement <0/1> : 0 pour indisponible, 1 pour disponible
Réponse : Confirmation au format JSON avec le nouveau statut
Exemple:
SET_AVAILABILITY 1 0
[{"id": "1", "status": "f"}]
id
: Identifiant du logement modifié.status
: Nouveau status du logement (f
pour hors ligne ett
pour en ligne)
HELP
Affiche l'aide sur les commandes disponibles.
Requête : HELP
Réponse : Liste des commandes et leur description
QUIT
Termine la session et ferme la connexion.
Requête : QUIT
Réponse : Aucune (la connexion est fermée)
Le serveur gère les permissions des utilisateurs en fonction de la clé API utilisé. La configuration des clés ce fait via le site internet dans la page de consultation / modification d'un compte propriétaire.
Un client est mis à votre disposition pour tester le server.
Il n'est pas obligatoire de passer par lui, vous pouvez très bien utiliser telnet
(conseiller d'ailleurs).
telnet ip_server port_server
Pour compiler le client , utilisez la commande suivante :
gcc -o client client.c
Ajouter les droits d'exécution au programme obtenu.
chmod +rx ./client
Puis pour l'executer :
./client ip_server port_server
Celui-ci affichera les messages renvoyés par le serveur, et vous demandera également les prompts nécessaire.
Dans output.txt
ce trouve un exemple de ce qui est produit par le Synkronizator.
Ce fichier à était produit via une redirection :
telnet localhost 8080 > output.txt
Voici ce qui à était envoyé dans le serveur (dans l'ordre) :
ad733437557623332b2fdf178b30f4aa22e562cb642975c81e8eea676976d210
(clé API)list_all
get_planning 21 2020-01-01
set_availability 41 0
quit