Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
d43707a
feature/ajout_post_get
BabtouZER Mar 20, 2025
7ab1c21
fix/probleme_import_BDD
BabtouZER Mar 21, 2025
e848bad
fix/file_route
BabtouZER Mar 21, 2025
dc7049c
fix/json_file
BabtouZER Mar 21, 2025
e8b4b7a
fix/json_file
BabtouZER Mar 21, 2025
7a9bb67
fix/test3
BabtouZER Mar 30, 2025
3bf328f
fix/test765765
BabtouZER Mar 30, 2025
aeae0f0
fix/tests
BabtouZER Mar 30, 2025
5553953
fix/indentation
BabtouZER Mar 30, 2025
41ac12f
fix/test765765
BabtouZER Mar 30, 2025
3a6788c
fix/indentation
BabtouZER Mar 30, 2025
a67b8e6
Merge branch 'develop' of https://github.com/DEPSEC-Project/API_Proje…
BabtouZER Mar 30, 2025
5425553
fix/all_bugs
BabtouZER Mar 30, 2025
700a832
Merge branch 'develop' of https://github.com/DEPSEC-Project/API_Proje…
BabtouZER Mar 30, 2025
4350f55
feature/method_delete
BabtouZER Mar 31, 2025
63c9fc6
fix/delete_method
BabtouZER Mar 31, 2025
793d4e1
feature/db_connexion
BabtouZER Mar 31, 2025
e5f18ca
feat(connexion): connexion à la BDD
BabtouZER Mar 31, 2025
abbf606
Merge branch 'master' into feature/db_connexion
aguacero7 Mar 31, 2025
92f3bf2
fix(bdd): fix les pb de bdd test ok
BabtouZER Apr 1, 2025
f2061bb
fix(test): test app.py chiantosse
BabtouZER Apr 1, 2025
0513ec2
fix(couille): variable chiante oubliee
BabtouZER Apr 1, 2025
fa024f2
fix(test.py): chiantosse
BabtouZER Apr 1, 2025
70a5577
fix(encore): chiantosse2
BabtouZER Apr 1, 2025
b4fc2e3
fix(encoreetencore): chiant de ouf
BabtouZER Apr 1, 2025
567f188
fix(chiant): chiant
BabtouZER Apr 1, 2025
ad48182
fix(path): replace sbom at path
BabtouZER Apr 2, 2025
4add784
fix(env): modif fichier .env parce que c'est comme ça
BabtouZER Apr 2, 2025
705e5af
fix(env): encore putain chiotte
BabtouZER Apr 2, 2025
3d9ecfb
fix(en): message
BabtouZER Apr 2, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
TEST_DATABASE_URL=postgresql://dev_user:motdepassedev@51.255.51.83:5433/dev_db
FLASK_ENV="development"
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
#.env
migrations/

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
Expand Down Expand Up @@ -128,7 +131,7 @@ celerybeat.pid
*.sage.py

# Environments
.env
#.env
.venv
env/
venv/
Expand Down
12 changes: 8 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@ FROM python:3.11-slim

COPY requirements.txt .

