Skip to content

Commit 212403c

Browse files
authored
Merge pull request #311 from amen50/17.0-1.3
update jwt signature in api calls
2 parents 14e27f8 + 681aee5 commit 212403c

3 files changed

Lines changed: 67 additions & 38 deletions

File tree

g2p_bridge_configuration/models/payment_manager.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import requests
55

66
from odoo import fields, models
7+
from odoo.exceptions import ValidationError
78

89
_logger = logging.getLogger(__name__)
910

@@ -15,18 +16,11 @@ class G2PPaymentManagerG2PConnect(models.Model):
1516
sponsoring_bank = fields.Many2one("g2p.sponsoring.bank.account", required=False)
1617
sent_to_bridge = fields.Boolean(default=False)
1718

18-
def create_jwt_token(self, payload: dict):
19-
self.ensure_one()
20-
enc_provider = self.get_encryption_provider()
21-
token = enc_provider.jwt_sign(payload, include_payload=False)
22-
return token
23-
2419
def publish_bridge_benefit_program(self):
2520
self.ensure_one()
2621
try:
2722
url = self.program_creation_endpoint_url
2823
data = {
29-
"signature": "string",
3024
"header": {
3125
"version": "1.0.0",
3226
"message_id": "string",
@@ -51,7 +45,8 @@ def publish_bridge_benefit_program(self):
5145
"id_mapper_resolution_required": True,
5246
},
5347
}
54-
token = self.create_jwt_token(data)
48+
49+
token = self.create_jwt_token(json.dumps(data, separators=(",", ":")))
5550
headers = {
5651
"Accept": "application/json",
5752
"Content-Type": "application/json",
@@ -60,7 +55,13 @@ def publish_bridge_benefit_program(self):
6055
response = requests.post(url, data=json.dumps(data), headers=headers, timeout=self.api_timeout)
6156
response.raise_for_status()
6257
response_data = response.json()
58+
status = response_data.get("header", {}).get("status")
59+
reason = response_data.get("header", {}).get("status_reason_message")
6360
if response_data.get("header", {}).get("status") == "succ":
6461
self.sent_to_bridge = True
65-
except Exception as e:
66-
_logger.error("Error occurred on publishing sponsoring bank %s" % e)
62+
else:
63+
raise ValidationError(f"Request has the {status} status because of {reason}")
64+
65+
except Exception:
66+
_logger.exception("Error occurred on publishing sponsoring bank")
67+
raise

g2p_payment_g2p_connect/models/cycle.py

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
# Part of OpenG2P. See LICENSE file for full copyright and licensing details.
22

3+
import json
34
import logging
45

56
import requests
67

78
from odoo import _, fields, models
89
from odoo.exceptions import UserError
910

10-
from odoo.addons.g2p_programs.models import constants
11-
1211
_logger = logging.getLogger(__name__)
1312

1413

@@ -20,29 +19,36 @@ class G2PCycle(models.Model):
2019
def generate_summary(self):
2120
# Call the Disbursement Envelope Status API to get the latest details
2221
try:
23-
payment_manager = self.program_id.get_manager(constants.MANAGER_PAYMENT)
24-
response = requests.post(
25-
payment_manager.envelope_status_url,
26-
json={
27-
"signature": "string",
28-
"header": {
29-
"version": "1.0.0",
30-
"message_id": "string",
31-
"message_ts": "string",
32-
"action": "string",
33-
"sender_id": "string",
34-
"sender_uri": "",
35-
"receiver_id": "",
36-
"total_count": 0,
37-
"is_msg_encrypted": False,
38-
"meta": "string",
39-
},
40-
"message": self.disbursement_envelope_id,
22+
payment_manager = self.env["g2p.program.payment.manager.g2p.connect"].search([], limit=1)
23+
24+
data = {
25+
"header": {
26+
"version": "1.0.0",
27+
"message_id": "string",
28+
"message_ts": "string",
29+
"action": "string",
30+
"sender_id": payment_manager.sender_id,
31+
"sender_uri": "",
32+
"receiver_id": "",
33+
"total_count": 0,
34+
"is_msg_encrypted": False,
35+
"meta": "string",
4136
},
42-
timeout=10,
37+
"message": self.disbursement_envelope_id,
38+
}
39+
40+
token = payment_manager.create_jwt_token(json.dumps(data, separators=(",", ":")))
41+
headers = {
42+
"Accept": "application/json",
43+
"Content-Type": "application/json",
44+
"Signature": token,
45+
}
46+
response = requests.post(
47+
payment_manager.envelope_status_url, json=data, timeout=10, headers=headers
4348
)
4449
response.raise_for_status()
4550
data = response.json()
51+
4652
# Create new record for the summary report ( CycleEnvelopeSummary model)
4753
cycle_and_envelope_summary = self.env["g2p.cycle.envelope.summary"].create(
4854
{

g2p_payment_g2p_connect/models/payment_manager.py

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# Part of OpenG2P. See LICENSE file for full copyright and licensing details.
2+
import json
23
import logging
34
import os
45
from datetime import datetime, timedelta
@@ -87,6 +88,12 @@ class G2PPaymentManagerG2PConnect(models.Model):
8788
send_payments_domain = fields.Text("Filter Batches to Send", default="[]")
8889
sender_id = fields.Char("Sender ID", default=DEFAULT_SENDER_ID, required=False)
8990

91+
def create_jwt_token(self, payload: str):
92+
self.ensure_one()
93+
enc_provider = self.get_encryption_provider()
94+
token = enc_provider.jwt_sign(payload, include_payload=False)
95+
return token
96+
9097
@api.onchange("payee_id_type")
9198
def _onchange_payee_id_type(self):
9299
prefix_mapping = {
@@ -172,11 +179,14 @@ def _send_payments(self, batches):
172179
)
173180
try:
174181
_logger.info("G2P Bridge Disbursement Batch Data: %s", batch_data)
175-
182+
token = self.create_jwt_token(json.dumps(batch_data, separators=(",", ":")))
183+
headers = {
184+
"Accept": "application/json",
185+
"Content-Type": "application/json",
186+
"Signature": token,
187+
}
176188
response = requests.post(
177-
self.payment_endpoint_url,
178-
json=batch_data,
179-
timeout=self.api_timeout,
189+
self.payment_endpoint_url, json=batch_data, timeout=self.api_timeout, headers=headers
180190
)
181191
_logger.info("G2P Bridge Disbursement response: %s", response.content)
182192
response.raise_for_status()
@@ -242,7 +252,6 @@ def payments_status_check(self, id_):
242252
_logger.info(f"Payment for Status Check: {len(payments)}")
243253

244254
status_data = {
245-
"signature": "string",
246255
"header": {
247256
"version": "1.0.0",
248257
"message_id": "string",
@@ -259,11 +268,17 @@ def payments_status_check(self, id_):
259268
}
260269
try:
261270
_logger.info("G2P Connect Disbursement Status Data: %s", status_data)
262-
271+
token = self.create_jwt_token(json.dumps(status_data, separators=(",", ":")))
272+
headers = {
273+
"Accept": "application/json",
274+
"Content-Type": "application/json",
275+
"Signature": token,
276+
}
263277
res = requests.post(
264278
payment_manager.status_endpoint_url,
265279
json=status_data,
266280
timeout=payment_manager.api_timeout,
281+
headers=headers,
267282
)
268283
_logger.info("G2P Connect Disbursement Status response: %s", res.content)
269284
res.raise_for_status()
@@ -353,7 +368,7 @@ def _create_envelope_g2p_bridge(self, cycle):
353368
"version": "1.0.0",
354369
"message_id": "string",
355370
"message_ts": "string",
356-
"action": "string",
371+
"action": "create_disbursement_envelope",
357372
"sender_id": self.sender_id,
358373
"sender_uri": "",
359374
"receiver_id": "",
@@ -373,10 +388,17 @@ def _create_envelope_g2p_bridge(self, cycle):
373388
},
374389
}
375390
try:
391+
token = self.create_jwt_token(json.dumps(envelope_request_data, separators=(",", ":")))
392+
headers = {
393+
"Accept": "application/json",
394+
"Content-Type": "application/json",
395+
"Signature": token,
396+
}
376397
response = requests.post(
377398
self.envelope_creation_url,
378399
json=envelope_request_data,
379400
timeout=10,
401+
headers=headers,
380402
)
381403
# Store the id from respose to the model
382404
disbursement_envelope_id = response.json().get("message").get("disbursement_envelope_id")

0 commit comments

Comments
 (0)