From 749adfa1526bdd61b202c95f68a797d51011dc53 Mon Sep 17 00:00:00 2001 From: antoine Date: Thu, 3 Apr 2025 11:22:01 +0200 Subject: [PATCH] fix(routes): fix connexion with sbom --- app/__init__.py | 6 +++-- app/routes/routes1.py | 56 ++++++++++++++++++++++++++++++++++++------- requirements.txt | 2 +- 3 files changed, 53 insertions(+), 11 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index 3258753..7d6a140 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -3,6 +3,7 @@ from app.extensions import jwt, db import os from dotenv import load_dotenv +from flask_cors import CORS __version__ = "0.1.1" # géré automatiquement par la CI @@ -10,8 +11,9 @@ load_dotenv(".env") def create_app(): app = Flask(__name__) - - + + CORS(app, resources={r"/*": {"origins": "*"}}) + app.config.from_object(config[os.getenv("FLASK_ENV") or "development"])#en mode dev par défaut si rien de spécifié diff --git a/app/routes/routes1.py b/app/routes/routes1.py index 9dc0b74..c2f1ac5 100644 --- a/app/routes/routes1.py +++ b/app/routes/routes1.py @@ -1,3 +1,6 @@ +import os +import json +from urllib import response from flask import Blueprint, current_app, json, request, jsonify from flask_jwt_extended import create_access_token from app.extensions import db @@ -6,8 +9,9 @@ import re from app.services.auth import verify_token from app.extensions import db -from depsec_db.models import Project, User +from depsec_db.models import Project, User, SBOM import requests +from requests.structures import CaseInsensitiveDict #from depsec_models.models import * #import des modèles depuis le package @@ -41,6 +45,17 @@ def add_dico(dico): dico['id'] = max_id + 1 + if Project.query.filter((Project.titre == dico["titre"]) | (Project.path == dico["path"])).first(): + return jsonify({"error": f"Un projet avec ce titre ou ce chemin existe deja !"}), 400 + + # Génère un chemin spécifique en fonction du titre du projet + safe_title =dico['titre'].replace(" ", "_").lower() # Ex: "Mon Projet" → "mon_projet" + project_path = os.path.join(dico['path'], safe_title) + + # Vérifie si le dossier existe, sinon le créer + if not os.path.exists(project_path): + os.makedirs(project_path) + new_project = Project( id = dico['id'], auteur_id=dico["auteur_id"], @@ -49,11 +64,28 @@ def add_dico(dico): path=dico["path"] ) + project_for_sbom = { + "id": dico['id'], + "auteur_id": dico['auteur_id'], + "titre": dico['titre'], + "status": dico['status'], + "path": dico['path'] + } + + db.session.add(new_project) db.session.commit() + + project = Project.query.filter_by(id=dico['id']).first() ### requête avec la table SBOM pour créer un SBOM ### - requests.post("http://jeanclaudenunes.online:5010/", json=new_project.to_dict()) + data = json.dumps({"id":project.id}) + headers = CaseInsensitiveDict() + headers["Content-Type"] = "application/json" + sbom_response = requests.post("http://depsec.jeanclaudenunes.online:5010/",headers=headers, data=data, timeout=5) + sbom_response.raise_for_status() + + return jsonify({"message": f"Projet {new_project.titre} ajoute avec succes"}), 200 def del_dico(id): @@ -61,12 +93,20 @@ def del_dico(id): if not project: return jsonify({"error": f"Projet avec l'ID {id} non trouve"}), 404 + - db.session.delete(project) - db.session.commit() - - return jsonify({"message": f"Projet avec l'ID {id} supprime avec succes"}), 200 - + try: + db.session.delete(project) + db.session.commit() + + return jsonify({"message": f"Projet avec l'ID {id} supprime avec succes"}), 200 + except: + db.session.rollback() + sbom_response = requests.delete(f"http://depsec.jeanclaudenunes.online:5010/sbom/{id}", timeout=5) + sbom_response.raise_for_status() + db.session.delete(project) + db.session.commit() + return jsonify({"message": f"Projet avec l'ID {id} supprime avec succes"}), 200 # ------------------------------------------------------------------------------------------------------------ # @@ -81,7 +121,7 @@ def get_projects(): def get_project_by_id(project_id): project = Project.query.get(project_id) if not project: - return jsonify({'error': 'Projet non trouvé'}), 404 + return jsonify({'error': 'Projet non trouve !'}), 404 return jsonify(project.to_dict()), 200 @projets_bp.route('/', methods=['POST']) diff --git a/requirements.txt b/requirements.txt index 3aa2921..6f9af01 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,5 +10,5 @@ python-semantic-release setuptools flask_migrate psycopg2-binary -fastapi +flask-cors git+https://github.com/DEPSEC-Project/DB-Management.git@main \ No newline at end of file