From 5151c8782e2d145513e2919ad7bef0b4f3ae28f7 Mon Sep 17 00:00:00 2001 From: bstocker Date: Thu, 1 Feb 2024 10:32:25 +0100 Subject: [PATCH 01/24] Update __init__.py --- __init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/__init__.py b/__init__.py index e082f9f4..99726328 100644 --- a/__init__.py +++ b/__init__.py @@ -1,6 +1,7 @@ -from flask import Flask +from flask import Flask, render_template_string, render_template, jsonify from flask import render_template from flask import json +from urllib.request import urlopen import sqlite3 app = Flask(__name__) From b3b3fe55d487d5a0d2e537c6ada1e40659477b0b Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 13:08:44 +0100 Subject: [PATCH 02/24] Create CICD.yml --- .github/workflows /CICD.yml | 56 +++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .github/workflows /CICD.yml diff --git a/.github/workflows /CICD.yml b/.github/workflows /CICD.yml new file mode 100644 index 00000000..94cd3104 --- /dev/null +++ b/.github/workflows /CICD.yml @@ -0,0 +1,56 @@ +name: Industrialisation continue sur le serveur Alwaysdata +on: push +jobs: + Connexion: + runs-on: ubuntu-latest + steps: + - name: Connexion SSH avec le serveur + uses: appleboy/ssh-action@master + with: + host: "ssh-${{ secrets.USERNAME }}.alwaysdata.net" + username: ${{ secrets.USERNAME }} + password: ${{ secrets.PASSWORD }} + script: | + cd $HOME/www/ + Copy: + needs: Connexion + runs-on: ubuntu-latest + steps: + - name: Connexion SSH avec le serveur + uses: appleboy/ssh-action@master + with: + host: "ssh-${{ secrets.USERNAME }}.alwaysdata.net" + username: ${{ secrets.USERNAME }} + password: ${{ secrets.PASSWORD }} + script: | + last_directory=$(basename ${{ runner.workspace }}) + cd $HOME/www/ + git clone https://github.com/${{ github.repository }}.git + # Vérifier si le répertoire de destination existe + if [ "$(ls -A ./flask)" ]; then + rsync -r ./$last_directory/ ./flask + rm -rf ./$last_directory + else + echo "Le répertoire flask de destination sur votre serveur n'existe pas" + exit 1 + fi + Restart: + needs: Copy + runs-on: ubuntu-latest + steps: + - name: Restart Alwaysdata site + run: | + response_code=$(curl -s -o /dev/null -w "%{http_code}" -X POST --basic --user "${{ secrets.ALWAYSDATA_TOKEN }}:" https://api.alwaysdata.com/v1/site/${{ secrets.ALWAYSDATA_SITE_ID }}/restart/) + # Vérifier le code de réponse HTTP + if [ "$response_code" -eq 204 ]; then + echo "Relance de votre site réussi" + elif [ "$response_code" -eq 404 ]; then + echo "Vous n'avez pas renseigner correctement votre secret ALWAYSDATA_SITE_ID" + exit 1 # Quitter avec un code d'erreur + elif [ "$response_code" -eq 401 ]; then + echo "Vous n'avez pas renseigner correctement votre secret ALWAYSDATA_TOKEN" + exit 1 # Quitter avec un code d'erreur + else + echo "Échec du redémarrage avec le code de réponse : $response_code" + exit 1 # Quitter avec un code d'erreur + fi From 374277c397e5f9ce4dd2c4fc5cf270c0c2c1752c Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 13:13:06 +0100 Subject: [PATCH 03/24] Create README.md --- README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..345e6aef --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +Test From 86251d08adb5de6427e9c9f8cb79fbaa1950e8cc Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 13:14:11 +0100 Subject: [PATCH 04/24] Delete .github/workflows /CICD.yml --- .github/workflows /CICD.yml | 56 ------------------------------------- 1 file changed, 56 deletions(-) delete mode 100644 .github/workflows /CICD.yml diff --git a/.github/workflows /CICD.yml b/.github/workflows /CICD.yml deleted file mode 100644 index 94cd3104..00000000 --- a/.github/workflows /CICD.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: Industrialisation continue sur le serveur Alwaysdata -on: push -jobs: - Connexion: - runs-on: ubuntu-latest - steps: - - name: Connexion SSH avec le serveur - uses: appleboy/ssh-action@master - with: - host: "ssh-${{ secrets.USERNAME }}.alwaysdata.net" - username: ${{ secrets.USERNAME }} - password: ${{ secrets.PASSWORD }} - script: | - cd $HOME/www/ - Copy: - needs: Connexion - runs-on: ubuntu-latest - steps: - - name: Connexion SSH avec le serveur - uses: appleboy/ssh-action@master - with: - host: "ssh-${{ secrets.USERNAME }}.alwaysdata.net" - username: ${{ secrets.USERNAME }} - password: ${{ secrets.PASSWORD }} - script: | - last_directory=$(basename ${{ runner.workspace }}) - cd $HOME/www/ - git clone https://github.com/${{ github.repository }}.git - # Vérifier si le répertoire de destination existe - if [ "$(ls -A ./flask)" ]; then - rsync -r ./$last_directory/ ./flask - rm -rf ./$last_directory - else - echo "Le répertoire flask de destination sur votre serveur n'existe pas" - exit 1 - fi - Restart: - needs: Copy - runs-on: ubuntu-latest - steps: - - name: Restart Alwaysdata site - run: | - response_code=$(curl -s -o /dev/null -w "%{http_code}" -X POST --basic --user "${{ secrets.ALWAYSDATA_TOKEN }}:" https://api.alwaysdata.com/v1/site/${{ secrets.ALWAYSDATA_SITE_ID }}/restart/) - # Vérifier le code de réponse HTTP - if [ "$response_code" -eq 204 ]; then - echo "Relance de votre site réussi" - elif [ "$response_code" -eq 404 ]; then - echo "Vous n'avez pas renseigner correctement votre secret ALWAYSDATA_SITE_ID" - exit 1 # Quitter avec un code d'erreur - elif [ "$response_code" -eq 401 ]; then - echo "Vous n'avez pas renseigner correctement votre secret ALWAYSDATA_TOKEN" - exit 1 # Quitter avec un code d'erreur - else - echo "Échec du redémarrage avec le code de réponse : $response_code" - exit 1 # Quitter avec un code d'erreur - fi From 767737c7b17084ab6e0dfbefd6556a7beb685ce0 Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 13:14:30 +0100 Subject: [PATCH 05/24] Create CICD.yml --- .github/workflows/CICD.yml | 56 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .github/workflows/CICD.yml diff --git a/.github/workflows/CICD.yml b/.github/workflows/CICD.yml new file mode 100644 index 00000000..94cd3104 --- /dev/null +++ b/.github/workflows/CICD.yml @@ -0,0 +1,56 @@ +name: Industrialisation continue sur le serveur Alwaysdata +on: push +jobs: + Connexion: + runs-on: ubuntu-latest + steps: + - name: Connexion SSH avec le serveur + uses: appleboy/ssh-action@master + with: + host: "ssh-${{ secrets.USERNAME }}.alwaysdata.net" + username: ${{ secrets.USERNAME }} + password: ${{ secrets.PASSWORD }} + script: | + cd $HOME/www/ + Copy: + needs: Connexion + runs-on: ubuntu-latest + steps: + - name: Connexion SSH avec le serveur + uses: appleboy/ssh-action@master + with: + host: "ssh-${{ secrets.USERNAME }}.alwaysdata.net" + username: ${{ secrets.USERNAME }} + password: ${{ secrets.PASSWORD }} + script: | + last_directory=$(basename ${{ runner.workspace }}) + cd $HOME/www/ + git clone https://github.com/${{ github.repository }}.git + # Vérifier si le répertoire de destination existe + if [ "$(ls -A ./flask)" ]; then + rsync -r ./$last_directory/ ./flask + rm -rf ./$last_directory + else + echo "Le répertoire flask de destination sur votre serveur n'existe pas" + exit 1 + fi + Restart: + needs: Copy + runs-on: ubuntu-latest + steps: + - name: Restart Alwaysdata site + run: | + response_code=$(curl -s -o /dev/null -w "%{http_code}" -X POST --basic --user "${{ secrets.ALWAYSDATA_TOKEN }}:" https://api.alwaysdata.com/v1/site/${{ secrets.ALWAYSDATA_SITE_ID }}/restart/) + # Vérifier le code de réponse HTTP + if [ "$response_code" -eq 204 ]; then + echo "Relance de votre site réussi" + elif [ "$response_code" -eq 404 ]; then + echo "Vous n'avez pas renseigner correctement votre secret ALWAYSDATA_SITE_ID" + exit 1 # Quitter avec un code d'erreur + elif [ "$response_code" -eq 401 ]; then + echo "Vous n'avez pas renseigner correctement votre secret ALWAYSDATA_TOKEN" + exit 1 # Quitter avec un code d'erreur + else + echo "Échec du redémarrage avec le code de réponse : $response_code" + exit 1 # Quitter avec un code d'erreur + fi From e94d2058617d204eac9cb9436ea819f5c65d5c5d Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 13:21:27 +0100 Subject: [PATCH 06/24] Update __init__.py --- __init__.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/__init__.py b/__init__.py index 99726328..cbe5e4fe 100644 --- a/__init__.py +++ b/__init__.py @@ -1,3 +1,4 @@ +from cryptography.fernet import Fernet from flask import Flask, render_template_string, render_template, jsonify from flask import render_template from flask import json @@ -9,6 +10,10 @@ @app.route('/') def hello_world(): return render_template('hello.html') - + +@app.route('/encrypt/') +def encryptage(): + return valeur + if __name__ == "__main__": app.run(debug=True) From 62a1432e5c1b3dd3c20474c7167b68a3d7c9ea27 Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 14:01:01 +0100 Subject: [PATCH 07/24] Update __init__.py --- __init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__init__.py b/__init__.py index cbe5e4fe..64898941 100644 --- a/__init__.py +++ b/__init__.py @@ -12,7 +12,7 @@ def hello_world(): return render_template('hello.html') @app.route('/encrypt/') -def encryptage(): +def encryptage(valeur): return valeur if __name__ == "__main__": From b0d2fcc4ce6b93d33bb6f61610ef1b5d35930949 Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 14:05:52 +0100 Subject: [PATCH 08/24] Update __init__.py --- __init__.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/__init__.py b/__init__.py index 64898941..4cefe72a 100644 --- a/__init__.py +++ b/__init__.py @@ -13,7 +13,14 @@ def hello_world(): @app.route('/encrypt/') def encryptage(valeur): - return valeur + key = Fernet.generate_key() + f = Fernet(key) + token = f.encrypt(valeur) + return token + + + + if __name__ == "__main__": app.run(debug=True) From 28a4e518c58f0033fbcfb3324a4f2acf3603e72f Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 14:08:01 +0100 Subject: [PATCH 09/24] Update __init__.py --- __init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__init__.py b/__init__.py index 4cefe72a..acf951c5 100644 --- a/__init__.py +++ b/__init__.py @@ -15,7 +15,7 @@ def hello_world(): def encryptage(valeur): key = Fernet.generate_key() f = Fernet(key) - token = f.encrypt(valeur) + token = f.encrypt(b'valeur') return token From e4da5419412f45508b7d9be9a6a4bc1e6f482fe6 Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 14:11:44 +0100 Subject: [PATCH 10/24] Update __init__.py --- __init__.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/__init__.py b/__init__.py index acf951c5..215815c8 100644 --- a/__init__.py +++ b/__init__.py @@ -16,10 +16,7 @@ def encryptage(valeur): key = Fernet.generate_key() f = Fernet(key) token = f.encrypt(b'valeur') - return token - - - + return f.decrypt(token) if __name__ == "__main__": From a8535a16bf9edd63b9f19b9539f41ea89bc8b1ad Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 14:14:46 +0100 Subject: [PATCH 11/24] Update __init__.py --- __init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__init__.py b/__init__.py index 215815c8..8a6d5289 100644 --- a/__init__.py +++ b/__init__.py @@ -15,7 +15,7 @@ def hello_world(): def encryptage(valeur): key = Fernet.generate_key() f = Fernet(key) - token = f.encrypt(b'valeur') + token = f.encrypt('valeur') return f.decrypt(token) From c4758263cdc13188c21f36cca508a61d87d2808c Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 14:24:58 +0100 Subject: [PATCH 12/24] Update __init__.py --- __init__.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/__init__.py b/__init__.py index 8a6d5289..6d6bfd5c 100644 --- a/__init__.py +++ b/__init__.py @@ -11,13 +11,14 @@ def hello_world(): return render_template('hello.html') +key = Fernet.generate_key() +f = Fernet(key) + @app.route('/encrypt/') def encryptage(valeur): - key = Fernet.generate_key() - f = Fernet(key) - token = f.encrypt('valeur') - return f.decrypt(token) - - + valeur_bytes = valeur.encode() # Conversion str -> bytes + token = f.encrypt(valeur_bytes) # Encrypt la valeur + return f"Valeur encryptée : {token.decode()}" # Retourne le token en str + if __name__ == "__main__": app.run(debug=True) From 43a14b76f3948530892db8ca0b851cc2d13aad9b Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 14:56:20 +0100 Subject: [PATCH 13/24] Update README.md --- README.md | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 134 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 345e6aef..f0f37fc4 100644 --- a/README.md +++ b/README.md @@ -1 +1,134 @@ -Test +------------------------------------------------------------------------------------------------------ +PROJET API CrytoPython +------------------------------------------------------------------------------------------------------ +Quelles sont les notions qui vont être abordées au cours de cet atelier ? +Cet atelier a pour objectif de vous apprendre à créer un système de cryptographie grace à Python et sa bibliothèque Cryptopython. Vous allez ensuite exploter cette solution via la construction d'API sous le Framework Flask.vVous allez donc créer des API mais également découvrir les Actions et les Secrets GitHUB pour au final mettre en service et exploiter une solution Web. +Large programme mais tout à fait accessible et ne nécessitant pas de base technique particulière. Juste de l'observation et de la rigueur dans votre travail. + +------------------------------------------------------------------------------------------------------- +Séquence 1 : GitHUB +------------------------------------------------------------------------------------------------------- +Objectif : Création d'un Repository GitHUB pour travailler avec son projet +Difficulté : Très facile (~10 minutes) +------------------------------------------------------------------------------------------------------- +GitHUB est une plateforme en ligne utilisée pour stocker le code de son programme. +GitHUB est organisé en "Repository", c'est à dire en répertoire (contenant lui même des sous répertoires et des fichiers). Chaque Repository sera indépendant les un des autres. Un Repository doit être vu comme un projet unique (1 Repository = 1 Projet). GitHUB est une plateforme très utilisée par les informaticiens. + +**Procedure à suivre :** +1° - Créez vous un compte sur GitHub : https://github.com/ +Si besoin, une vidéo pour vous aider à créer votre propre compte GitHUB : [Créer un compte GitHUB](https://docs.github.com/fr/get-started/onboarding/getting-started-with-your-github-account) +A noter que **si vous possédez déjà un compte GitHUB, vous pouvez le conserver pour réaliser cet atelier**. Pas besion d'en créer un nouveau. +Remarque importante : **Lors de votre inscription, utilisez une adresse mail valide. GitHUB n'accepte pas les adresses mails temporaires** + +2° - Faites un Fork du Repository suivant : https://github.com/bstocker/EFREI_CrytoPython.git +Voici une vidéo d'accompagnement pour vous aider dans les "Forks" : [Forker ce projet](https://youtu.be/p33-7XQ29zQ) + +**Travail demandé :** Créé votre compte GitHUB, faites le fork de ce projet et **envoyer l'URL de votre Repository GitHUB par mail à votre enseignant**. + +Notion acquise lors de cette séquence : +Vous avez appris lors de cette séquence à créer des Repository pour stocker et travailler avec votre code informatique. Vous pourez par la suite travailler en groupe sur un projet. Vous avez également appris à faire des Forks. C'est à dire, faire des copies de projets déjà existant dans GitHUB que vous pourrez ensuite adapter à vos besoins. + +--------------------------------------------------- +Séquence 2 : Création d'un hébergement en ligne +--------------------------------------------------- +Objectif : Créer un hébergement sur Alawaysdata +Difficulté : Faible (~10 minutes) +--------------------------------------------------- + +Rendez-vous sur **https://www.alwaysdata.com/fr/** + +Remarque : **Attention à bien vous rappeler de vos Login/Password** lors de la création de votre compte site car vous en aurez besoin plus tard pour la création de vos Secrets GitHUB. + +Voici une vidéo d'accompagnement pour vous aider dans cette séquence de création d'un site sur Alwaysdata : [Vidéo Alwaysdata](https://youtu.be/6cuHjy8n968) + +**Procédure :** +1° - Créez votre compte Alwaysdata (gratuit jusqu'à 100Mo, aucune carte nécéssaire). +2° - Depuis la console d'administration (Le panel d'administration de Alwaysdata) : + . 2.1 - Cliquez sur "Sites" (Colonne de gauche) puis **supprimer votre site PHP** (via l'icone de la Poubelle). + . 2.2 - **Installer ensuite une application Flask** (Bouton **+ Installer une application**). + . . 2.2.1 Adresses = utilisez le sous-domaine qui vous appartient que vous trouverez dans l'information " Les sous-domaines suivants vous appartiennent et sont actuellement inutilisés : {Site}.alwaysdata.net + . . 2.2.2 Répertoire d'installation = **/www/flask** + . 2.2.3 N'oubliez pas d'Accepter les conditions. +3° - Autoriser les connexions SSH : + . 3.1 - Cliquez sur SSH (Accès distant). + . 3.2 - Modifier les paramètres de votre utilisateur. + . 3.3 - Définissez si besion un nouveau mot de passe. + . 3.4 - Cliquez sur **Activer la connexion par mot de passe**. + +**Travail demandé :** Mettre en ligne votre application Flask "Hello World !" et **copier l'URL de votre site et envoyez la par mail à votre enseignant**. + +Notions acquises lors de cette séquence : +Vous avez créer un hébergement (gratuit) et découvert également que vous pouvez installer bien d'autres applications (Django, Drupal, Jenkins, Magento, Symphony, etc...). Les perspectives sont nombreuses. + +--------------------------------------------------------------------------------------------- +Séquence 3 : Les Actions GitHUB (Industrialisation Continue) +--------------------------------------------------------------------------------------------- +Objectif : Automatiser la mise à jour de votre hébergement Alwaysdata +Difficulté : Moyenne (~15 minutes) +--------------------------------------------------------------------------------------------- +Dans le Repository GitHUB que vous venez de créer précédemment lors de la séquence 1, vous avez un fichier intitulé CICD.yml et qui est déposé dans le répertoire .github/workflows. Ce fichier a pour objectif d'automatiser le déploiement de votre code sur votre site Alwaysdata. Pour information, c'est ce que l'on appel des Actions GitHUB. Ce sont des scripts qui s'exécutent automatiquement lors de chaque Commit dans votre projet (C'est à dire à chaque modification de votre code). Ces scripts (appelés actions) sont au format yml qui est un format structuré proche de celui d'XML. + +Pour utiliser cette Action (CICD.yml), **vous avez besoin de créer des secrets dans GitHUB** afin de ne pas divulguer des informations sensibles aux internautes de passage dans votre Repository comme vos login et password par exemple. + +Pour ce projet Métriques, **vous avez 4 secrets à créer** dans votre Repository GitHUB : +**USERNAME** = Le login qui est utilisé pour la connexion SSH. +**PASSWORD** = Le mot de passe qui est utilisé pour la connexion SSH. +**ALWAYSDATA_TOKEN** = Le token est à créer depuis l'interface d'administration Alwaysdata. Cliquez sur votre profil en haut à droite, puis sur 'Profil' puis sur 'Gérer les tokens'. Laissez le champ "Adresses IP autorisées" vide. Dans le cas contraire vous limiteriez les connexions seulement à une adresse IP. Pour le champ Application* mettez "Metriques" par exemple. +**ALWAYSDATA_SITE_ID** = Vous trouverez l'ID de votre site depuis l'interface d'administration Alwaysdata dans les paramètres de votre site (dans le titre #XXXXX) XXXXX étant l'ID de votre site. Ne prenez pas le # mais juste les chiffres. + +Voici une vidéo pour vous expliquer le processus de création de vos secrets dans GitHUB : [Création des secrets](https://youtu.be/pi80zRdrJyQ) +Vous pouvez à présent **lancer une action pour mettre en ligne votre solution**. + +Notions acquises de cette séquence : +Vous avez vu dans cette séquence comment créer des secrets GiHUB afin de mettre en place de l'industrialisation continue. +L'utilité des scripts d'actions (C'est à dire des scripts exécutés lors des Commits) est très importante mais sortes malheureusement du cadre de cet atelier faute de temps. Toutefois, je vous invites à découvrir cet outil via les différentes sources du Web (Google, ChatGPT, etc..). + +--------------------------------------------------- +Séquence 4 : Installer le module Cryptopython +--------------------------------------------------- +Objectif : Installer le module Cryptopython SQLite sur votre serveur +Difficulté : Faible (~15 minutes) +--------------------------------------------------- +1° - Connectez vous en SSH à votre serveur Alwaysdata via l'adresse suivante :**https://ssh-{compte}.alwaysdata.net**. Remarque importante, {compte} est à remplacer par votre compte Alwaysdata. C'est à dire le compte que vous avez utilisé pour renseigner votre secret GitHUB USERNAME. +2° - Une fois connecté, depuis de la console SSH, executez les commandes suivantes : 1° - **pip install cryptography** puis 2° - **cp -r ~/.local/lib/python3.12/site-packages/* ~/www/flask/env/lib/python3.12/site-packages/** +Bravo, votre serveur est à présent opérationnel. + +LES ROUTES (API) +------------------------------------------- +Votre solution est à présent opérationnelle. Vous pouvez testez les routes (API) comme suit : + +https://{Votre_URL}**/** +Pointe sur le fichier helloWorld d'accueil + +https://{Votre_URL}**/encrypt/{Valeur à encrypter}** +Vous retourne votre valeur encryptée + +--------------------------------------------------- +Séquence 5 : Exercices +--------------------------------------------------- +Objectif : Travailler votre code +Difficulté : Moyenne (~60 minutes) +--------------------------------------------------- +**Exercice 1 : Création d'une API de décryptage** +Créer une nouvelle route dans votre application afin de pouvoir décrypter la valeur valeur saisie par l'utilisateur. +Cette fonctionnalité sera accéssible via la route suivante : **/decrypt/** + +**Exercice 2 : Clés personnelles** +Dans les exercices précédents, la clé de cryptage (et décryptage) était unique pour tous les internaute. +Dans cet exercice N°2, l'internaute renseignera lui-même sa clé de cryptage et de décryptage. + +--------------------------------------------------- +Séquence 6 : Le projet de bibliothèque +--------------------------------------------------- +Objectif : Créer une application de biliothèque +Difficulté : Moyenne (~180 minutes) +--------------------------------------------------- +Votre projet consiste à present à concevoir et développer une application de gestion de bibliothèque moderne qui simplifie le processus de prêt et de retour de livres. Les fonctionnalités attendues dans le cadre de ce projet sont les suivantes : +• L’enregistrement et la suppression de livres. +• La recherche de livres disponibles. +• L'emprunt possible d'un livre par un utilisateur. +• La gestion des utilisateurs. +• La gestion des stocks. +Votre travail est de modifier votre code afin de répondre aux besoins définis ci-dessus. +L'application exploitera des API pour interagir avec la base de données et un contrôle d'accès Utilisateur/Administrateur doit être mis en place. +L’application pourra être enrichie avec des fonctionnalités supplémentaires telles que des recommandations de livres, des notifications pour les retours en retard, ou encore des rapports statistiques sur l'utilisation des livres pour améliorer l'expérience utilisateur et la gestion de la bibliothèque. From 4b46fa61b299c8bafe7cedff8b1160fce6d17144 Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 14:57:36 +0100 Subject: [PATCH 14/24] Update README.md --- README.md | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index f0f37fc4..da0def86 100644 --- a/README.md +++ b/README.md @@ -117,18 +117,12 @@ Cette fonctionnalité sera accéssible via la route suivante : **/decrypt/** Dans les exercices précédents, la clé de cryptage (et décryptage) était unique pour tous les internaute. Dans cet exercice N°2, l'internaute renseignera lui-même sa clé de cryptage et de décryptage. +-------------------------------------------------------------------- +Troubleshooting : --------------------------------------------------- -Séquence 6 : Le projet de bibliothèque +Objectif : Visualiser ses logs et découvrir ses erreurs --------------------------------------------------- -Objectif : Créer une application de biliothèque -Difficulté : Moyenne (~180 minutes) ---------------------------------------------------- -Votre projet consiste à present à concevoir et développer une application de gestion de bibliothèque moderne qui simplifie le processus de prêt et de retour de livres. Les fonctionnalités attendues dans le cadre de ce projet sont les suivantes : -• L’enregistrement et la suppression de livres. -• La recherche de livres disponibles. -• L'emprunt possible d'un livre par un utilisateur. -• La gestion des utilisateurs. -• La gestion des stocks. -Votre travail est de modifier votre code afin de répondre aux besoins définis ci-dessus. -L'application exploitera des API pour interagir avec la base de données et un contrôle d'accès Utilisateur/Administrateur doit être mis en place. -L’application pourra être enrichie avec des fonctionnalités supplémentaires telles que des recommandations de livres, des notifications pour les retours en retard, ou encore des rapports statistiques sur l'utilisation des livres pour améliorer l'expérience utilisateur et la gestion de la bibliothèque. +Lors de vos développements, vous serez peut-être confronté à des erreurs systèmes car vous avez faits des erreurs de syntaxes dans votre code, faits de mauvaises déclarations de fonctions, appelez des modules inexistants, mal renseigner vos secrets, etc… +Les causes d'erreurs sont quasi illimitées. **Vous devez donc vous tourner vers les logs de votre système pour comprendre d'où vient le problème** : +Voici une vidéo pour accéder aux logs de vos Actions GitHUB : [Vidéo Log GitHUB](https://youtu.be/rhGrDLSFH7Y) +Voici une vidéo pour vous expliquer comment accéder au logs de votre serveur Alwaysdata : [Vidéo Log Alwaysdata](https://youtu.be/URWMWqVMS2U) From 65263bdc4ba5d081157ce627a423c567d740595e Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 14:59:26 +0100 Subject: [PATCH 15/24] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index da0def86..6a314f48 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,9 @@ Objectif : Installer le module Cryptopython SQLite sur votre serveur Difficulté : Faible (~15 minutes) --------------------------------------------------- 1° - Connectez vous en SSH à votre serveur Alwaysdata via l'adresse suivante :**https://ssh-{compte}.alwaysdata.net**. Remarque importante, {compte} est à remplacer par votre compte Alwaysdata. C'est à dire le compte que vous avez utilisé pour renseigner votre secret GitHUB USERNAME. -2° - Une fois connecté, depuis de la console SSH, executez les commandes suivantes : 1° - **pip install cryptography** puis 2° - **cp -r ~/.local/lib/python3.12/site-packages/* ~/www/flask/env/lib/python3.12/site-packages/** +2° - Une fois connecté, depuis de la console SSH, executez les commandes suivantes : +Commande 1 : **pip install cryptography** +Commande 2 : **cp -r ~/.local/lib/python3.12/site-packages/*** **~/www/flask/env/lib/python3.12/site-packages/** Bravo, votre serveur est à présent opérationnel. LES ROUTES (API) From 410a4ceb7f8b16e0160d22931c42b24b4abf5b0c Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 15:00:55 +0100 Subject: [PATCH 16/24] Update hello.html --- templates/hello.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/hello.html b/templates/hello.html index 18bfd367..7f782ad8 100644 --- a/templates/hello.html +++ b/templates/hello.html @@ -1,3 +1,3 @@ Flask Server -

