Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
101 changes: 101 additions & 0 deletions fastapi_encrypted_errors/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
========================
FastAPI Encrypted Errors
========================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:15dc8276c61dfb1e08999782de2a451f1d9531ada4979f1d4e02ae39e873406c
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Frest--framework-lightgray.png?logo=github
:target: https://github.com/OCA/rest-framework/tree/18.0/fastapi_encrypted_errors
:alt: OCA/rest-framework
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/rest-framework-18-0/rest-framework-18-0-fastapi_encrypted_errors
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/rest-framework&target_branch=18.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This module adds a "ref" field in the error response of FastAPI. This
field is an AES encrypted string that contains the error message /
traceback. This encrypted string can be decrypted using the endpoint
decrypt error wizard.

**Table of contents**

.. contents::
:local:

Usage
=====

First you have to enable the encryption for an endpoint by checking the
Encrypt Errors checkbox in the endpoint configuration.

To decrypt an error message, you can use the "Decrypt Error" wizard in
the FastAPI menu.

You can regenerate a new key by clicking on the "Regenerate Key" button
next to the Errors Secret Key field.

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/rest-framework/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/rest-framework/issues/new?body=module:%20fastapi_encrypted_errors%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
-------

* Akretion

Contributors
------------

- `Akretion <https://www.akretion.com>`__:

- Florian Mounier

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

.. |maintainer-paradoxxxzero| image:: https://github.com/paradoxxxzero.png?size=40px
:target: https://github.com/paradoxxxzero
:alt: paradoxxxzero

Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-paradoxxxzero|