RUN apt update && apt install -y git && rm -rf /var/lib/apt/lists/*
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
COPY . .
COPY . .

ENTRYPOINT ["flask"]
CMD ["run"]
EXPOSE 5000
CMD ["python","app.py"]

#ENTRYPOINT ["flask"]
#CMD ["run"]
#EXPOSE 5000
3 changes: 2 additions & 1 deletion app.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@
app = create_app()

if __name__ == "__main__": #lancement de l'app
app.run(debug=app.config.get("DEBUG"))
app.run(host="0.0.0.0", port=5000, debug=True)
# app.run(debug=app.config.get("DEBUG"))
32 changes: 19 additions & 13 deletions app/__init__.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,32 @@
from flask import Flask,jsonify
from flask import Flask, jsonify
from app.config import *
from app.extensions import jwt
import os
from app.extensions import jwt, db
import os
from dotenv import load_dotenv

__version__ = "1.0.1" # géré automatiquement par la CI


load_dotenv(".env")
def create_app():
app = Flask(__name__)
app = Flask(__name__)


app.config.from_object(config[os.getenv("FLASK_ENV") or "development"])#en mode dev par défaut si rien de spécifié


db.init_app(app)
jwt.init_app(app)

@jwt.unauthorized_loader # gérer le cas ou le client n'est pas authentifié
def unauthorized_callback(callback):
return jsonify({"msg": "Token invalide ou manquant. veuillez vous authentifier."}), 401

app.config.from_object(config[os.getenv("FLASK_ENV") or "development"])#en mode dev par défaut si rien de spécifié

#db.init_app(app)
jwt.init_app(app)
from app.routes.routes1 import projets_bp

@jwt.unauthorized_loader # gérer le cas ou le client n'est pas authentifié
def unauthorized_callback(callback):
return jsonify({"msg": "Token invalide ou manquant. veuillez vous authentifier."}), 401

from app.routes.routes1 import test_bp
app.register_blueprint(projets_bp, url_prefix='/projets')

app.register_blueprint(test_bp, url_prefix='/test')

return app
return app
2 changes: 1 addition & 1 deletion app/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ class Config: # config par défaut
JWT_SECRET_KEY = os.getenv('JWT_SECRET_KEY', 'enormemotdepasse')
PORT=os.getenv("FLASK_PORT",5000)

class DevelopmentConfig(Config):
class DevelopmentConfig(Config):
FLASK_ENV = 'development'
DEBUG = True
SQLALCHEMY_DATABASE_URI = os.getenv('DEV_DATABASE_URL', 'postgresql://user:password@db:5432/basededev')
Expand Down
6 changes: 4 additions & 2 deletions app/extensions.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
from flask_sqlalchemy import SQLAlchemy
from flask_jwt_extended import JWTManager
from depsec_db.extensions import db

db = db

#from depsec_models.database import db

#db= depsec_models.database.db
jwt = JWTManager()
jwt = JWTManager()
124 changes: 111 additions & 13 deletions app/routes/routes1.py
Original file line number Diff line number Diff line change
@@ -1,34 +1,132 @@
from flask import Blueprint, request, jsonify
from flask import Blueprint, current_app, json, request, jsonify
from flask_jwt_extended import create_access_token
#from app.extensions import db
from app.extensions import db
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address
import re
from app.services.auth import verify_token
from flask import current_app
from app.extensions import db
from depsec_db import models
#from depsec_models.models import * #import des modèles depuis le package

test_bp = Blueprint("test", __name__)

projets_bp = Blueprint("projets", __name__)
limiter = Limiter(get_remote_address, default_limits=["5 per minute"])

@test_bp.route('/toto', methods=['GET'])
def toto():

# ---------- Phase de test avant la BDD (comme si test.json était ce qu'on récupérait de la BDD) ------------- #


projects = [
{
"id":1,
"titre":"Gestion des projets",
"auteur":"Solayman",
"status":"Accept",
"path":"/var/sui"
},
{
"id":2,
"titre":"Gestion de BDD",
"auteur":"Pierrot la pinto de la mañana",
"status":"Refuse",
"path":"/var/bang"
}
]


def return_all_proj():
return projects


def return_project(proj):
for p in projects:
if proj in p.values():
return p


def add_dico(dico):

for d in projects:
if d["titre"] == dico["titre"]:
return jsonify({"error": f"Le nom de projet {d['titre']} existe deja !"}), 400

# trouve le + grand id
max_id = max([elem['id'] for elem in projects]) if projects else 0

dico['id'] = max_id + 1
projects.append(dico)

return return_all_proj()
#save_json(file_path, data)
#return jsonify(load_json(file_path)), 200

def del_dico(id):
global projects

try:
new_data = [item for item in projects if int(item.get("id")) != int(id)]
except :
return jsonify({"error": "Entrez un entier !"}), 404

if len(new_data) == len(projects):
return jsonify({"error": f"Le projet avec l'id '{id}' n'existe pas !"}), 404

projects = new_data
return return_all_proj()
#return jsonify(load_json(file_path)), 200

# ------------------------------------------------------------------------------------------------------------ #


@projets_bp.route('/', methods=['GET'])
def get_projects():
if verify_token() == False and current_app.config["FLASK_ENV"] !="development" : #verifier que le token est valide ( a mettre dans chaque route) et qu'on est pas en environnement de dev
return jsonify({"msg": "Token invalide / Utilisateur non autorisé"}), 401

data = request.json
return jsonify({"msg":"blabla cool"}), 200

@test_bp.route('/tutu', methods=['POST'])
@limiter.limit("5 per minute") #exemple pouur limiter le nombre de requetes
def tutu():
#data = request.get_json()


#return return_all_proj(), 200
#return jsonify({"Projects":data.get('titre')}), 200

#projects = Project.query.all()
#return jsonify([user.to_dict() for user in users])


@projets_bp.route('/', methods=['POST'])
def add_project():
if verify_token() == False and current_app.config["FLASK_ENV"] !="development" : #verifier que le token est valide ( a mettre dans chaque route) et qu'on est pas en environnement de dev
return jsonify({"msg": "Token invalide / Utilisateur non autorisé"}), 401

data = request.json

return jsonify({"msg": "blabla"}), 401
data = request.get_json()

if not data :
return jsonify({"error": "Le fomat de vos donnees n'est pas bon !!"}), 400

if data.get("titre") and data.get("auteur") and data.get("status") and data.get("path"):
titre = data.get("titre")
auteur = data.get("auteur")
status = data.get("status")
path = data.get("path")

if isinstance(auteur, str) and status in ["Accept","Refuse"]:
format = {
"id":0,
"titre":titre,
"auteur":auteur,
"status":status,
"path":path
}
return add_dico(format)
else :
return jsonify({'error': 'Parametres aux mauvais formats !'}), 400
else :
return jsonify({'error': 'Parametres manquants'}), 400


@projets_bp.route("/<id>", methods=["DELETE"])
def del_project(id):
return del_dico(id)
5 changes: 2 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "TemplateAPI" # achanger
description = "Template d'API pour le projet DEPSEC" # achanger
name = "API_Project_Management" # achanger
description = "API_Project_Management nous permet de gérer nos projets grr baw" # achanger

[tool.semantic_release]
version_variable = ["app/__init__.py:__version__"]
Expand All @@ -17,4 +17,3 @@ tag_format = "v{version}" #tag git automatique pour semantic-release
changelog_sections = ["Features", "Bug Fixes", "Documentation", "Tests","CI/CD"]
upload_to_release = true # release auto sur github
changelog_format = "- {message} ([{commit}](https://github.com/DEPSEC-Project/TemplateAPI/commit/{commit}))"

7 changes: 6 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,13 @@
pip==20.3.4
flask
flask-limiter
Flask-SQLAlchemy
Flask-JWT-Extended
pytest
dotenv
requests
python-semantic-release
python-semantic-release
setuptools
flask_migrate
psycopg2-binary
git+https://github.com/DEPSEC-Project/DB-Management.git
3 changes: 1 addition & 2 deletions test/test_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,4 @@ def test_inutile():
"""
A modifier si on décide de définir des tests unitaires
"""
assert True

assert True
Loading