Hello from Flask Server !

+

Votre serveur Flask fonctionne correctement !

From 0f3b8ecc6bd904ec6771b2bd19bc9bf1efe2f5d6 Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 15:09:05 +0100 Subject: [PATCH 17/24] Update README.md --- README.md | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 6a314f48..0a47188e 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,8 @@ ------------------------------------------------------------------------------------------------------ -PROJET API CrytoPython +PROJET API CryptoPython ------------------------------------------------------------------------------------------------------ -Quelles sont les notions qui vont être abordées au cours de cet atelier ? -Cet atelier a pour objectif de vous apprendre à créer un système de cryptographie grace à Python et sa bibliothèque Cryptopython. Vous allez ensuite exploter cette solution via la construction d'API sous le Framework Flask.vVous allez donc créer des API mais également découvrir les Actions et les Secrets GitHUB pour au final mettre en service et exploiter une solution Web. -Large programme mais tout à fait accessible et ne nécessitant pas de base technique particulière. Juste de l'observation et de la rigueur dans votre travail. +Quelles sont les notions qui vont être abordées au cours de cet atelier CryptoPython ? +Cet atelier a pour objectif de vous apprendre à créer un système de cryptographie d'information grace à Python et sa bibliothèque Cryptography. Vous allez ensuite explotier cette solution via la construction d'API sous le Framework Flask. Vous allez donc créer des API mais également découvrir les Actions et les Secrets GitHUB pour au final mettre en service et exploiter une solution Web de Crypto. Large programme mais tout à fait accessible et ne nécessitant pas de base technique particulière. Juste de l'observation et de la rigueur dans votre travail. ------------------------------------------------------------------------------------------------------- Séquence 1 : GitHUB @@ -20,12 +19,12 @@ Si besoin, une vidéo pour vous aider à créer votre propre compte GitHUB : [Cr A noter que **si vous possédez déjà un compte GitHUB, vous pouvez le conserver pour réaliser cet atelier**. Pas besion d'en créer un nouveau. Remarque importante : **Lors de votre inscription, utilisez une adresse mail valide. GitHUB n'accepte pas les adresses mails temporaires** -2° - Faites un Fork du Repository suivant : https://github.com/bstocker/EFREI_CrytoPython.git +2° - Faites un Fork du Repository suivant : https://github.com/bstocker/EFREI_CryptoPython.git Voici une vidéo d'accompagnement pour vous aider dans les "Forks" : [Forker ce projet](https://youtu.be/p33-7XQ29zQ) -**Travail demandé :** Créé votre compte GitHUB, faites le fork de ce projet et **envoyer l'URL de votre Repository GitHUB par mail à votre enseignant**. +**Travail demandé :** Créé votre compte GitHUB, faites le fork de ce projet et **envoyez l'URL de votre Repository GitHUB par mail à votre enseignant**. -Notion acquise lors de cette séquence : +Notions acquises lors de cette séquence : Vous avez appris lors de cette séquence à créer des Repository pour stocker et travailler avec votre code informatique. Vous pourez par la suite travailler en groupe sur un projet. Vous avez également appris à faire des Forks. C'est à dire, faire des copies de projets déjà existant dans GitHUB que vous pourrez ensuite adapter à vos besoins. --------------------------------------------------- @@ -93,17 +92,17 @@ Difficulté : Faible (~15 minutes) 2° - Une fois connecté, depuis de la console SSH, executez les commandes suivantes : Commande 1 : **pip install cryptography** Commande 2 : **cp -r ~/.local/lib/python3.12/site-packages/*** **~/www/flask/env/lib/python3.12/site-packages/** -Bravo, votre serveur est à présent opérationnel. +Bravo, votre serveur Flask de cryptographie est à présent opérationnel. LES ROUTES (API) ------------------------------------------- -Votre solution est à présent opérationnelle. Vous pouvez testez les routes (API) comme suit : +Votre solution est à présent opérationnelle. Vous pouvez testez vos routes (API) comme suit : https://{Votre_URL}**/** -Pointe sur le fichier helloWorld d'accueil +C'est route pointe sur le fichier d'accuei! helloWorld.html https://{Votre_URL}**/encrypt/{Valeur à encrypter}** -Vous retourne votre valeur encryptée +Vous retourne votre valeur saisie dans l'URL encryptée --------------------------------------------------- Séquence 5 : Exercices @@ -112,11 +111,11 @@ Objectif : Travailler votre code Difficulté : Moyenne (~60 minutes) --------------------------------------------------- **Exercice 1 : Création d'une API de décryptage** -Créer une nouvelle route dans votre application afin de pouvoir décrypter la valeur valeur saisie par l'utilisateur. +Créer une nouvelle route dans votre application afin de pouvoir décrypter la valeur saisie par l'utilisateur. Cette fonctionnalité sera accéssible via la route suivante : **/decrypt/** **Exercice 2 : Clés personnelles** -Dans les exercices précédents, la clé de cryptage (et décryptage) était unique pour tous les internaute. +Dans les exercices précédents, la clé de cryptage (et décryptage) était unique pour tous les internautes. Dans cet exercice N°2, l'internaute renseignera lui-même sa clé de cryptage et de décryptage. -------------------------------------------------------------------- From 97fee6d5c6437d44d59730cc02a5d5e5ec53db71 Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 15:17:03 +0100 Subject: [PATCH 18/24] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0a47188e..b9081aaf 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ PROJET API CryptoPython ------------------------------------------------------------------------------------------------------ Quelles sont les notions qui vont être abordées au cours de cet atelier CryptoPython ? -Cet atelier a pour objectif de vous apprendre à créer un système de cryptographie d'information grace à Python et sa bibliothèque Cryptography. Vous allez ensuite explotier cette solution via la construction d'API sous le Framework Flask. Vous allez donc créer des API mais également découvrir les Actions et les Secrets GitHUB pour au final mettre en service et exploiter une solution Web de Crypto. Large programme mais tout à fait accessible et ne nécessitant pas de base technique particulière. Juste de l'observation et de la rigueur dans votre travail. +Cet atelier a pour objectif de vous apprendre à créer un système de cryptographie d'information grace à Python et sa bibliothèque Cryptography. Vous allez ensuite exploiter cette solution via la construction d'API sous le Framework Flask. Vous allez donc créer des API (des routes) mais également découvrir les Actions et les Secrets GitHUB pour au final mettre en service et exploiter une solution Web de Cryptographie. Large programme mais tout à fait accessible et ne nécessitant pas de base technique particulière. Juste de l'observation et de la rigueur dans votre travail. ------------------------------------------------------------------------------------------------------- Séquence 1 : GitHUB From 9b663531cd6bb9281cff915f351c35eb2b4b9f3b Mon Sep 17 00:00:00 2001 From: bstocker Date: Mon, 25 Nov 2024 15:20:59 +0100 Subject: [PATCH 19/24] Update hello.html --- templates/hello.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/hello.html b/templates/hello.html index 7f782ad8..5a332b7f 100644 --- a/templates/hello.html +++ b/templates/hello.html @@ -1,3 +1,3 @@ -Flask Server -

Votre serveur Flask fonctionne correctement !

+CryptoPython +

Bienvue dans votre atelier CryptoPython !

From acedcf424de61cd281522ba27cd997d82b4c8ceb Mon Sep 17 00:00:00 2001 From: bstocker Date: Wed, 27 Nov 2024 06:57:14 +0100 Subject: [PATCH 20/24] Create bandit.yml --- .github/workflows/bandit.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .github/workflows/bandit.yml diff --git a/.github/workflows/bandit.yml b/.github/workflows/bandit.yml new file mode 100644 index 00000000..da5634b7 --- /dev/null +++ b/.github/workflows/bandit.yml @@ -0,0 +1,29 @@ +name: Security check - Bandit + +on: push + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + os: [ ubuntu-latest, macos-latest ] + python-version: [ '2.7.17', '3.6.10' ] + name: Python ${{ matrix.python-version }} ${{ matrix.os }} + + steps: + - uses: actions/checkout@v2 + + - name: Security check - Bandit + uses: ./ + with: + python_version: ${{ matrix.python-version }} + project_path: . + ignore_failure: true + + - name: Security check report artifacts + uses: actions/upload-artifact@v1 + # if: failure() + with: + name: Security report + path: output/security_report.txt From feeadf3221ddf44b83f0d41fa89775d48dc28d33 Mon Sep 17 00:00:00 2001 From: bstocker Date: Wed, 27 Nov 2024 07:01:04 +0100 Subject: [PATCH 21/24] Update bandit.yml --- .github/workflows/bandit.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/bandit.yml b/.github/workflows/bandit.yml index da5634b7..6c77c2cb 100644 --- a/.github/workflows/bandit.yml +++ b/.github/workflows/bandit.yml @@ -8,22 +8,20 @@ jobs: strategy: matrix: os: [ ubuntu-latest, macos-latest ] - python-version: [ '2.7.17', '3.6.10' ] - name: Python ${{ matrix.python-version }} ${{ matrix.os }} + name: Python ${{ matrix.os }} steps: - uses: actions/checkout@v2 - name: Security check - Bandit - uses: ./ + uses: ioggstream/bandit-report-artifacts@v0.0.2 with: - python_version: ${{ matrix.python-version }} project_path: . ignore_failure: true + # This is optional - name: Security check report artifacts uses: actions/upload-artifact@v1 - # if: failure() with: name: Security report path: output/security_report.txt From 5d2bee8ad057c88de934a33fe68d3a3f1124907a Mon Sep 17 00:00:00 2001 From: bstocker Date: Wed, 27 Nov 2024 07:02:20 +0100 Subject: [PATCH 22/24] Delete .github/workflows/bandit.yml --- .github/workflows/bandit.yml | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 .github/workflows/bandit.yml diff --git a/.github/workflows/bandit.yml b/.github/workflows/bandit.yml deleted file mode 100644 index 6c77c2cb..00000000 --- a/.github/workflows/bandit.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Security check - Bandit - -on: push - -jobs: - build: - runs-on: ubuntu-latest - strategy: - matrix: - os: [ ubuntu-latest, macos-latest ] - name: Python ${{ matrix.os }} - - steps: - - uses: actions/checkout@v2 - - - name: Security check - Bandit - uses: ioggstream/bandit-report-artifacts@v0.0.2 - with: - project_path: . - ignore_failure: true - - # This is optional - - name: Security check report artifacts - uses: actions/upload-artifact@v1 - with: - name: Security report - path: output/security_report.txt From 90ce4175592190efa6bcad0fa8a4455fc2de6b63 Mon Sep 17 00:00:00 2001 From: bstocker Date: Fri, 29 Nov 2024 12:02:57 +0100 Subject: [PATCH 23/24] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b9081aaf..e2aecca6 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,7 @@ L'utilité des scripts d'actions (C'est à dire des scripts exécutés lors des --------------------------------------------------- Séquence 4 : Installer le module Cryptopython --------------------------------------------------- -Objectif : Installer le module Cryptopython SQLite sur votre serveur +Objectif : Installer le module Cryptography sur votre serveur Difficulté : Faible (~15 minutes) --------------------------------------------------- 1° - Connectez vous en SSH à votre serveur Alwaysdata via l'adresse suivante :**https://ssh-{compte}.alwaysdata.net**. Remarque importante, {compte} est à remplacer par votre compte Alwaysdata. C'est à dire le compte que vous avez utilisé pour renseigner votre secret GitHUB USERNAME. From 4a91dc964c9e44cd4f878b111f28f2ec1d103b82 Mon Sep 17 00:00:00 2001 From: yanishaddouch78 Date: Tue, 3 Dec 2024 09:23:10 +0100 Subject: [PATCH 24/24] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e2aecca6..6496cf15 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ ------------------------------------------------------------------------------------------------------ -PROJET API CryptoPython +PROJET API CryptoPython ------------------------------------------------------------------------------------------------------ Quelles sont les notions qui vont être abordées au cours de cet atelier CryptoPython ? Cet atelier a pour objectif de vous apprendre à créer un système de cryptographie d'information grace à Python et sa bibliothèque Cryptography. Vous allez ensuite exploiter cette solution via la construction d'API sous le Framework Flask. Vous allez donc créer des API (des routes) mais également découvrir les Actions et les Secrets GitHUB pour au final mettre en service et exploiter une solution Web de Cryptographie. Large programme mais tout à fait accessible et ne nécessitant pas de base technique particulière. Juste de l'observation et de la rigueur dans votre travail.