This module is part of the `OCA/rest-framework <https://github.com/OCA/rest-framework/tree/18.0/fastapi_encrypted_errors>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
3 changes: 3 additions & 0 deletions fastapi_encrypted_errors/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from . import models
from . import wizards
from . import fastapi_dispatcher
25 changes: 25 additions & 0 deletions fastapi_encrypted_errors/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Copyright 2024 Akretion (http://www.akretion.com).
# @author Florian Mounier <florian.mounier@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

{
"name": "FastAPI Encrypted Errors",
"summary": "Adds encrypted error messages to FastAPI error responses.",
"version": "18.0.1.0.0",
"license": "AGPL-3",
"author": "Akretion,Odoo Community Association (OCA)",
"maintainers": ["paradoxxxzero"],
"website": "https://github.com/OCA/rest-framework",
"depends": [
"fastapi",
],
"data": [
"security/ir.model.access.csv",
"views/fastapi_endpoint_views.xml",
"wizards/wizard_fastapi_decrypt_errors_views.xml",
],
"demo": [],
"external_dependencies": {
"python": ["cryptography"],
},
}
35 changes: 35 additions & 0 deletions fastapi_encrypted_errors/fastapi_dispatcher.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Copyright 2024 Akretion (http://www.akretion.com).
# @author Florian Mounier <florian.mounier@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo.http import _dispatchers

from odoo.addons.fastapi.error_handlers import convert_exception_to_status_body
from odoo.addons.fastapi.fastapi_dispatcher import (
FastApiDispatcher as BaseFastApiDispatcher,
)


# Inherit from last registered fastapi dispatcher
# This handles multiple overload of dispatchers
class FastApiDispatcher(_dispatchers.get("fastapi", BaseFastApiDispatcher)):
routing_type = "fastapi"

def handle_error(self, exc):
environ = self._get_environ()
root_path = "/" + environ["PATH_INFO"].split("/")[1]
fastapi_endpoint = (
self.request.env["fastapi.endpoint"]
.sudo()
.search([("root_path", "=", root_path)])
)
if fastapi_endpoint.encrypt_errors:
headers = getattr(exc, "headers", None)
status_code, body = convert_exception_to_status_body(exc)
if body:
body["ref"] = fastapi_endpoint._encrypt_error(exc)
return self.request.make_json_response(
body, status=status_code, headers=headers
)

return super().handle_error(exc)
113 changes: 113 additions & 0 deletions fastapi_encrypted_errors/i18n/fastapi_encrypted_errors.pot
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * fastapi_encrypted_errors
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: fastapi_encrypted_errors
#: model_terms:ir.ui.view,arch_db:fastapi_encrypted_errors.wizard_fastapi_decrypt_errors_view_form
msgid "Close"
msgstr ""

#. module: fastapi_encrypted_errors
#: model:ir.model.fields,field_description:fastapi_encrypted_errors.field_wizard_fastapi_decrypt_errors__create_uid
msgid "Created by"
msgstr ""

#. module: fastapi_encrypted_errors
#: model:ir.model.fields,field_description:fastapi_encrypted_errors.field_wizard_fastapi_decrypt_errors__create_date
msgid "Created on"
msgstr ""

#. module: fastapi_encrypted_errors
#: model:ir.actions.act_window,name:fastapi_encrypted_errors.wizard_fastapi_decrypt_errors_action_decrypt_error
#: model:ir.ui.menu,name:fastapi_encrypted_errors.menu_fastapi_decrypt_errors
#: model_terms:ir.ui.view,arch_db:fastapi_encrypted_errors.wizard_fastapi_decrypt_errors_view_form
msgid "Decrypt Error"
msgstr ""

#. module: fastapi_encrypted_errors
#: model:ir.model.fields,field_description:fastapi_encrypted_errors.field_wizard_fastapi_decrypt_errors__decrypted_error
msgid "Decrypted Error"
msgstr ""

#. module: fastapi_encrypted_errors
#: model:ir.model.fields,field_description:fastapi_encrypted_errors.field_wizard_fastapi_decrypt_errors__display_name
msgid "Display Name"
msgstr ""

#. module: fastapi_encrypted_errors
#: model:ir.model.fields,field_description:fastapi_encrypted_errors.field_fastapi_endpoint__encrypt_errors
msgid "Encrypt Errors"
msgstr ""

#. module: fastapi_encrypted_errors
#: model:ir.model.fields,help:fastapi_encrypted_errors.field_fastapi_endpoint__encrypt_errors
msgid "Encrypt errors before sending them to the client."
msgstr ""

#. module: fastapi_encrypted_errors
#: model:ir.model.fields,field_description:fastapi_encrypted_errors.field_fastapi_endpoint__encrypted_errors_secret_key
msgid "Encrypted Errors Secret Key"
msgstr ""

#. module: fastapi_encrypted_errors
#: model:ir.model.fields,field_description:fastapi_encrypted_errors.field_wizard_fastapi_decrypt_errors__error
msgid "Error"
msgstr ""

#. module: fastapi_encrypted_errors
#: model:ir.model,name:fastapi_encrypted_errors.model_fastapi_endpoint
#: model:ir.model.fields,field_description:fastapi_encrypted_errors.field_wizard_fastapi_decrypt_errors__fastapi_endpoint_id
msgid "FastAPI Endpoint"
msgstr ""

#. module: fastapi_encrypted_errors
#: model_terms:ir.ui.view,arch_db:fastapi_encrypted_errors.fastapi_endpoint_form_view
msgid "Generate Secret Key"
msgstr ""

#. module: fastapi_encrypted_errors
#: model:ir.model.fields,field_description:fastapi_encrypted_errors.field_wizard_fastapi_decrypt_errors__id
msgid "ID"
msgstr ""

#. module: fastapi_encrypted_errors
#: model_terms:ir.ui.view,arch_db:fastapi_encrypted_errors.wizard_fastapi_decrypt_errors_view_form
msgid "Label"
msgstr ""

#. module: fastapi_encrypted_errors
#: model:ir.model.fields,field_description:fastapi_encrypted_errors.field_wizard_fastapi_decrypt_errors____last_update
msgid "Last Modified on"
msgstr ""

#. module: fastapi_encrypted_errors
#: model:ir.model.fields,field_description:fastapi_encrypted_errors.field_wizard_fastapi_decrypt_errors__write_uid
msgid "Last Updated by"
msgstr ""

#. module: fastapi_encrypted_errors
#: model:ir.model.fields,field_description:fastapi_encrypted_errors.field_wizard_fastapi_decrypt_errors__write_date
msgid "Last Updated on"
msgstr ""

#. module: fastapi_encrypted_errors
#: model:ir.model.fields,help:fastapi_encrypted_errors.field_fastapi_endpoint__encrypted_errors_secret_key
msgid ""
"The secret key used to encrypt errors before sending them to the client."
msgstr ""

#. module: fastapi_encrypted_errors
#: model:ir.model,name:fastapi_encrypted_errors.model_wizard_fastapi_decrypt_errors
msgid "Wizard to decrypt FastAPI errors"
msgstr ""
Loading