diff --git a/README.md b/README.md index 7fac8c7..6e2a443 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,144 @@ -# SAE-5 +# :mortar_board: NetWorkers -B3S1 Project +> SAé5-1 -## Front Readme +## :memo: • Description -[Cliquez ici pour accéder au README du Front](./front-js/README.md) +NetWorkers est un projet de 3ème année de l'IUT de Vélizy. +Il consiste en une application pour apprendre des notions sur les réseaux informatiques. + +## :rocket: • Pour commencer + +### :package: • Pré-requis + +- [Python2.5 (et plus)](https://www.python.org/downloads/release/python-250/) +- [Docker](https://docs.docker.com/get-docker/) + +### :inbox_tray: • Installation et configuration + +**Si Git n'est pas istaller :** + +```bash +sudo apt-get update +sudo apt-get install git +``` + +**Si Docker et Python ne sont pas installer :** + +```bash +sudo apt-get update +sudo apt-get install python + +# Add Docker's official GPG key: +sudo apt-get update +sudo apt-get install ca-certificates curl +sudo install -m 0755 -d /etc/apt/keyrings +sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc +sudo chmod a+r /etc/apt/keyrings/docker.asc + +# Add the repository to Apt sources: +echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt-get update + +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin +``` + +:warning: Il faut installer Git avant Docker afin d'éviter des problèmes lors du clone. + +1. Cloner la dernière version du projet ([releases](https://www.github.com/444chak/SAE-5/releases)). + +```bash +REPO_URL="https://github.com/444chak/SAE-5.git" +LAST_TAG=$(git ls-remote --tags --sort="v:refname" $REPO_URL | tail -n 1 | awk '{print $2}' | sed 's/refs\/tags\///') +git clone --branch $LAST_TAG --single-branch $REPO_URL +cd SAE-5 +``` + +> *Ce script vous permet de récupérer le code du dernier tag présent sur le projet.* + +2. Lancer le script pour mettre en place les variables d'environnement. + +```bash +python set_env.py +``` + +3. Ajouter son utilisateur au groupe Docker. + +```bash +sudo usermod -aG docker +``` + +### :rocket: • Démarrage + +```bash +docker compose up +``` + +## :clipboard: • Documentation technique + +- [#API](api/README.md) +- [#Client](front-js/README.md) + +## :gear: • Technologies utilisées + +- :snake: [Python](https://www.python.org/) +- :satellite: [FastAPI](https://fastapi.tiangolo.com/) +- :lipstick: [Next.js](https://nextjs.org/) +- :whale: [Docker](https://www.docker.com/) +- :floppy_disk: [MariaDB](https://mariadb.org/) + +## :wrench: • Maintenance + +Pour maintenir ce projet, il est nécessaire de prendre connaissance des différentes documentations techniques ([#Documentation technique](#clipboard--documentation-technique)). + +Pour voir l'état des différents composants de l'application, vous pouvez exécuter la commande suivante : + +```bash +docker compose ps +``` + +Si vous devez accéder aux différents composants de l'applications, vous pouvez exécutez les commandes suivantes : + +Accéder à l'API : + +```bash +docker exec -it networkers-api bash +``` + +Accéder au client : + +```bash +docker exec -it networkers-web bash +``` + +Accéder à la base de données : + +```bash +docker exec -it networkers-db bash + +mariadb -p +# Entrez le mot de passe que vous aviez défini dans le script set_env.py +``` + +Si vous avez besoin de redémarrer un composant de l'application, vous pouvez exécuter la commande suivante : + +```bash +docker compose restart +``` + +Si vous devez arrêter l'application, vous pouvez exécuter la commande suivante : + +```bash +docker compose down +``` + +## :busts_in_silhouette: • Auteurs + +- [**@Eliott BARKER**](https://wwww.github.com/Eliott-B) +- [**@Maxence OUVRARD**](https://github.com/MaxOuvrard) +- [**@Chakib OUALI**](https://github.com/444chak) +- [**@Ilan RUBIO**](https://github.com/IlanRubio) +- [**@Kylian GRAVIER**](https://github.com/SaAxok) diff --git a/api/README.md b/api/README.md index 8022364..5a1b191 100644 --- a/api/README.md +++ b/api/README.md @@ -1,12 +1,25 @@ # :satellite: NetWorkers API -**Table of contents** - +**Table des matières** + +- [Framework](#framework) +- [Mise en place (Si vous ne passez pas par le Docker)](#mise-en-place-si-vous-ne-passez-pas-par-le-docker) + - [Requirements](#requirements) + - [Installation](#installation) + - [Run](#run) +- [Codes](#codes) + - [Architecture](#architecture) + - [Environnement](#environnement) + - [Base de données](#base-de-données) + - [Création de la base de données sans Docker](#création-de-la-base-de-données-sans-docker) + - [Base de données avec Docker](#base-de-données-avec-docker) +- [Dépendances](#dépendances) - [Routes](#routes) - [Auth](#auth) - [Login](#login) - [Register](#register) - [Refresh token](#refresh-token) + - [Users](#users) - [Get all users](#get-all-users) - [Get user by username](#get-user-by-username) - [Get own user](#get-own-user) @@ -23,15 +36,90 @@ - [Ping](#ping) - [Get interfaces](#get-interfaces) +## Framework + +- [FastAPI](https://fastapi.tiangolo.com/) +- [SQLAlchemy](https://www.sqlalchemy.org/) + +## Mise en place (Si vous ne passez pas par le Docker) + +### Requirements + +- [Python](https://www.python.org/) +- [PDM](https://pdm.fming.dev/) + +### Installation + +```bash +pdm install +``` + +### Run + +```bash +pdm run api +``` + +## Codes + +### Architecture + +Dans le dossier `src`, on retrouve les dossiers et fichiers suivants : + +- `app.py` : Fichier d'entrée de l'application +- `utils` : Dossier contenant les utilitaires de l'application dont le processus des modules +- `models` : Dossier contenant les modèles de données de l'application ainsi que la connexion à la base de données avec SQLAlchemy +- `routes` : Dossier contenant les routes de l'application +- `middlewares` : Dossier contenant les middlewares de l'application +- `dependencies` : Dossier contenant les dépendances des routes de l'application. C'est similaire aux middlewares mais eux sont utilisés pour les routes + +### Environnement + +L'application a besoin que les variables d'environnement suivantes soient définies : + +- JWT_SECRET_KEY +- JWT_REFRESH_KEY +- COMMON_KEY +- MYSQL_DATABASE +- MYSQL_USER +- MYSQL_PASSWORD + +> Ces variables d'environnement sont déjà définies si l'application est lancée avec le Docker + +### Base de données + +#### Création de la base de données sans Docker + +La base de données utilisée est MariaDB. Si vous lancez MariaDB sans Docker, il faut que vous exécutiez les commandes suivantes : + +```bash +mariadb -u root -p < database/init.sql # Depuis la racine du projet +``` + +```sql +CREATE USER 'xxx'@'%' IDENTIFIED BY 'xxx'; +GRANT ALL PRIVILEGES ON networkers.* TO 'xxx'@'%' WITH GRANT OPTION; +FLUSH PRIVILEGES; +``` + +#### Base de données avec Docker + +Si vous gardez le lancement avec Docker, la base de données est déjà configurée. +Vous aurez un dossier `database/data` qui contient les données de la base de données. + +## Dépendances + +L'applications dépend de la base de données pour fonctionner. Il faut donc lancer la base de données avant de lancer l'application API. + ## Routes ### Auth #### Login -| Method | URL | Description | Need token | Roles | -| ------ | ----------- | ----------- | ---------- | ----- | -| POST | /auth/login | Login | False | None | +| Méthode | URL | Description | Token requis | Roles | +| ------- | ----------- | ----------- | ------------ | ----- | +| POST | /auth/login | Login | False | None | **Request** @@ -44,9 +132,9 @@ #### Register -| Method | URL | Description | Need token | Roles | -| ------ | -------------- | ----------- | ---------- | ----- | -| POST | /auth/register | Register | False | None | +| Méthode | URL | Description | Token requis | Roles | +| ------- | -------------- | ----------- | ------------ | ----- | +| POST | /auth/register | Register | False | None | **Request** @@ -59,9 +147,9 @@ #### Refresh token -| Method | URL | Description | Need token | Roles | -| ------ | ------------- | ------------- | ---------- | ----- | -| POST | /auth/refresh | Refresh token | False | None | +| Méthode | URL | Description | Token requis | Roles | +| ------- | ------------- | ------------- | ------------ | ----- | +| POST | /auth/refresh | Refresh token | False | None | **Request** @@ -71,29 +159,31 @@ } ``` +### Users + #### Get all users -| Method | URL | Description | Need token | Roles | -| ------ | ------ | ------------- | ---------- | ----- | -| GET | /users | Get all users | True | Admin | +| Méthode | URL | Description | Token requis | Roles | +| ------- | ------ | ------------- | ------------ | ----- | +| GET | /users | Get all users | True | Admin | #### Get user by username -| Method | URL | Description | Need token | Roles | -| ------ | ----------------- | -------------------- | ---------- | ----- | -| GET | /users/{username} | Get user by username | True | Admin | +| Méthode | URL | Description | Token requis | Roles | +| ------- | ----------------- | -------------------- | ------------ | ----- | +| GET | /users/{username} | Get user by username | True | Admin | #### Get own user -| Method | URL | Description | Need token | Roles | -| ------ | --------- | ------------ | ---------- | ----- | -| GET | /users/me | Get own user | True | User | +| Méthode | URL | Description | Token requis | Roles | +| ------- | --------- | ------------ | ------------ | ----- | +| GET | /users/me | Get own user | True | User | #### Update user -| Method | URL | Description | Need token | Roles | -| ------ | ----------------- | ----------- | ---------- | ----- | -| PATCH | /users/{username} | Update user | True | Admin | +| Méthode | URL | Description | Token requis | Roles | +| ------- | ----------------- | ----------- | ------------ | ----- | +| PATCH | /users/{username} | Update user | True | Admin | **Request** @@ -106,9 +196,9 @@ #### Update own user -| Method | URL | Description | Need token | Roles | -| ------ | --------- | --------------- | ---------- | ----- | -| PATCH | /users/me | Update own user | True | User | +| Méthode | URL | Description | Token requis | Roles | +| ------- | --------- | --------------- | ------------ | ----- | +| PATCH | /users/me | Update own user | True | User | **Request** @@ -120,14 +210,15 @@ #### Update user password -| Method | URL | Description | Need token | Roles | -| ------ | ------------------ | -------------------- | ---------- | ----- | -| PATCH | /users/me/password | Update user password | True | User | +| Méthode | URL | Description | Token requis | Roles | +| ------- | ------------------ | -------------------- | ------------ | ----- | +| PATCH | /users/me/password | Update user password | True | User | **Request** ```json { + "old_password": "string", "password": "string", "confirm_password": "string" } @@ -135,46 +226,46 @@ #### Delete user -| Method | URL | Description | Need token | Roles | -| ------ | ----------------- | ----------- | ---------- | ----- | -| DELETE | /users/{username} | Delete user | True | Admin | +| Méthode | URL | Description | Token requis | Roles | +| ------- | ----------------- | ----------- | ------------ | ----- | +| DELETE | /users/{username} | Delete user | True | Admin | ### IPv6 #### Simplify IPv6 -| Method | URL | Description | Need token | Roles | -| ------ | --------------------- | ------------- | ---------- | ----- | -| GET | /ipv6/simplify/{ipv6} | Simplify IPv6 | True | User | +| Méthode | URL | Description | Token requis | Roles | +| ------- | --------------------- | ------------- | ------------ | ----- | +| GET | /ipv6/simplify/{ipv6} | Simplify IPv6 | True | User | #### Extend IPv6 -| Method | URL | Description | Need token | Roles | -| ------ | ------------------- | ----------- | ---------- | ----- | -| GET | /ipv6/extend/{ipv6} | Extend IPv6 | True | User | +| Méthode | URL | Description | Token requis | Roles | +| ------- | ------------------- | ----------- | ------------ | ----- | +| GET | /ipv6/extend/{ipv6} | Extend IPv6 | True | User | ### Scapy #### Create ethernet frame -| Method | URL | Description | Need token | Roles | -| ------ | ---------------------------------------------------- | --------------------- | ---------- | ----- | -| GET | /scapy/ethernet-frame/{dst_mac}/{src_mac}/{eth_type} | Create ethernet frame | True | User | +| Méthode | URL | Description | Token requis | Roles | +| ------- | ---------------------------------------------------- | --------------------- | ------------ | ----- | +| GET | /scapy/ethernet-frame/{dst_mac}/{src_mac}/{eth_type} | Create ethernet frame | True | User | #### TCP test -| Method | URL | Description | Need token | Roles | -| ------ | ----------------------------------------- | ----------- | ---------- | ----- | -| GET | /scapy/tcp-test/{target_ip}/{target_port} | TCP test | True | User | +| Méthode | URL | Description | Token requis | Roles | +| ------- | ----------------------------------------- | ----------- | ------------ | ----- | +| GET | /scapy/tcp-test/{target_ip}/{target_port} | TCP test | True | User | #### Ping -| Method | URL | Description | Need token | Roles | -| ------ | ---------------- | ----------- | ---------- | ----- | -| GET | /scapy/ping/{ip} | Ping | True | User | +| Méthode | URL | Description | Token requis | Roles | +| ------- | ---------------- | ----------- | ------------ | ----- | +| GET | /scapy/ping/{ip} | Ping | True | User | #### Get interfaces -| Method | URL | Description | Need token | Roles | -| ------ | ----------------- | -------------------------- | ---------- | ----- | -| GET | /scapy/interfaces | Get interfaces of the host | True | User | +| Méthode | URL | Description | Token requis | Roles | +| ------- | ----------------- | -------------------------- | ------------ | ----- | +| GET | /scapy/interfaces | Get interfaces of the host | True | User | diff --git a/front-js/README.md b/front-js/README.md index e215bc4..0419d75 100644 --- a/front-js/README.md +++ b/front-js/README.md @@ -1,36 +1,61 @@ -This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). +# :lipstick: NetWorkers Web -## Getting Started +**Table des matières** -First, run the development server: +- [Framework](#framework) +- [Mise en place (Si vous ne passez pas par le Docker)](#mise-en-place-si-vous-ne-passez-pas-par-le-docker) + - [Requirements](#requirements) + - [Installation](#installation) + - [Run](#run) +- [Codes](#codes) + - [Architecture](#architecture) + - [Environnement](#environnement) +- [Dépendances](#dépendances) + +## Framework + +- [Next.js](https://nextjs.org/) +- [Tailwind CSS](https://tailwindcss.com/) + +## Mise en place (Si vous ne passez pas par le Docker) + +### Requirements + +- [Node.js](https://nodejs.org/) + +### Installation + +```bash +npm install +``` + +### Run ```bash npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev ``` -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. +## Codes + +Le code est fait en TypeScript (`.ts` et `.tsx`). -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. +### Architecture -This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. +Dans le dossier `src/` : -## Learn More +- `components/`: composants utilisés dans les différentes pages +- `app/`: pages de l'application + - `api/`: serveur API (next/server) qui permet de récupérer la common key permettant de communiquer avec le serveur API +- `axiosConfig.ts`: configuration des requêtes Axios -To learn more about Next.js, take a look at the following resources: +### Environnement -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. +L'application a besoin que la variable d'environnement suivante soit définie : -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! +- COMMON_KEY -## Deploy on Vercel +> La variable d'environnement est déjà définie si l'application est lancée avec le Docker -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. +## Dépendances -Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. +L'applications dépend de l'API pour fonctionner. Il faut donc lancer l'API avant de lancer l'application front-end. diff --git a/front-js/src/app/api/config/route.ts b/front-js/src/app/api/config/route.ts index a920648..bdd53d5 100644 --- a/front-js/src/app/api/config/route.ts +++ b/front-js/src/app/api/config/route.ts @@ -1,11 +1,3 @@ -// import { NextApiRequest, NextApiResponse } from 'next'; - -// export default function handler(req: NextApiRequest, res: NextApiResponse) { -// res.status(200).json({ -// commonKey: process.env.COMMON_KEY -// }); -// } - import { NextResponse } from 'next/server'; export async function GET() {