Projet webservices pour l'Efrei
Find a file
2022-12-08 22:55:18 +01:00
doc Move architecture to doc folder 2022-12-01 15:11:01 +01:00
img Add png archi and explain fonctionnalities 2022-12-02 16:29:20 +01:00
src Remove sql_cache call in lib 2022-12-08 22:55:18 +01:00
.gitignore Rename .vt_token to .token 2022-12-08 16:56:47 +01:00
Cargo.lock Add cache.rs, with an example test.csv file 2022-12-08 22:42:39 +01:00
Cargo.toml Add cache.rs, with an example test.csv file 2022-12-08 22:42:39 +01:00
Makefile Add recipe for building documentation 2022-12-08 17:20:49 +01:00
README.md Add documentation comments 2022-12-08 17:37:10 +01:00
test.csv Add cache.rs, with an example test.csv file 2022-12-08 22:42:39 +01:00

Projet webservices

Composants

Un serveur fournit un service par le biais d'une API, qui est requêtée par deux clients.

Pour certaines fonctionnalités, le serveur doit faire des requêtes auprès d'une API publique. Il doit donc embarquer une fonctionnalité de client auprès de l'API publique.

Languages

Le serveur est écrit en Rust. Le composant "client" du serveur, qui requête l'API publique, est également écrit en Rust.

Deux clients sont écrits, un en Rust, l'autre en Python.

Token API

Un fichier .token contient le token nécessaire pour l'API publique. Pour des raisons légales évidentes, ce fichier n'est pas inclus dans git. C'est à l'utilisateur de créer un compte et d'ajouter son token dans ce fichier.

En l'occurence, l'API publique utilisée est celle de VirusTotal. Il faut s'y créer un compte, la clé est alors disponible après authentification.

Fonctionnalités

architecture

Client - Artemis (Python)

Client - Kratos (Rust)

Serveur - Hephaïstos

  • receive_request Serveur HTTP en listen pour recevoir les requêtes API REST en provenance d'un client (Artemis ou Kratos). Envoie l'URL reçu à parse_url.
  • parse_url Reçoit l'URL par receive_request et détermine la fonction à appeler.
  • get_data Reçoit les informations de la part de parse_given_url, et fait les choses suivantes :
    • Requête sql_cache pour trouver les données localement.
    • S'il les trouve, envoie les données à transform_to_json
    • S'il ne les trouve pas, requête api_client et attend le retour (booléen qui lui indique que l'écriture a fonctionné)
    • Une fois le retour positif, nouvelle requête sql_cache, puis idem, si donnée absente etc. Le tout peut être mis dans une boucle while not sql_content.
  • sql_cache Base de données SQL qui sert de cache local et qui est requêtée par get_data (lecture) et api_client (écriture).
  • api_client Effectue les requêtes d'API REST auprès de VirusTotal. Quand il reçoit des données valides, il les ajoute à sql_cache. Retourne un booléen pour indiquer le succès ou l'échec de l'insert.
  • transform_to_json Fonction qui reçoit des données en provenance de get_data pour en faire du JSON et les envoie à send_data.
  • send_data Envoie les données au client (Artemis ou Kratos).