From f7d38e8882e0472c8d4b533a7b2a50f24e970b42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20-=20Le=20Filament?= <remi@le-filament.com> Date: Wed, 26 Mar 2025 16:41:48 +0100 Subject: [PATCH] [IMP] use 401 error instead of empty dict --- controllers/main.py | 44 ++++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/controllers/main.py b/controllers/main.py index 0239780..39fc7f1 100644 --- a/controllers/main.py +++ b/controllers/main.py @@ -1,9 +1,9 @@ # Copyright 2021- Le Filament (https://le-filament.com) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) +import werkzeug -from werkzeug.exceptions import Unauthorized - -from odoo import http +from odoo import _, http +from odoo.exceptions import AccessError from odoo.http import request from odoo.addons.oacc_portal.controllers.main import CustomerPortal as CustomerPortal @@ -172,13 +172,18 @@ class CustomerPortal(CustomerPortal): - When click on date range """ operation = request.env["acc.operation"].browse(operation_id) - roles = self._get_role(operation) - # Si l'opération n'a pas de courbes on renvoie un dictionnaire vide + try: + roles = self._get_role(operation) + except AccessError as e: + raise werkzeug.exceptions.abort( + werkzeug.wrappers.Response(status=401) + ) from e + # Si l'opération n'a pas de courbes on renvoie une erreur 401 # Si l'utilisateur n'est pas soit superAdmin, soit Admin, soit Pmo, # 1. si prm_id est passé il doit aussi y avoir un partner_id # 2. il faut vérifier qu'il est bien autorisé à accéder au partner_id # si passé en paramètre - # sinon on renvoie un dictionnaire vide + # sinon on renvoie une erreur 401 # (on ne vérifie pas qu'il ait bien accès au prm, aucune donnée ne sera renvoyée # si les courbes du prm demandées n'appartiennent pas à ce partner) if not roles.get("isDataCdc") or ( @@ -194,7 +199,7 @@ class CustomerPortal(CustomerPortal): ) ) ): - return {} + raise werkzeug.exceptions.abort(werkzeug.wrappers.Response(status=401)) vals = operation.get_graph( start_date, end_date, partner_id, prm_id, data_type, graph_type ) @@ -224,19 +229,25 @@ class CustomerPortal(CustomerPortal): - When click on button export """ operation = request.env["acc.operation"].sudo().browse(int(operation_id)) - if ( - request.env.user.commercial_partner_id.id - not in operation.partner_role_ids.partner_id.ids - ): - raise Unauthorized() - roles = self._get_role(operation) - # Si l'opération n'a pas de courbes on renvoie un Unauthorized + try: + if ( + request.env.user.commercial_partner_id.id + not in operation.partner_role_ids.partner_id.ids + ): + raise AccessError(_("You are not allowed to access this operation")) + roles = self._get_role(operation) + except AccessError as e: + raise werkzeug.exceptions.abort( + werkzeug.wrappers.Response(status=401) + ) from e + + # Si l'opération n'a pas de courbes on renvoie une erreur 401 # Si l'utilisateur n'est pas soit superAdmin, soit Admin, soit Pmo, # 1. le partner_id est obligatoire # 2. il faut vérifier qu'il est bien autorisé à accéder au partner_id # 3. il faut vérifier que le PRM correspond bien à une période de ce partner_id # sur l'opération - # sinon on renvoie un Unauthorized + # sinon on renvoie une erreur 401 # (on ne vérifie pas qu'il ait bien accès au prm, aucune donnée ne sera renvoyée # si les courbes du prm demandées n'appartiennent pas à ce partner) if not roles.get("isDataCdc") or ( @@ -264,7 +275,8 @@ class CustomerPortal(CustomerPortal): ) ) ): - raise Unauthorized() + raise werkzeug.exceptions.abort(werkzeug.wrappers.Response(status=401)) + file_values = operation._export_cdc( start_date, end_date, partner_id, prm_id, data_type ) -- GitLab