Skip to content

Commit e499e36

Browse files
authored
Merge pull request #63 from chadgates/feature/mdn_message_id
Use orig_message_id as Message ID for MDN if no message_id was provid…
2 parents 2402e1b + b61ac2d commit e499e36

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

pyas2/models.py

+12-4
Original file line numberDiff line numberDiff line change
@@ -531,13 +531,21 @@ class MdnManager(models.Manager):
531531
def create_from_as2mdn(self, as2mdn, message, status, return_url=None):
532532
"""Create the MDN from the pyas2lib's MDN object"""
533533
signed = True if as2mdn.digest_alg else False
534+
535+
# Check for message-id in MDN.
536+
if as2mdn.message_id is None:
537+
message_id = as2mdn.orig_message_id
538+
logger.warning(
539+
f"Received MDN response without a message-id. Using original "
540+
f"message-id as ID instead: {message_id}"
541+
)
542+
else:
543+
message_id = as2mdn.message_id
544+
534545
mdn, _ = self.update_or_create(
535546
message=message,
536547
defaults=dict(
537-
mdn_id=as2mdn.message_id,
538-
status=status,
539-
signed=signed,
540-
return_url=return_url,
548+
mdn_id=message_id, status=status, signed=signed, return_url=return_url,
541549
),
542550
)
543551
filename = f"{uuid4()}.mdn"

pyas2/tests/test_advanced.py

+26
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from django.test import Client, override_settings
66
from django.test import TestCase
77
from pyas2lib import Message as As2Message
8+
from pyas2lib import Mdn as As2Mdn
89

910
from pyas2 import settings
1011
from pyas2.models import Message
@@ -422,6 +423,31 @@ def test_signature_error(self):
422423
"Failed to verify message signature" in out_message.detailed_status
423424
)
424425

426+
def test_missing_message_id(self):
427+
# Create the client partner and send the command
428+
partner = Partner.objects.create(
429+
name="AS2 Server",
430+
as2_name="as2server",
431+
target_url="http://localhost:8080/pyas2/as2receive",
432+
signature="sha1",
433+
signature_cert=self.server_crt,
434+
encryption="tripledes_192_cbc",
435+
encryption_cert=self.server_crt,
436+
mdn=True,
437+
mdn_mode="ASYNC",
438+
mdn_sign="sha1",
439+
)
440+
out_message = self.build_and_send(partner)
441+
442+
# Create MDN object without message_id
443+
in_message = As2Mdn()
444+
in_message.orig_message_id = out_message.message_id
445+
in_message.message_id = None
446+
mdn_message = Mdn.objects.create_from_as2mdn(in_message, out_message, "R")
447+
448+
# Check that original message id was used to store mdn_id
449+
self.assertEqual(mdn_message.mdn_id, out_message.message_id)
450+
425451
@mock.patch("requests.post")
426452
def build_and_send(self, partner, mock_request, smudge=False):
427453
# Build and send the message to server

0 commit comments

Comments
 (0)