Merge branch 'fix/security' into main_2
This commit is contained in:
commit
a1150390f4
3 changed files with 119 additions and 114 deletions
174
api.py
174
api.py
|
|
@ -212,7 +212,7 @@ app.include_router(entreprises_router)
|
|||
async def obtenir_clients(
|
||||
query: Optional[str] = Query(None),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
clients = sage.lister_clients(filtre=query or "")
|
||||
|
|
@ -226,7 +226,7 @@ async def obtenir_clients(
|
|||
async def lire_client_detail(
|
||||
code: str,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
client = sage.lire_client(code)
|
||||
|
|
@ -249,7 +249,7 @@ async def modifier_client(
|
|||
client_update: ClientUpdate,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
resultat = sage.modifier_client(code, client_update.dict(exclude_none=True))
|
||||
|
|
@ -275,7 +275,7 @@ async def ajouter_client(
|
|||
client: ClientCreate,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
nouveau_client = sage.creer_client(client.model_dump(mode="json"))
|
||||
|
|
@ -300,7 +300,7 @@ async def ajouter_client(
|
|||
async def rechercher_articles(
|
||||
query: Optional[str] = Query(None),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
articles = sage.lister_articles(filtre=query or "")
|
||||
|
|
@ -319,7 +319,7 @@ async def rechercher_articles(
|
|||
async def creer_article(
|
||||
article: ArticleCreate,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
if not article.reference or not article.designation:
|
||||
|
|
@ -360,7 +360,7 @@ async def modifier_article(
|
|||
reference: str = Path(..., description="Référence de l'article à modifier"),
|
||||
article: ArticleUpdate = Body(...),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
article_data = article.dict(exclude_unset=True)
|
||||
|
|
@ -404,7 +404,7 @@ async def modifier_article(
|
|||
async def lire_article(
|
||||
reference: str = Path(..., description="Référence de l'article"),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
article = sage.lire_article(reference)
|
||||
|
|
@ -434,7 +434,7 @@ async def lire_article(
|
|||
async def creer_devis(
|
||||
devis: DevisRequest,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
devis_data = {
|
||||
|
|
@ -474,7 +474,7 @@ async def modifier_devis(
|
|||
devis_update: DevisUpdate,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
update_data = {}
|
||||
|
|
@ -520,7 +520,7 @@ async def creer_commande(
|
|||
commande: CommandeCreate,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
commande_data = {
|
||||
|
|
@ -570,7 +570,7 @@ async def modifier_commande(
|
|||
commande_update: CommandeUpdate,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
update_data = {}
|
||||
|
|
@ -619,7 +619,7 @@ async def lister_devis(
|
|||
True, description="Inclure les lignes de chaque devis"
|
||||
),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
devis_list = sage.lister_devis(
|
||||
|
|
@ -636,7 +636,7 @@ async def lister_devis(
|
|||
async def lire_devis(
|
||||
id: str,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
devis = sage.lire_devis(id)
|
||||
|
|
@ -657,7 +657,7 @@ async def lire_devis(
|
|||
async def telecharger_devis_pdf(
|
||||
id: str,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
pdf_bytes = email_queue._generate_pdf(id, TypeDocument.DEVIS)
|
||||
|
|
@ -680,7 +680,7 @@ async def telecharger_document_pdf(
|
|||
),
|
||||
numero: str = Path(..., description="Numéro du document"),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
types_labels = {
|
||||
|
|
@ -737,7 +737,7 @@ async def envoyer_devis_email(
|
|||
request: EmailEnvoi,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
tous_destinataires = [request.destinataire] + request.cc + request.cci
|
||||
|
|
@ -793,7 +793,7 @@ async def changer_statut_document(
|
|||
..., ge=0, le=6, description="0=Saisi, 1=Confirmé, 2=Accepté"
|
||||
),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
document_type_sql = None
|
||||
document_type_code = None
|
||||
|
|
@ -910,7 +910,7 @@ async def changer_statut_document(
|
|||
async def lire_commande(
|
||||
id: str,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
commande = sage.lire_document(id, TypeDocumentSQL.BON_COMMANDE)
|
||||
|
|
@ -929,7 +929,7 @@ async def lister_commandes(
|
|||
limit: int = Query(100, le=1000),
|
||||
statut: Optional[int] = Query(None),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
commandes = sage.lister_commandes(limit=limit, statut=statut)
|
||||
|
|
@ -945,7 +945,7 @@ async def devis_vers_commande(
|
|||
id: str,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
resultat = sage.transformer_document(
|
||||
|
|
@ -990,7 +990,7 @@ async def commande_vers_facture(
|
|||
id: str,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
resultat = sage.transformer_document(
|
||||
|
|
@ -1092,7 +1092,7 @@ async def valider_remise(
|
|||
client_id: str = Query(..., min_length=1),
|
||||
remise_pourcentage: float = Query(0.0, ge=0, le=100),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
remise_max = sage.lire_remise_max_client(client_id)
|
||||
|
|
@ -1126,7 +1126,7 @@ async def relancer_devis_signature(
|
|||
relance: RelanceDevis,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
devis = sage.lire_devis(id)
|
||||
|
|
@ -1193,7 +1193,7 @@ class ContactClientResponse(BaseModel):
|
|||
async def recuperer_contact_devis(
|
||||
id: str,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
devis = sage.lire_devis(id)
|
||||
|
|
@ -1221,7 +1221,7 @@ async def lister_factures(
|
|||
limit: int = Query(100, le=1000),
|
||||
statut: Optional[int] = Query(None),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
factures = sage.lister_factures(limit=limit, statut=statut)
|
||||
|
|
@ -1236,7 +1236,7 @@ async def lister_factures(
|
|||
async def lire_facture_detail(
|
||||
numero: str,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
facture = sage.lire_document(numero, TypeDocumentSQL.FACTURE)
|
||||
|
|
@ -1263,7 +1263,7 @@ async def creer_facture(
|
|||
facture: FactureCreate,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
facture_data = {
|
||||
|
|
@ -1313,7 +1313,7 @@ async def modifier_facture(
|
|||
facture_update: FactureUpdate,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
update_data = {}
|
||||
|
|
@ -1383,7 +1383,7 @@ async def relancer_facture(
|
|||
relance: RelanceFacture,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
facture = sage.lire_document(id, TypeDocumentSQL.FACTURE)
|
||||
|
|
@ -1454,7 +1454,7 @@ async def journal_emails(
|
|||
limit: int = Query(100, le=1000),
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
query = select(EmailLog)
|
||||
|
||||
|
|
@ -1490,7 +1490,7 @@ async def exporter_logs_csv(
|
|||
statut: Optional[StatutEmail] = Query(None),
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
query = select(EmailLog)
|
||||
if statut:
|
||||
|
|
@ -1647,7 +1647,7 @@ async def supprimer_template(
|
|||
async def previsualiser_email(
|
||||
preview: TemplatePreview,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
if preview.template_id not in templates_email_db:
|
||||
raise HTTPException(404, f"Template {preview.template_id} introuvable")
|
||||
|
|
@ -1686,7 +1686,7 @@ async def previsualiser_email(
|
|||
async def rechercher_prospects(
|
||||
query: Optional[str] = Query(None),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
prospects = sage.lister_prospects(filtre=query or "")
|
||||
|
|
@ -1700,7 +1700,7 @@ async def rechercher_prospects(
|
|||
async def lire_prospect(
|
||||
code: str,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
prospect = sage.lire_prospect(code)
|
||||
|
|
@ -1720,7 +1720,7 @@ async def lire_prospect(
|
|||
async def rechercher_fournisseurs(
|
||||
query: Optional[str] = Query(None),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
fournisseurs = sage.lister_fournisseurs(filtre=query or "")
|
||||
|
|
@ -1742,7 +1742,7 @@ async def ajouter_fournisseur(
|
|||
fournisseur: FournisseurCreate,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
nouveau_fournisseur = sage.creer_fournisseur(fournisseur.dict())
|
||||
|
|
@ -1772,7 +1772,7 @@ async def modifier_fournisseur(
|
|||
fournisseur_update: FournisseurUpdate,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
resultat = sage.modifier_fournisseur(
|
||||
|
|
@ -1795,7 +1795,7 @@ async def modifier_fournisseur(
|
|||
async def lire_fournisseur(
|
||||
code: str,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
fournisseur = sage.lire_fournisseur(code)
|
||||
|
|
@ -1814,7 +1814,7 @@ async def lister_avoirs(
|
|||
limit: int = Query(100, le=1000),
|
||||
statut: Optional[int] = Query(None),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
avoirs = sage.lister_avoirs(limit=limit, statut=statut)
|
||||
|
|
@ -1828,7 +1828,7 @@ async def lister_avoirs(
|
|||
async def lire_avoir(
|
||||
numero: str,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
avoir = sage.lire_document(numero, TypeDocumentSQL.BON_AVOIR)
|
||||
|
|
@ -1847,7 +1847,7 @@ async def creer_avoir(
|
|||
avoir: AvoirCreate,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
avoir_data = {
|
||||
|
|
@ -1895,7 +1895,7 @@ async def modifier_avoir(
|
|||
avoir_update: AvoirUpdate,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
update_data = {}
|
||||
|
|
@ -1941,7 +1941,7 @@ async def lister_livraisons(
|
|||
limit: int = Query(100, le=1000),
|
||||
statut: Optional[int] = Query(None),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
livraisons = sage.lister_livraisons(limit=limit, statut=statut)
|
||||
|
|
@ -1955,7 +1955,7 @@ async def lister_livraisons(
|
|||
async def lire_livraison(
|
||||
numero: str,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
livraison = sage.lire_document(numero, TypeDocumentSQL.BON_LIVRAISON)
|
||||
|
|
@ -1974,7 +1974,7 @@ async def creer_livraison(
|
|||
livraison: LivraisonCreate,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
livraison_data = {
|
||||
|
|
@ -2028,7 +2028,7 @@ async def modifier_livraison(
|
|||
livraison_update: LivraisonUpdate,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
update_data = {}
|
||||
|
|
@ -2074,7 +2074,7 @@ async def livraison_vers_facture(
|
|||
id: str,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
resultat = sage.transformer_document(
|
||||
|
|
@ -2118,7 +2118,7 @@ async def devis_vers_facture_direct(
|
|||
id: str,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
devis_existant = sage.lire_devis(id)
|
||||
|
|
@ -2179,7 +2179,7 @@ async def commande_vers_livraison(
|
|||
id: str,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
commande_existante = sage.lire_document(id, TypeDocumentSQL.BON_COMMANDE)
|
||||
|
|
@ -2251,7 +2251,7 @@ async def commande_vers_livraison(
|
|||
async def lister_familles(
|
||||
filtre: Optional[str] = Query(None, description="Filtre sur code ou intitulé"),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
familles = sage.lister_familles(filtre or "")
|
||||
|
|
@ -2277,7 +2277,7 @@ async def lister_familles(
|
|||
async def lire_famille(
|
||||
code: str = Path(..., description="Code de la famille (ex: ZDIVERS)"),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
famille = sage.lire_famille(code)
|
||||
|
|
@ -2313,7 +2313,7 @@ async def lire_famille(
|
|||
async def creer_famille(
|
||||
famille: FamilleCreate,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
if not famille.code or not famille.intitule:
|
||||
|
|
@ -2357,7 +2357,7 @@ async def creer_famille(
|
|||
async def creer_entree_stock(
|
||||
entree: EntreeStock,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
entree_data = entree.dict()
|
||||
|
|
@ -2394,7 +2394,7 @@ async def creer_entree_stock(
|
|||
async def creer_sortie_stock(
|
||||
sortie: SortieStock,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
sortie_data = sortie.dict()
|
||||
|
|
@ -2430,7 +2430,7 @@ async def creer_sortie_stock(
|
|||
async def lire_mouvement_stock(
|
||||
numero: str = Path(..., description="Numéro du mouvement (ex: ME00123 ou MS00124)"),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
mouvement = sage.lire_mouvement_stock(numero)
|
||||
|
|
@ -2463,7 +2463,7 @@ async def lire_mouvement_stock(
|
|||
)
|
||||
async def statistiques_familles(
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
stats = sage.get_stats_familles()
|
||||
|
|
@ -2572,7 +2572,7 @@ async def creer_contact(
|
|||
numero: str,
|
||||
contact: ContactCreate,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
try:
|
||||
|
|
@ -2605,7 +2605,7 @@ async def creer_contact(
|
|||
async def lister_contacts(
|
||||
numero: str,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
contacts = sage.lister_contacts(numero)
|
||||
|
|
@ -2624,7 +2624,7 @@ async def obtenir_contact(
|
|||
numero: str,
|
||||
contact_numero: int,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
contact = sage.obtenir_contact(numero, contact_numero)
|
||||
|
|
@ -2650,7 +2650,7 @@ async def modifier_contact(
|
|||
contact_numero: int,
|
||||
contact: ContactUpdate,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
contact_existant = sage.obtenir_contact(numero, contact_numero)
|
||||
|
|
@ -2682,7 +2682,7 @@ async def supprimer_contact(
|
|||
numero: str,
|
||||
contact_numero: int,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
sage.supprimer_contact(numero, contact_numero)
|
||||
|
|
@ -2697,7 +2697,7 @@ async def definir_contact_defaut(
|
|||
numero: str,
|
||||
contact_numero: int,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
resultat = sage.definir_contact_defaut(numero, contact_numero)
|
||||
|
|
@ -2719,7 +2719,7 @@ async def obtenir_tiers(
|
|||
),
|
||||
query: Optional[str] = Query(None, description="Recherche sur code ou intitulé"),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
type_normalise = normaliser_type_tiers(type_tiers)
|
||||
|
|
@ -2734,7 +2734,7 @@ async def obtenir_tiers(
|
|||
async def lire_tiers_detail(
|
||||
code: str,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
tiers = sage.lire_tiers(code)
|
||||
|
|
@ -2772,7 +2772,7 @@ async def lister_collaborateurs(
|
|||
True, description="Exclure les collaborateurs en sommeil"
|
||||
),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
"""Liste tous les collaborateurs"""
|
||||
try:
|
||||
|
|
@ -2791,7 +2791,7 @@ async def lister_collaborateurs(
|
|||
async def lire_collaborateur_detail(
|
||||
numero: int,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
"""Lit un collaborateur par son numéro"""
|
||||
try:
|
||||
|
|
@ -2818,7 +2818,7 @@ async def lire_collaborateur_detail(
|
|||
async def creer_collaborateur(
|
||||
collaborateur: CollaborateurCreate,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
"""Crée un nouveau collaborateur"""
|
||||
try:
|
||||
|
|
@ -2845,7 +2845,7 @@ async def modifier_collaborateur(
|
|||
numero: int,
|
||||
collaborateur: CollaborateurUpdate,
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
"""Modifie un collaborateur existant"""
|
||||
try:
|
||||
|
|
@ -2868,7 +2868,7 @@ async def modifier_collaborateur(
|
|||
@app.get("/societe/info", response_model=SocieteInfo, tags=["Société"])
|
||||
async def obtenir_informations_societe(
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
societe = sage.lire_informations_societe()
|
||||
|
|
@ -2888,7 +2888,7 @@ async def obtenir_informations_societe(
|
|||
@app.get("/societe/logo", tags=["Société"])
|
||||
async def obtenir_logo_societe(
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
"""Retourne le logo en tant qu'image directe"""
|
||||
try:
|
||||
|
|
@ -2913,7 +2913,7 @@ async def obtenir_logo_societe(
|
|||
@app.get("/societe/preview", response_class=HTMLResponse, tags=["Société"])
|
||||
async def preview_societe(
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
"""Page HTML pour visualiser les infos société avec logo"""
|
||||
try:
|
||||
|
|
@ -2987,7 +2987,7 @@ async def valider_facture(
|
|||
numero_facture: str,
|
||||
_: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
resultat = sage.valider_facture(numero_facture)
|
||||
|
|
@ -3011,7 +3011,7 @@ async def devalider_facture(
|
|||
numero_facture: str,
|
||||
_: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
resultat = sage.devalider_facture(numero_facture)
|
||||
|
|
@ -3035,7 +3035,7 @@ async def get_statut_validation_facture(
|
|||
numero_facture: str,
|
||||
_: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
resultat = sage.get_statut_validation(numero_facture)
|
||||
|
|
@ -3056,7 +3056,7 @@ async def regler_facture(
|
|||
reglement: ReglementFactureCreate,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
resultat = sage.regler_facture(
|
||||
|
|
@ -3100,7 +3100,7 @@ async def regler_factures_multiple(
|
|||
reglement: ReglementMultipleCreate,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
resultat = sage.regler_factures_client(
|
||||
|
|
@ -3139,7 +3139,7 @@ async def get_reglements_facture(
|
|||
numero_facture: str,
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
resultat = sage.get_reglements_facture(numero_facture)
|
||||
|
|
@ -3164,7 +3164,7 @@ async def get_reglements_client(
|
|||
inclure_soldees: bool = Query(True, description="Inclure les factures soldées"),
|
||||
session: AsyncSession = Depends(get_session),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
resultat = sage.get_reglements_client(
|
||||
|
|
@ -3189,7 +3189,7 @@ async def get_reglements_client(
|
|||
@app.get("/journaux/banque", tags=["Règlements"])
|
||||
async def get_journaux_banque(
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
try:
|
||||
resultat = sage.get_journaux_banque()
|
||||
|
|
@ -3202,7 +3202,7 @@ async def get_journaux_banque(
|
|||
@app.get("/reglements/modes", tags=["Référentiels"])
|
||||
async def get_modes_reglement(
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
"""Liste des modes de règlement disponibles dans Sage"""
|
||||
try:
|
||||
|
|
@ -3216,7 +3216,7 @@ async def get_modes_reglement(
|
|||
@app.get("/devises", tags=["Référentiels"])
|
||||
async def get_devises(
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
"""Liste des devises disponibles dans Sage"""
|
||||
try:
|
||||
|
|
@ -3230,7 +3230,7 @@ async def get_devises(
|
|||
@app.get("/journaux/tresorerie", tags=["Référentiels"])
|
||||
async def get_journaux_tresorerie(
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
"""Liste des journaux de trésorerie (banque + caisse)"""
|
||||
try:
|
||||
|
|
@ -3249,7 +3249,7 @@ async def get_comptes_generaux(
|
|||
description="client | fournisseur | banque | caisse | tva | produit | charge",
|
||||
),
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
"""Liste des comptes généraux"""
|
||||
try:
|
||||
|
|
@ -3263,7 +3263,7 @@ async def get_comptes_generaux(
|
|||
@app.get("/tva/taux", tags=["Référentiels"])
|
||||
async def get_tva_taux(
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
"""Liste des taux de TVA"""
|
||||
try:
|
||||
|
|
@ -3277,7 +3277,7 @@ async def get_tva_taux(
|
|||
@app.get("/parametres/encaissement", tags=["Référentiels"])
|
||||
async def get_parametres_encaissement(
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
"""Paramètres TVA sur encaissement"""
|
||||
try:
|
||||
|
|
@ -3324,7 +3324,7 @@ async def get_reglement_detail(rg_no):
|
|||
@app.get("/health", tags=["System"])
|
||||
async def health_check(
|
||||
user: User = Depends(get_current_user),
|
||||
sage: SageGatewayClient = Depends(get_sage_client_for_user),
|
||||
sage: SageGatewayClient = Depends(get_current_user),
|
||||
):
|
||||
gateway_health = sage.health()
|
||||
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ async def verify_swagger_credentials(credentials: HTTPBasicCredentials) -> bool:
|
|||
logger.info(f" Accès Swagger autorisé (DB): {username}")
|
||||
return True
|
||||
|
||||
logger.warning(f" Tentative d'accès Swagger refusée: {username}")
|
||||
logger.warning(f"Tentative d'accès Swagger refusée: {username}")
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
|
|
@ -43,6 +43,7 @@ async def verify_swagger_credentials(credentials: HTTPBasicCredentials) -> bool:
|
|||
|
||||
|
||||
class SwaggerAuthMiddleware:
|
||||
|
||||
def __init__(self, app):
|
||||
self.app = app
|
||||
|
||||
|
|
@ -54,7 +55,7 @@ class SwaggerAuthMiddleware:
|
|||
request = Request(scope, receive=receive)
|
||||
path = request.url.path
|
||||
|
||||
protected_paths = ["/docs", "/redoc", "/openapi.json"]
|
||||
protected_paths = ["/docs", "/redoc"]
|
||||
|
||||
if any(path.startswith(protected_path) for protected_path in protected_paths):
|
||||
auth_header = request.headers.get("Authorization")
|
||||
|
|
@ -104,6 +105,7 @@ class SwaggerAuthMiddleware:
|
|||
|
||||
|
||||
class ApiKeyMiddleware:
|
||||
|
||||
def __init__(self, app):
|
||||
self.app = app
|
||||
|
||||
|
|
@ -115,21 +117,24 @@ class ApiKeyMiddleware:
|
|||
request = Request(scope, receive=receive)
|
||||
path = request.url.path
|
||||
|
||||
excluded_paths = [
|
||||
public_exact_paths = [
|
||||
"/",
|
||||
"/health",
|
||||
"/docs",
|
||||
"/redoc",
|
||||
"/openapi.json",
|
||||
"/health",
|
||||
"/",
|
||||
"/auth/login",
|
||||
"/auth/register",
|
||||
"/auth/verify-email",
|
||||
"/auth/reset-password",
|
||||
"/auth/request-reset",
|
||||
"/auth/refresh",
|
||||
]
|
||||
|
||||
if any(path.startswith(excluded_path) for excluded_path in excluded_paths):
|
||||
public_path_prefixes = [
|
||||
"/api/v1/auth/",
|
||||
]
|
||||
|
||||
is_public = path in public_exact_paths or any(
|
||||
path.startswith(prefix) for prefix in public_path_prefixes
|
||||
)
|
||||
|
||||
if is_public:
|
||||
logger.debug(f"Chemin public: {path}")
|
||||
await self.app(scope, receive, send)
|
||||
return
|
||||
|
||||
|
|
@ -140,12 +145,12 @@ class ApiKeyMiddleware:
|
|||
has_api_key = api_key is not None
|
||||
|
||||
if has_jwt:
|
||||
logger.debug(f" JWT détecté pour {path}")
|
||||
logger.debug(f"🔑 JWT détecté pour {path}")
|
||||
await self.app(scope, receive, send)
|
||||
return
|
||||
|
||||
elif has_api_key:
|
||||
logger.debug(f" API Key détectée pour {path}")
|
||||
logger.debug(f"🔑 API Key détectée pour {path}")
|
||||
|
||||
from services.api_key import ApiKeyService
|
||||
|
||||
|
|
@ -218,8 +223,9 @@ class ApiKeyMiddleware:
|
|||
response = JSONResponse(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
content={
|
||||
"detail": "Authentification requise",
|
||||
"detail": "Authentification requise (JWT ou API Key)",
|
||||
"hint": "Utilisez soit 'X-API-Key: sdk_live_xxx' soit 'Authorization: Bearer <jwt>'",
|
||||
"endpoint": path,
|
||||
},
|
||||
headers={"WWW-Authenticate": 'Bearer realm="API", charset="UTF-8"'},
|
||||
)
|
||||
|
|
@ -233,4 +239,5 @@ def get_api_key_from_request(request: Request) -> Optional:
|
|||
|
||||
|
||||
def get_auth_method(request: Request) -> str:
|
||||
|
||||
return getattr(request.state, "authenticated_via", "none")
|
||||
|
|
|
|||
|
|
@ -1,25 +1,23 @@
|
|||
import asyncio
|
||||
import sys
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
current_dir = Path(__file__).resolve().parent
|
||||
parent_dir = current_dir.parent
|
||||
sys.path.insert(0, str(parent_dir))
|
||||
from database import get_session
|
||||
from database.models.api_key import SwaggerUser, ApiKey
|
||||
from services.api_key import ApiKeyService
|
||||
from security.auth import hash_password
|
||||
from sqlalchemy import select
|
||||
|
||||
import argparse
|
||||
from datetime import datetime
|
||||
import logging
|
||||
|
||||
current_dir = Path(__file__).resolve().parent
|
||||
parent_dir = current_dir.parent
|
||||
sys.path.insert(0, str(parent_dir))
|
||||
|
||||
logging.basicConfig(level=logging.INFO, format="%(levelname)s - %(message)s")
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
from database import get_session
|
||||
from database.models.api_key import SwaggerUser, ApiKey
|
||||
from services.api_key import ApiKeyService
|
||||
from security.auth import hash_password, verify_password
|
||||
from sqlalchemy import select
|
||||
|
||||
|
||||
async def add_swagger_user(username: str, password: str, full_name: str = None):
|
||||
"""Ajouter un utilisateur Swagger"""
|
||||
|
|
@ -132,7 +130,7 @@ async def create_api_key(
|
|||
f" Endpoints autorisés: {', '.join(api_key_obj.allowed_endpoints)}"
|
||||
)
|
||||
else:
|
||||
logger.info(f" Endpoints autorisés: Tous")
|
||||
logger.info(" Endpoints autorisés: Tous")
|
||||
|
||||
logger.info("=" * 60)
|
||||
logger.info(" IMPORTANT: Sauvegardez cette clé, elle ne sera plus affichée !")
|
||||
|
|
|
|||
Loading…
Reference in a new issue