Example #1
0
    def test_trace_error_info_with_unicode(self):
        agr = Agreement(id='A01')
        ctx = AS2Context(agr, None)

        ctx.trace_error(u'test {0} {1}', '123', '456')

        assert_equal(1, len(ctx.trace_info_list))
Example #2
0
    def send_async_mdn(self, message):
        agreement = self._get_agreement(message.agreement_id)

        context = AS2Context(agreement, message)

        mdn_headers, mdn_body = self._mdn_encode(context)

        if message.message_trace_list is None:
            message.message_trace_list = []
        if context.trace_info_list is not None:
            message.message_trace_list.extend(context.trace_info_list)

        message.message_mdn.edit_date = datetime.utcnow()
        message.edit_date = datetime.utcnow()

        CloudStoreHelper().save_document(message)

        resp = HttpHelper.post(agreement.inbound_agreement.async_mdn_url,
                               data=mdn_body,
                               headers=mdn_headers,
                               verify=False)

        status_code, received_headers, received_body = resp.status_code, dict(
            resp.headers), resp.content

        if status_code != requests.codes.ok:
            resp.raise_for_status()

        return message
Example #3
0
    def send(self):
        message = PartnerManager._create_send_message()
        context = None

        try:
            business_id, agreement_id, data_dfs_path = self._get_send_request()

            agreement = self._get_agreement(agreement_id)

            PartnerManager._build_send_message(message, business_id,
                                               data_dfs_path, agreement)

            context = AS2Context(agreement, message)

            data = self._get_send_data(data_dfs_path)

            received_headers, received_body = self._send_data(data, context)

            if agreement.outbound_agreement.mdn_mode == MdnMode.sync:
                self._receive_sync_mdn(received_headers, received_body,
                                       context)
        except:
            message.message_status = StatusType.failed
            message.memo = str(sys.exc_info()[1])
        finally:
            if context is not None:
                message.message_trace_list = context.trace_info_list
            mq_setting = ConfigurationHelper.get_mq_setting(
                'outbound_message_queue')
            headers = {
                'EventMessageKey':
                'N/A' if message.key is None else message.key,
                'LocalIdentity':
                'N/A'
                if message.local_identity is None else message.local_identity,
                'TradingIdentity':
                'N/A' if message.trading_identity is None else
                message.trading_identity,
                'Version':
                'N/A' if message.version is None else message.version
            }
            self.send_to_message_queue(
                mq_setting.queue_name,
                mq_setting.password,
                message,
                headers=headers,
                match_tag=mq_setting.serialization_match_tag)

        return message
Example #4
0
    def receive_async_mdn(self, agreement_id=None):
        if is_none_or_whitespace(agreement_id):
            headers = {
                k.lower().replace('_', '-'): v
                for k, v in self.headers.items()
            }
            trading_identity = decode_as2_identity(headers.get('as2-from', ''))
            local_identity = decode_as2_identity(headers.get('as2-to', ''))
            agreement = self._get_primary_agreement(local_identity,
                                                    trading_identity)
        else:
            agreement = self._get_agreement(agreement_id)

        context = AS2Context(agreement, None)

        self._receive_async_mdn(self.headers, self.body, context)
Example #5
0
    def _build_received_as2_context(self, id, message):
        if is_none_or_whitespace(id):
            headers = {
                k.lower().replace('_', '-'): v
                for k, v in self.headers.items()
            }
            trading_identity = decode_as2_identity(headers.get('as2-from', ''))
            local_identity = decode_as2_identity(headers.get('as2-to', ''))
            agreement = self._get_primary_agreement(local_identity,
                                                    trading_identity)
        else:
            agreement = self._get_agreement(id)

        message.local_identity = agreement.local_identity
        message.trading_identity = agreement.trading_identity
        message.agreement_id = agreement.id

        return AS2Context(agreement, message)
Example #6
0
    def test_trace_error_info_is_required(self):
        agr = Agreement(id='A01')
        ctx = AS2Context(agr, None)

        ctx.trace_error(None)
Example #7
0
 def test_Agreement_is_required(self):
     AS2Context(None, None)
Example #8
0
    def get_as2_context(self):
        pb_cert = Certificate(
            id="1",
            subject="AS2.SelfTesting.Newegg.com",
            thumbprint="B7A5ED759898822397CCCE96BD493D3203CE83AC",
            type=CertificateType.public,
            description="Newegg Production Test Cert",
            dfs_file_path=
            "http://neg-app-img/EaaS/Certificate/B7A5ED759898822397CCCE96BD493D3203CE83AC.cer",
            local_file_path=self._get_public_cert_path(
                "B7A5ED759898822397CCCE96BD493D3203CE83AC.pem"),
            dfs_ca_file_path=None,
            local_ca_file_path=None,
            pass_phrase=None,
            is_need_verify=True)

        pr_cert = Certificate(
            id="2",
            subject="Tp1 private",
            thumbprint="CB17BDDF500C14A049C3A18D6A292174B27F198E",
            type=CertificateType.private,
            description="TP1 private Cert",
            dfs_file_path=
            "http://neg-app-img/EaaS/Certificate/CB17BDDF500C14A049C3A18D6A292174B27F198E.cer",
            local_file_path=self._get_private_cert_path(
                "CB17BDDF500C14A049C3A18D6A292174B27F198E.pem"),
            dfs_ca_file_path=None,
            local_ca_file_path=None,
            pass_phrase="123456",
            is_need_verify=True)

        out_agr = OutboundAgreement(
            is_signed=True,
            is_compressed=False,
            is_encrypted=True,
            target_url="http://10.16.86.29:9009/as2-test/receive",
            message_encryption_certificate=pb_cert,
            message_encryption_algorithm=EncryptionAlgorithm.des_3,
            message_signature_certificate=pr_cert,
            message_signature_algorithm=SignatureAlgorithm.sha_1,
            message_content_type=MessageContentType.edi_x12,
            is_request_mdn=True,
            mdn_mode=MdnMode.sync,
            is_mdn_signed=True,
            mdn_signature_algorithm=SignatureAlgorithm.sha_1,
            async_mdn_url=None,
            disposition_notification_to="*****@*****.**")

        in_agr = InboundAgreement(
            is_signed=True,
            is_compressed=False,
            is_encrypted=True,
            message_decrypt_certificate=pr_cert,
            message_verify_certificate=pb_cert,
            message_content_type=MessageContentType.edi_x12,
            mdn_confirmation_text='',
            is_request_mdn=True,
            mdn_mode=MdnMode.sync,
            is_mdn_signed=True,
            mdn_signature_algorithm=SignatureAlgorithm.sha_1,
            async_mdn_url=None)

        agr = Agreement(id="1",
                        name="Tr_Newegg_Agreement_1",
                        is_primary=True,
                        local_identity="pyas2_01",
                        trading_identity="Newegg",
                        local_partner_id="1",
                        trading_partner_id="1",
                        inbound_agreement=in_agr,
                        outbound_agreement=out_agr,
                        status=AgreementStatus.active)

        as2_message = AS2Message(
            key="1",
            business_id="",
            message_id=email.utils.make_msgid().strip('<>'),
            direction="outbound")

        ctx = AS2Context(agr, as2_message)

        return ctx