From fda68f9e34e5021836169b0dd0f639d71ccd0a5f Mon Sep 17 00:00:00 2001 From: Florian Damhaut Date: Wed, 25 May 2022 11:30:30 +0000 Subject: [PATCH] [IMP] payment_ogone: add possibility to use sha256 SHA1 is going to be deprecated by ogone. This change try to keep current behaviour while adding the possibility to use SHA256 and SHA512 via a Selection field available in the developer mode. opw-2766648 X-original-commit: b0df4af See also: - https://github.com/odoo/upgrade/pull/3490 - https://github.com/odoo/documentation/pull/1902 closes odoo/odoo#88628 Related: odoo/documentation#1902 Related: odoo/upgrade#3490 Signed-off-by: Nicolas Lempereur (nle) Signed-off-by: Antoine Vandevenne (anv) --- addons/payment_ogone/models/payment_acquirer.py | 10 ++++++++-- addons/payment_ogone/tests/common.py | 1 + addons/payment_ogone/views/payment_views.xml | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/addons/payment_ogone/models/payment_acquirer.py b/addons/payment_ogone/models/payment_acquirer.py index bebfafcfc74..3f58482e903 100644 --- a/addons/payment_ogone/models/payment_acquirer.py +++ b/addons/payment_ogone/models/payment_acquirer.py @@ -1,7 +1,7 @@ # Part of Odoo. See LICENSE file for full copyright and licensing details. import logging -from hashlib import sha1 +from hashlib import new as hashnew import requests @@ -30,6 +30,10 @@ class PaymentAcquirer(models.Model): string="SHA Key IN", required_if_provider='ogone', groups='base.group_system') ogone_shakey_out = fields.Char( string="SHA Key OUT", required_if_provider='ogone', groups='base.group_system') + ogone_hash_function = fields.Selection( + [('sha1', 'SHA1'), ('sha256', 'SHA256'), ('sha512', 'SHA512')], default='sha512', + string="Hash function", required_if_provider='ogone', + ) #=== COMPUTE METHODS ===# @@ -99,7 +103,9 @@ class PaymentAcquirer(models.Model): formatted_items = [(k.upper(), v) for k, v in values.items()] sorted_items = sorted(formatted_items) signing_string = ''.join(f'{k}={v}{key}' for k, v in sorted_items if _filter_key(k) and v) - return sha1(signing_string.encode()).hexdigest() + shasign = hashnew(self.ogone_hash_function) + shasign.update(signing_string.encode()) + return shasign.hexdigest() def _ogone_make_request(self, payload=None, method='POST'): """ Make a request to one of Ogone APIs. diff --git a/addons/payment_ogone/tests/common.py b/addons/payment_ogone/tests/common.py index 01c0a30083f..82079feffe6 100644 --- a/addons/payment_ogone/tests/common.py +++ b/addons/payment_ogone/tests/common.py @@ -15,6 +15,7 @@ class OgoneCommon(PaymentCommon): 'ogone_password': 'dummy', 'ogone_shakey_in': 'dummy', 'ogone_shakey_out': 'dummy', + 'ogone_hash_function': 'sha1', }) cls.acquirer = cls.ogone diff --git a/addons/payment_ogone/views/payment_views.xml b/addons/payment_ogone/views/payment_views.xml index db7cf624661..f08ed8d4569 100644 --- a/addons/payment_ogone/views/payment_views.xml +++ b/addons/payment_ogone/views/payment_views.xml @@ -13,6 +13,7 @@ +