Skip to content
Closed
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
2 changes: 1 addition & 1 deletion webservice/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
{
"name": "WebService",
"summary": """Defines webservice abstract definition to be used generally""",
"version": "19.0.1.1.2",
"version": "19.0.1.1.3",
"license": "AGPL-3",
"development_status": "Production/Stable",
"maintainers": ["etobella"],
Expand Down
56 changes: 56 additions & 0 deletions webservice/tests/test_oauth2.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import responses
from oauthlib.oauth2.rfc6749.errors import InvalidGrantError

from odoo.tests import Form

from .common import CommonWebService, mock_cursor


Expand Down Expand Up @@ -242,3 +244,57 @@ def test_fetch_token_from_auth(self):
json.loads(responses.calls[0].response.content.decode())["access_token"],
)
self.assertEqual("cool_token", token["access_token"])

def test_oauth2_flow_compute_with_ui(self):
"""Check the ``compute`` method when updating WS from UI"""
ws = self.webservice
url = self.url
form_xmlid = "webservice.webservice_backend_form_view"
for auth_type, oauth2_flow in [
(tp, fl)
for tp in ws._fields["auth_type"].get_values(ws.env)
for fl in ws._fields["oauth2_flow"].get_values(ws.env)
]:
next_ws_id = ws.sudo().search([], order="id desc", limit=1).id + 1
# Create a new WS with each ``auth_type/oauth2_flow`` couple through UI
with Form(ws.browse(), form_xmlid) as ws_form:
# Common fields
ws_form.name = "WebService Test UI"
ws_form.tech_name = f"webservice_test_ui_{next_ws_id}"
ws_form.protocol = "http"
ws_form.url = url
ws_form.content_type = "application/xml"
ws_form.auth_type = auth_type
# Auth type specific fields
if auth_type == "api_key":
ws_form.api_key = "Test Api Key"
ws_form.api_key_header = "Test Api Key Header"
if auth_type == "oauth2":
ws_form.oauth2_flow = oauth2_flow
ws_form.oauth2_clientid = "Test Client ID"
ws_form.oauth2_client_secret = "Test Client Secret"
ws_form.oauth2_token_url = f"{url}oauth2/token"
if auth_type == "user_pwd":
ws_form.username = "Test Username"
ws_form.password = "Test Password"
ws = ws_form.save()
# Check that ``oauth2_flow`` is the expected one after creation only if the
# ``auth_type`` is "oauth2", else it should be False
self.assertEqual(
ws.oauth2_flow, oauth2_flow if ws.auth_type == "oauth2" else False
)
# Change WS's ``auth_type`` through UI
with Form(ws, form_xmlid) as ws_form:
new_auth_type = "none" if ws.auth_type == "oauth2" else "oauth2"
ws_form.auth_type = new_auth_type
if new_auth_type == "oauth2":
ws_form.oauth2_flow = oauth2_flow
ws_form.oauth2_clientid = "Test Client ID"
ws_form.oauth2_client_secret = "Test Client Secret"
ws_form.oauth2_token_url = f"{url}oauth2/token"
ws = ws_form.save()
# Check that ``oauth2_flow`` is the expected one after update only if the
# ``auth_type`` is "oauth2", else it should be False
self.assertEqual(
ws.oauth2_flow, oauth2_flow if ws.auth_type == "oauth2" else False
)
13 changes: 13 additions & 0 deletions webservice/upgrades/19.0.1.1.3/post-update.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Copyright 2026 Camptocamp SA
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).

from openupgradelib import openupgrade


@openupgrade.migrate()
def migrate(env, version):
module = env["ir.module.module"].search(
[("name", "=", "webservice_environment"), ("state", "=", "uninstalled")]
)
if module:
module.button_install()
87 changes: 87 additions & 0 deletions webservice_environment/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
=============================
WebService Server Environment
=============================

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

.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
:target: https://odoo-community.org/page/development-status
:alt: Production/Stable
.. |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%2Fweb--api-lightgray.png?logo=github
:target: https://github.com/OCA/web-api/tree/18.0/webservice_environment
:alt: OCA/web-api
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/web-api-18-0/web-api-18-0-webservice_environment
: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/web-api&target_branch=18.0
:alt: Try me on Runboat

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

Glue module to make Server Environment features available for the
Webservice addon.

**Table of contents**

.. contents::
:local:

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

Bugs are tracked on `GitHub Issues <https://github.com/OCA/web-api/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/web-api/issues/new?body=module:%20webservice_environment%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
-------

* Creu Blanca
* Camptocamp

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

- Enric Tobella <etobella@creublanca.es>
- Daniel Reis <dreis@opensourceintegrators.com>

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-etobella| image:: https://github.com/etobella.png?size=40px
:target: https://github.com/etobella
:alt: etobella

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

|maintainer-etobella|

This module is part of the `OCA/web-api <https://github.com/OCA/web-api/tree/18.0/webservice_environment>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
1 change: 1 addition & 0 deletions webservice_environment/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
18 changes: 18 additions & 0 deletions webservice_environment/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright 2020 Creu Blanca
# Copyright 2022 Camptocamp SA
# @author Simone Orsi <simahawk@gmail.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).


{
"name": "WebService Server Environment",
"summary": "Use Server Environment feature to manage Webservice configs",
"version": "19.0.1.0.0",
"license": "AGPL-3",
"development_status": "Production/Stable",
"maintainers": ["etobella"],
"author": "Creu Blanca, Camptocamp, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/web-api",
"depends": ["webservice", "server_environment"],
"auto_install": True,
}
1 change: 1 addition & 0 deletions webservice_environment/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import webservice_backend
41 changes: 41 additions & 0 deletions webservice_environment/models/webservice_backend.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Copyright 2020 Creu Blanca
# Copyright 2022 Camptocamp SA
# @author Simone Orsi <simahawk@gmail.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import models


class WebserviceBackend(models.Model):
_name = "webservice.backend"
_inherit = ["webservice.backend", "server.env.techname.mixin", "server.env.mixin"]

@property
def _server_env_fields(self):
base_fields = super()._server_env_fields
webservice_fields = {
"protocol": {},
"url": {},
"auth_type": {},
"username": {},
"password": {},
"api_key": {},
"api_key_header": {},
"content_type": {},
"oauth2_flow": {},
"oauth2_scope": {},
"oauth2_clientid": {},
"oauth2_client_secret": {},
"oauth2_authorization_url": {},
"oauth2_token_url": {},
"oauth2_audience": {},
}
webservice_fields.update(base_fields)
return webservice_fields

def _compute_server_env(self):
# OVERRIDE: reset ``oauth2_flow`` when ``auth_type`` is not "oauth2", even if
# defined otherwise in server env vars
res = super()._compute_server_env()
self.filtered(lambda r: r.auth_type != "oauth2").oauth2_flow = None
return res
3 changes: 3 additions & 0 deletions webservice_environment/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"
2 changes: 2 additions & 0 deletions webservice_environment/readme/CONTRIBUTORS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- Enric Tobella \<<etobella@creublanca.es>\>
- Daniel Reis \<<dreis@opensourceintegrators.com>\>
2 changes: 2 additions & 0 deletions webservice_environment/readme/DESCRIPTION.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Glue module to make Server Environment features available for the
Webservice addon.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading