static void Main(string[] args) { const string toKibs = "<?xml version='1.0' encoding='utf-8'></soap:Envelope><soap:Envelope xmlns:mioa='http://mioa.gov.mk/interop/mim/v1' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns='http://www.slss.hr/' xmlns:soap='http://www.w3.org/2003/05/soap-envelope'><soap:Header><mioa:MIMHeader id='MIMHeader'><mioa:Consumer>CRRM</mioa:Consumer><mioa:Provider>AKN</mioa:Provider><mioa:RoutingToken>MIM1$$AKN</mioa:RoutingToken><mioa:Service>ImotenListParcela</mioa:Service><mioa:ServiceMethod>http://interop.org/IAKNService/GetPropertyList</mioa:ServiceMethod><mioa:TransactionId>a520132a-ff3d-40be-bb66-461a7421bb99</mioa:TransactionId><mioa:Dir>Response</mioa:Dir><mioa:PublicKey>MIIFbzCCBFegAwIBAgIQZhXzWJpQqIltlgMRd/SY3jANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJNSzEXMBUGA1UEChMOS0lCUyBBRCBTa29wamUxHzAdBgNVBAsTFkZPUiBURVNUIFBVUlBPU0VTIE9OTFkxGDAWBgNVBAMTD0tJQlMgVEVTVCBDQSBHMzAeFw0xNTEyMjkwMDAwMDBaFw0xNjEyMjgyMzU5NTlaMIGfMQ8wDQYDVQQLFAZPZGRlbDIxFTATBgNVBAoUDEluc3RpdHVjaWphMjEXMBUGA1UECxQORU1CUyAtIDU1Mjk1ODExHDAaBgNVBAsUE0VEQiAtIDQwMzAwMDE0MTYzMDkxCzAJBgNVBAYTAk1LMR8wHQYJKoZIhvcNAQkBFhBjYS1wb21vc0BraWJzLm1rMRAwDgYDVQQDDAdTZXJ2aXMyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw1K3qXeEQTIgCOGTFACx0aXfksfcVJ2NuQ072C7g9tiqGtGNHyJCnv9sXVvSHSpITP/igATGZcDr39Y6r3Hh9v1x2Cn5Ve4RDEXmcyiBs8Vr8QVE8iPfWD/hCCtcKsK4lK4AaGSOnDiHsnnrUDqxJJWChoivfSkUlkR02I4j/zVHUbiCaSpNrwCHPdYNaE3WeaVjn3SXqLRSg/a47TRTf8wUFoqP4pbXlQtK7Fq6ZhC/0OL3IqbLf5ApIe25Fvo8UwqAdGj04PFzQuYZYZkDceNg0UfMC7GbAlFYwfZxdlWIgWs7h6d0g68GqJkL3Mao8f6iQ/jrzQnK5ykHboZi6QIDAQABo4IB4jCCAd4wCQYDVR0TBAIwADCBvwYDVR0gBIG3MIG0MEMGC2CGSAGG+EUBBxcCMDQwMgYIKwYBBQUHAgEWJmh0dHA6Ly93d3cua2lic3RydXN0Lm1rL3JlcG9zaXRvcnkvY3BzMG0GBgQAizABAjBjMGEGCCsGAQUFBwICMFUaU092YSBlIGt2YWxpZmlrdXZhbiBzZXJ0aWZpa2F0IHphIGVsZWt0cm9uc2tpIHBlY2hhdCBzb2dsYXNubyBFdnJvcHNrYXRhIFJlZ3VsYXRpdmEuME4GA1UdHwRHMEUwQ6BBoD+GPWh0dHA6Ly9jcmwtdGVzdC5hZGFjb20uY29tL0tJQlNBRFNrb3BqZVRlc3RDQUczL0xhdGVzdENSTC5jcmwwCwYDVR0PBAQDAgTwMB0GA1UdDgQWBBSsusmmdC7Kx4yrV3cUB2ILbcRuCjAfBgNVHSMEGDAWgBQ00QpTasVWIdkKx8aUuJG7utGnYjA7BgNVHSUENDAyBggrBgEFBQcDAgYIKwYBBQUHAwQGCCsGAQUFBwMFBggrBgEFBQcDBgYIKwYBBQUHAwcwGwYDVR0RBBQwEoEQY2EtcG9tb3NAa2licy5tazAYBggrBgEFBQcBAwQMMAowCAYGBACORgEBMA0GCSqGSIb3DQEBCwUAA4IBAQAktJuurhytKYFPB9n4WfgGc5hw7FXl7IHjX0MdNIpURQ22j5emh1DrPWnjswREIU3bloCUksCnSSAOCM1U5BM8VqvFtjyn4AXef/+5pIFyNivqMVOWD3F+Qqe/OzIQYHnw9Dcy7BM2o30aEjeLjKnI1OlZgDWiHF4EnqEuoi5DbOtQx0YdrnTcimD4FlHow1AjMbnvcV8FFRRbm9IhB9Bp5wC35AX4EiahUBqsy39585pp6v7aySqqbN1UfCtLah9f9rTWhJh5qrrxBG0ahP6BRx0D015pG3oCyraopIcfodEdtVXvbQJLrNmCHJaKMVo1P2O0GfiArnDO4YmAFwdQ</mioa:PublicKey><mioa:MimeType>application/soap+xml; charset=utf-8</mioa:MimeType><mioa:TimeStamp>2016-06-21T06:44:13</mioa:TimeStamp><mioa:CorrelationID /><mioa:CallType>synchronous</mioa:CallType><Signature xmlns='http://www.w3.org/2000/09/xmldsig#'><SignedInfo><CanonicalizationMethod Algorithm='http://www.w3.org/TR/2001/REC-xml-c14n-20010315' /><SignatureMethod Algorithm='http://www.w3.org/2000/09/xmldsig#rsa-sha1' /><Reference URI='#MIMHeader'><Transforms><Transform Algorithm='http://www.w3.org/2000/09/xmldsig#enveloped-signature' /><Transform Algorithm='http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments' /></Transforms><DigestMethod Algorithm='http://www.w3.org/2000/09/xmldsig#sha1' /><DigestValue>zvYxpBGrW6KpmTt0fAkakoDh9/I=</DigestValue></Reference><Reference URI='#MIMBody'><Transforms><Transform Algorithm='http://www.w3.org/2000/09/xmldsig#enveloped-signature' /><Transform Algorithm='http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments' /></Transforms><DigestMethod Algorithm='http://www.w3.org/2000/09/xmldsig#sha1' /><DigestValue>gSytOCV4rzg++q2oGZHQXRhVBh4=</DigestValue></Reference></SignedInfo><SignatureValue>h+L6Ck7MIH0lHif08jZ1ZUszjKdwQFv1E3BALlHO8s4KJDPPrjMD1WKOE7UkHBPjN66K/ywhwZ38jM2bQJ/36VXIeq6XF+/fG1wuwsOf2rYwH5e9uOH4qzAprezJJ1vgdOQf25iSIdvl/zZHZ7R+5VI7NAt4xoXASYwNtDkHarVeywnH8SHVWL5/OM2Oe9tF9ehGH46duxvCCknZ+PimssJt+Vpwxa0i9kO/a+LD7q+S3FMvIOWfnN/G16Syvfr0kGERZge8DD0Wx0HOUKxWy1xteakiqCAJPtrBqsFQIYtZt4lKJ0bUHG3S9WeNlUJUgAUCFtJMi8oQNIiYcX2PXQ==</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIFTTCCBDWgAwIBAgIQdmiILXAJhrJyVtFIEhZ5zTANBgkqhkiG9w0BAQUFADCBpTELMAkGA1UEBhMCTUsxFzAVBgNVBAoTDktJQlMgQUQgU2tvcGplMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTUwMwYDVQQLEyxDbGFzcyAyIE1hbmFnZWQgUEtJIEluZGl2aWR1YWwgU3Vic2NyaWJlciBDQTElMCMGA1UEAxMcS0lCUyBDZXJ0aWZpY2F0ZSBTZXJ2aWNlcyBDQTAeFw0xNjAxMjkwMDAwMDBaFw0xOTAxMjgyMzU5NTlaMIHBMQswCQYDVQQGEwJNSzEXMBUGA1UECxQORU1CUyAtIDQwNjU5MzAxHDAaBgNVBAsUE0VEQiAtIDQwMzA5OTAyNTQ1MzMxNTAzBgNVBAoULEFnZW5jaWphIHphIGthdGFzdGFyIG5hIG5lZHZpem5vc3RpIC0gU2tvcGplMSgwJgYJKoZIhvcNAQkBFhlnLm5pa29sb3ZAa2F0YXN0YXIuZ292Lm1rMRowGAYDVQQDDBFJbnRlcm9wZXJhYmlsbm9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMfRLODhOvjb4eTA/for3/yrgjLm7bfsKBGl4/1WE4A3TeT9N8gk8DofP0RKbvIHz5PY8sV7RGeIuEzJtRNpl/0dxT5HSpIoz6IAeG+GHYWwrKblbQAlPl+mYz40xdgYEzqYabqVvv7zW+JCex3DKtn4fosK2+8TRM2cZokNiJbyyLrjkjTBVKL4RrAPoAmEleOE+6xSc8Pl0Aqyj6Y/LlA7Sjz526AwcmxgXM5JlJEKjCrfd8QfQyMmku/FqdTIF0lxYwBkMX6mFJ5BZwSHDEandhx7T0r3qKsCWBRy/zhC7sa034TSZP+oI6YSM8XkVayzibnKJJM72inovLXzlhUCAwEAAaOCAVkwggFVMAkGA1UdEwQCMAAwTQYDVR0gBEYwRDBCBgtghkgBhvhFAQcXAjAzMDEGCCsGAQUFBwIBFiVodHRwczovL2NhLmtpYnMuY29tLm1rL3JlcG9zaXRvcnkvY3BzMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jYS5raWJzLmNvbS5tay9jcmwvVmVyYmFOUS5jcmwwCwYDVR0PBAQDAgTwMB0GA1UdDgQWBBSyOD7M2FIpV/MwHzz0DHpk9pD+qjAfBgNVHSMEGDAWgBTcpNDjYmqaTPtZJZUxbo/S0W4Q2zA7BgNVHSUENDAyBggrBgEFBQcDAgYIKwYBBQUHAwQGCCsGAQUFBwMFBggrBgEFBQcDBgYIKwYBBQUHAwcwJAYDVR0RBB0wG4EZZy5uaWtvbG92QGthdGFzdGFyLmdvdi5tazARBglghkgBhvhCAQEEBAMCB4AwDQYJKoZIhvcNAQEFBQADggEBACk02ThregQBU8qvssaQKPZHkMy2lnO8CwnlXBsR/dJ4EASfrJPJ8FofqqNIh9mrmWvAFOZR5juYK4a+MgJZB+j7z9pBo5BwPCUzEK1+SXJJRbsBP2saP9pi0E6Gpz3Aoy2AfNFfEmRVm2QqrW1TYN6Nw8SVDaM1I0ffpuhP/Li7kdRdzFscqikPXA8hd29eiYh4yXk4XZ7efbtVRcCuDF/R0iIfNIT2kLbqh7TpYXLgkLBJNVMwM+D/tXitO+g1o9+ZKosKEw3RYFlMm2Hd96GoKoaTIS5xaQcdX1qbhNPi0WRHetgC2ZijHkTkLyCBd15LsYar0CpWK2jz0as5gwQ=</X509Certificate></X509Data></KeyInfo></Signature></mioa:MIMHeader><mioa:MIMadditionalHeader><mioa:Status>200</mioa:Status><mioa:StatusMessage>OK</mioa:StatusMessage><mioa:ProviderEndpointUrl /><mioa:ExternalEndpointUrl /><mioa:WebServiceUrl /><mioa:ConsumerBusCode /><mioa:TimeStampToken>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</mioa:TimeStampToken><mioa:IsInteropTestCommunicationCall>false</mioa:IsInteropTestCommunicationCall></mioa:MIMadditionalHeader><mioa:CryptoHeader><mioa:Key>g9yhhITzfP/70LIZvIdpoZxHqldzKg/+KH3yVSbIfrf/AJtF0CQMNpEzUmDrbWCVD0DwnkHnw1Nq2IjSNCzUZPi9oUVZbgzwfLdBJm5L9XpReH9oi5QDzZh6B/EGRGfL/IkJGUt5zMxkUU+DYqvsVH/Y3Gep1Jeb3cF9CJclTYiTtU+c6o8PUVb6BdviRDueeyP+Jpdq4BrsxRbs4kbpCyPvk42dYhIcoXyyuyi9uA4JstypcdOgRXyyN3Qcva+JLwaEGrAiYchtBxWaFkKd+VBXyqrq75bgVHd+dh+YJBzCPw/EfFjWNZHGPMt1oXVmq/0lHNQFYhJ4aRX89LZTwA==</mioa:Key><mioa:InitializationVector>f28g12aq1rTqrJpqGLLkwg==</mioa:InitializationVector><mioa:FormatValue>AES</mioa:FormatValue></mioa:CryptoHeader></soap:Header><soap:Body><mioa:MIMBody id='MIMBody'><mioa:Message>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</mioa:Message></mioa:MIMBody></soap:Body></soap:Envelope>"; string btResponseToKibs = "<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:mioa='http://mioa.gov.mk/interop/mim/v1' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns='http://www.slss.hr/' xmlns:soap='http://www.w3.org/2003/05/soap-envelope'><soap:Header><mioa:MIMHeader id='MIMHeader'><mioa:Consumer>CURM</mioa:Consumer><mioa:Provider>CRRM</mioa:Provider><mioa:RoutingToken>MIM1$$CRRM</mioa:RoutingToken><mioa:Service>TekovnaSostojbaCURM</mioa:Service><mioa:ServiceMethod>http://interop.org/ICRM_TS_CURM/Get_TS_CURM</mioa:ServiceMethod><mioa:TransactionId>9589adc8-76fe-486d-b003-aa5b20bdd6e3</mioa:TransactionId><mioa:Dir>Response</mioa:Dir><mioa:PublicKey>MIIFZjCCBE6gAwIBAgIQXi527mgOzqeUzns90z++4zANBgkqhkiG9w0BAQUFADCBpTELMAkGA1UEBhMCTUsxFzAVBgNVBAoTDktJQlMgQUQgU2tvcGplMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTUwMwYDVQQLEyxDbGFzcyAyIE1hbmFnZWQgUEtJIEluZGl2aWR1YWwgU3Vic2NyaWJlciBDQTElMCMGA1UEAxMcS0lCUyBDZXJ0aWZpY2F0ZSBTZXJ2aWNlcyBDQTAeFw0xNjAyMDEwMDAwMDBaFw0xOTAxMzEyMzU5NTlaMIHUMQswCQYDVQQGEwJNSzEXMBUGA1UECxQORU1CUyAtIDQ2NDE2NTUxHDAaBgNVBAsUE0VEQiAtIDQwMzA5OTIyMjgwMTcxQjBABgNVBAoUOU1pbmlzdGVyc3R2byB6YSBmaW5hbnNpaSAtIENhcmluc2thIHVwcmF2YSBuYSBSTSAtIFNrb3BqZTEuMCwGCSqGSIb3DQEJARYfem9yaWNhLmFzaWtvdnNrYUBjdXN0b21zLmdvdi5tazEaMBgGA1UEAwwRSW50ZXJvcGVyYWJpbG5vc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDf2/1/JqNA5i8d3d1wx8EvJwQnlQHcujxsx4TRooxlk2wgHJ/1hLM6EkTXGwqBUbxak6stoE/9HAnsrywWVvnftjDTPLw39pOuoTCEU2E4c4SrJRmCMz73QD6XZ3SpsZGXHRX9OwE2ql/tUt5YIBmZC5kviSmovis/qsW2OF7I0pLbjyQpnGOoJAAZfUtnbuI+XSa75tmIbr40NenmaxeOrSQOunFU/kCNETkIbjN6um82YOWuNWqqDJngy4ur1NumGlj3Fvy37iY/G+frzVUs6qXmZxdKux+QDzv843OEWqS6oDoFID3gP7fI5B8fLZQpOVbMcwgIAHeqfJZiCp11AgMBAAGjggFfMIIBWzAJBgNVHRMEAjAAME0GA1UdIARGMEQwQgYLYIZIAYb4RQEHFwIwMzAxBggrBgEFBQcCARYlaHR0cHM6Ly9jYS5raWJzLmNvbS5tay9yZXBvc2l0b3J5L2NwczA2BgNVHR8ELzAtMCugKaAnhiVodHRwOi8vY2Eua2licy5jb20ubWsvY3JsL1ZlcmJhTlEuY3JsMAsGA1UdDwQEAwIE8DAdBgNVHQ4EFgQU0rEDjKv13GKif/s+4Y501JXBZC4wHwYDVR0jBBgwFoAU3KTQ42Jqmkz7WSWVMW6P0tFuENswOwYDVR0lBDQwMgYIKwYBBQUHAwIGCCsGAQUFBwMEBggrBgEFBQcDBQYIKwYBBQUHAwYGCCsGAQUFBwMHMCoGA1UdEQQjMCGBH3pvcmljYS5hc2lrb3Zza2FAY3VzdG9tcy5nb3YubWswEQYJYIZIAYb4QgEBBAQDAgeAMA0GCSqGSIb3DQEBBQUAA4IBAQAb4+dISuqkc5qTATwkEf2ydkYEf8q0fuLBTSC6Pqt99YBXQ/cmMkEnDaEjrYnuZeE7Gi6LUiYmFH4iLgsyMoIihhhfLi7XJcBcDEK3BMsltz04W7znXk1d9tVpDht2x2lEUSQ0ZhT1nCSPf70QVKm7VditnAs6jqv4GzTkzUk4xyTnX/59Z0AKx4lV10zE/jsZZnMp1OOLhaeH60I9Ay+QXrhmSfWl01NGIepyslqzTBgnumF2N/bkqjia8CFowx+5f8d0w36Xe02GcIs3CoGvP3qzRnhz85bB/e6wsTwF/7dF6Sa+iJqNmSMTkbV7WUHnyUohT8tm4z/iD5mIuahU</mioa:PublicKey><mioa:MimeType>application/soap+xml; charset=utf-8</mioa:MimeType><mioa:TimeStamp>2016-09-15T16:11:17</mioa:TimeStamp><mioa:CorrelationID /><mioa:CallType>synchronous</mioa:CallType><Signature xmlns='http://www.w3.org/2000/09/xmldsig#'><SignedInfo><CanonicalizationMethod Algorithm='http://www.w3.org/TR/2001/REC-xml-c14n-20010315' /><SignatureMethod Algorithm='http://www.w3.org/2000/09/xmldsig#rsa-sha1' /><Reference URI='#MIMHeader'><Transforms><Transform Algorithm='http://www.w3.org/2000/09/xmldsig#enveloped-signature' /><Transform Algorithm='http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments' /></Transforms><DigestMethod Algorithm='http://www.w3.org/2000/09/xmldsig#sha1' /><DigestValue>uUMhnp220SJZsYjTHVy+tJ8kdvE=</DigestValue></Reference><Reference URI='#MIMBody'><Transforms><Transform Algorithm='http://www.w3.org/2000/09/xmldsig#enveloped-signature' /><Transform Algorithm='http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments' /></Transforms><DigestMethod Algorithm='http://www.w3.org/2000/09/xmldsig#sha1' /><DigestValue>KYlfJH8jTTWr7Ze69JjQOsdVlZE=</DigestValue></Reference></SignedInfo><SignatureValue>L7mMLsYcCF8/kn7xN/fHAsh0kK2W0ZYwjyXroyXgVrOuYlqm5HI9aaG/l5TsUwNhntUF8vcR3kHqYc4f3O10T+Dehj6FV53i+Aw5mMSQfqLSVBNtf6eR84bZCCVJ+V0tpGyIigytMoEQBP5pYqGQhZq5KxyOUwijRdSynaR6RImFKYGobnDfAvdwYoUXJIfg974+lb31xMJFnqzTBf2EQkRiNGncXssc4zper+BNNP9GG2Vh1q2JO9pwc3dfPssFJlDo1EK2zMZ5bclGLUJD43nepmtL9jvUSVj7FqJYFbEBtN4n3bzSN/O26cW5jkql2IGPH+2xxPUBVo0fzz3eWQ==</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIFRjCCBC6gAwIBAgIQbZxYJIthD9DGCRXt3WsvgzANBgkqhkiG9w0BAQUFADCBpTELMAkGA1UEBhMCTUsxFzAVBgNVBAoTDktJQlMgQUQgU2tvcGplMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTUwMwYDVQQLEyxDbGFzcyAyIE1hbmFnZWQgUEtJIEluZGl2aWR1YWwgU3Vic2NyaWJlciBDQTElMCMGA1UEAxMcS0lCUyBDZXJ0aWZpY2F0ZSBTZXJ2aWNlcyBDQTAeFw0xNjAyMDMwMDAwMDBaFw0xOTAyMDIyMzU5NTlaMIHBMQswCQYDVQQGEwJNSzEXMBUGA1UECxQORU1CUyAtIDU1NDk4NTAxHDAaBgNVBAsUE0VEQiAtIDQwMzAwMDE0MjU0ODAxPDA6BgNVBAoUM0NlbnRyYWxlbiByZWdpc3RhciBuYSBSZXB1Ymxpa2EgTWFrZWRvbmlqYSAtIFNrb3BqZTEhMB8GCSqGSIb3DQEJARYSY3JfaW5mb0Bjcm0ub3JnLm1rMRowGAYDVQQDDBFJbnRlcm9wZXJhYmlsbm9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAI1rtEclw8XbXoqaHOCsdMrFuSjHaBXBv0QOJizmKuAAr//RlqiVAecDKOuXBulx4P3nFfreNZZZKq23Cea+CC/obPcnWf5SZh6K7f0bNMuv3dw0YN7M9hpMuF8B3TcX9ysoP0UL5ISp2Xi685vcNzJqleK7gEj5t/+hxpsADgsvJ2ji+6sgHjfIunu9T8447wLLWQH8drI8pFVsK0+pFIkb26ezQGRo4Ft0IWLEnldoA4KDqbUYaqPV7QLMu83Ev8XI7oUO5crpczszHp7q8ab6VMh662Eu4zpy2tLhDL3ndLVLG6+5IGyBbvqyVIjWae61TFpqQ7qfDp2s8mEkFI8CAwEAAaOCAVIwggFOMAkGA1UdEwQCMAAwTQYDVR0gBEYwRDBCBgtghkgBhvhFAQcXAjAzMDEGCCsGAQUFBwIBFiVodHRwczovL2NhLmtpYnMuY29tLm1rL3JlcG9zaXRvcnkvY3BzMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jYS5raWJzLmNvbS5tay9jcmwvVmVyYmFOUS5jcmwwCwYDVR0PBAQDAgTwMB0GA1UdDgQWBBR+GE8DzFoY8tJwitBXQSAww817jjAfBgNVHSMEGDAWgBTcpNDjYmqaTPtZJZUxbo/S0W4Q2zA7BgNVHSUENDAyBggrBgEFBQcDAgYIKwYBBQUHAwQGCCsGAQUFBwMFBggrBgEFBQcDBgYIKwYBBQUHAwcwHQYDVR0RBBYwFIESY3JfaW5mb0Bjcm0ub3JnLm1rMBEGCWCGSAGG+EIBAQQEAwIHgDANBgkqhkiG9w0BAQUFAAOCAQEAeBATgwop7mBdM/l5JDhD9LxjBpd7bq28NXmsZ2oSXNNZaSMwo9F1wD8b5tX1fp8HNFQyJGGm1cGxGGSLQ7eGAJeO5eCTpZitDApD96PbdAvTVrNmRDf4IXpgoUfg8TkW11L5+RK3EgaVp0o6LOyqfJr/BqKeDzY0smJgv7JHDeWHqKNRpmaytW7W84tR7M6P1CuLqVkplZmuLbi6A3uefZB6c7ZcUlaBTQsS1JPpPpyQ3F4aJJN5QKf1lYr/AAqOhwRVSVzNLQmzo3yUQf2wkpzat9Omdi4yHSs01Ttrj4maLA5kAtIXyp3CSg5zbjBFrAbeQ7Y+tdYkkOa050fLhg==</X509Certificate></X509Data></KeyInfo></Signature></mioa:MIMHeader><mioa:MIMadditionalHeader><mioa:Status>200</mioa:Status><mioa:StatusMessage>OK</mioa:StatusMessage><mioa:ProviderEndpointUrl /><mioa:ExternalEndpointUrl /><mioa:WebServiceUrl /><mioa:ConsumerBusCode /><mioa:TimeStampToken>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</mioa:TimeStampToken><mioa:IsInteropTestCommunicationCall>false</mioa:IsInteropTestCommunicationCall></mioa:MIMadditionalHeader><mioa:CryptoHeader><mioa:Key>pExJgMBufRAwvLpv4q8OanVM3DMMOzcV/9ZUdWRjsRvmDi3z7g1qMW2/23ohePnJFym6PB4TiqDfff6ewlLhtLM9CDqJPMIedKQiVFzH+ZKBY3vdwkQthtLTHsrZnghkdtinUdzLoUH5bxqPv7zgKWFmoRIrdM8UcMOdaWJju1d8lRe88IwMP9xfjSrs/uWH3EJNPkzxgP6RKbAuqnxuLmDmHqaPY3/vHjbCGmQc0g7K8zXou4QYSFeQMBLs48LQSR2eAj/o7t/REW3mZO3YRLqh4To71CXQBRMGFJ3bNEZfShs806iFmA6Ddkeu9GJGyzdswIUTDE/VoWwOCAZ+RQ==</mioa:Key><mioa:InitializationVector>lxCtHA8ub7p8vOwqQrSiTw==</mioa:InitializationVector><mioa:FormatValue>AES</mioa:FormatValue></mioa:CryptoHeader></soap:Header><soap:Body><mioa:MIMBody id='MIMBody'><mioa:Message>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</mioa:Message></mioa:MIMBody></soap:Body></soap:Envelope>"; var fromFile = AppSettings.Get <bool>("FromFile"); if (fromFile) { var path = Directory.GetCurrentDirectory() + @"\Files\1Mb.txt"; if (File.Exists(path)) { TextReader textReader = File.OpenText(path); btResponseToKibs = textReader.ReadToEnd(); } } try { //Testen KIBS servis Console.WriteLine("Before KIBS " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt")); KIBSResponse resultkibsAfterBt = KIBS.KIBS.GenerateTimeStamp(btResponseToKibs); Console.WriteLine("After KIBS " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt")); Console.WriteLine("Kibs vrati timestamp? " + resultkibsAfterBt.IsSuccessful); Console.WriteLine("Kibs timestamp: " + resultkibsAfterBt.TimeStamp); Console.WriteLine("Kibs hash: " + resultkibsAfterBt.Hash); //Produkciski KIBS servis //KIBSResponse resultProd = KIBS.KIBS.GenerateTimeStampProduction(btResponseToKibs); //Console.WriteLine("Kibs vrati timestamp " + resultProd.IsSuccessful); //Console.WriteLine("Kibs timestamp: " + resultProd.TimeStamp); //var has = resultProd.Hash; //byte[] bytData = Encoding.UTF8.GetBytes(has); //string hashPassword = System.Text.Encoding.UTF8.GetString(bytData); } catch (WebException exception) { Console.WriteLine("Exception response: " + exception.Response.ResponseUri); Console.WriteLine("Status: " + exception.Status); Console.WriteLine("Dosol vo web exception"); Console.WriteLine(exception); Console.WriteLine(exception.Message); Console.WriteLine(exception.InnerException); } catch (Exception exception) { Console.WriteLine("Dosol vo exception"); Console.WriteLine(exception); Console.WriteLine(exception.Message); } Console.ReadLine(); }
// Опис: Метод кој овозможува процесирање на НТТР Web повици // Влезни параметри: HttpContext context // Излезни параметри: / public void ProcessRequest(HttpContext context) { var transactionId = Guid.NewGuid(); var validTId = true; try { var urlSegments = _requestHelper.GetUrlSegments(context.Request.RawUrl); _logger.Info("context.Request.RawUrl: " + context.Request.RawUrl); const string ourMim = "MIM1$$"; const string secoundMim = "MIM2$$"; bool routingTokenContainOurMim = urlSegments.RoutingToken.Contains(ourMim); //_logger.Info("Go sodrzi nasiot Mim: " + routingTokenContainOurMim); bool routingTokenContainsSecoundMim = urlSegments.RoutingToken.Contains(secoundMim); //_logger.Info("Go sodrzi vtoriot Mim: " + routingTokenContainsSecoundMim); if (!routingTokenContainOurMim && !routingTokenContainsSecoundMim) { //Dodavame MIM1$$ na RountingToken ako istiot nema urlSegments.RoutingToken = "MIM1$$" + urlSegments.RoutingToken; //_logger.Info("Nas mim e, treba da dodade i sea Routing token e: " + urlSegments.RoutingToken); } var logUrlSegments = JsonConvert.SerializeObject(urlSegments); _logger.Info("urlSegments e: " + JsonConvert.SerializeObject(logUrlSegments) + "urlsegment: " + context.Request.RawUrl); var contentType = context.Request.ContentType; var action = contentType.Split(';').Last(); //_logger.Info("action e:" + action); var actionName = string.Empty; var executionMethodName = string.Empty; if (!string.IsNullOrEmpty(action)) { actionName = action.Substring(action.IndexOf('"') + 1); executionMethodName = actionName.Substring(0, actionName.Length - 1); } //_logger.Info("actionName e:" + actionName); //_logger.Info("executionMethodName e:" + executionMethodName); var soapBody = string.Empty; try { var logGetSoapBody = AppSettings.Get <bool>("LogGetSoapBody"); if (logGetSoapBody) { _logger.Info( "Pred da go zeme samo soap body od porakata " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeGetOnlySoapBody"); } soapBody = _requestHelper.GetOnlySoapBody(context.Request.InputStream); if (logGetSoapBody) { _logger.Info( "Otkako kje se zeme samo soap body od porakata " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterGetOnlySoapBody"); } _logger.Info("soapBody e: " + soapBody); } catch (Exception ex) { _logger.Error("Nastanata e greska kaj GetOnlySoapBody", ex); } var logCreateMimRequestMsg = AppSettings.Get <bool>("LogCreateMimRequestMsg"); if (logCreateMimRequestMsg) { _logger.Info("Pred CreateMimRequestMsg " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeCreateMimRequestMsg"); } var mimMsg = _mimMsgHelper.CreateMimRequestMsg(urlSegments, transactionId.ToString()); if (logCreateMimRequestMsg) { _logger.Info("Posle CreateMimRequestMsg " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterCreateMimRequestMsg"); } #region Log SOAP Request Message var logSoap = AppSettings.Get <bool>("LogSoap"); if (logSoap) { _logger.Info(soapBody + Environment.NewLine + "ContentType: " + contentType + Environment.NewLine + "Soap action: " + actionName); } #endregion if (string.IsNullOrEmpty(soapBody) || !urlSegments.IsUrlCorrrect) { validTId = false; context.Response.StatusCode = 400; context.Response.End(); } #region Log MIM Message var logInsertRequestLogInDb = AppSettings.Get <bool>("LogInsertRequestLogInDb"); if (logInsertRequestLogInDb) { _logger.Info("Pred LogInitialMimMessage " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeLogInitialMimMessage"); } _mimMsgHelper.LogInitialMimMessage(mimMsg, _logger); if (logInsertRequestLogInDb) { _logger.Info("Posle LogInitialMimMessage " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterLogInitialMimMessage"); } #endregion if (urlSegments.Async) { //TODO Async req } var logLoadOwnCertificate = AppSettings.Get <bool>("LogLoadOwnCertificate"); if (logLoadOwnCertificate) { _logger.Info("Pred LoadOwnCertificate " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeLoadOwnCertificate"); } var ownCert = _mimMsgHelper.LoadOwnCertificate(_logger); if (logLoadOwnCertificate) { _logger.Info("Posle LoadOwnCertificate " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterLoadOwnCertificate"); } var logGetPrivateKey = AppSettings.Get <bool>("LogGetPrivateKey"); if (logGetPrivateKey) { _logger.Info("Pred GetPrivateKey " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeGetPrivateKey"); } var privateKey = _mimMsgHelper.GetPrivateKey(ownCert.PrivateKey); if (logGetPrivateKey) { _logger.Info("Posle GetPrivateKey " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterGetPrivateKey"); } string original = soapBody; var logGetPublicKeyForProvider = AppSettings.Get <bool>("LogGetPublicKeyForProvider"); if (logGetPublicKeyForProvider) { _logger.Info("Pred GetPublicKeyForProvider " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeGetPublicKeyForProvider"); } var publicKey = _mimMsgHelper.GetPublicKeyForProvider(urlSegments.RoutingToken); if (logGetPublicKeyForProvider) { _logger.Info( "Posle GetPublicKeyForProvider " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterGetPublicKeyForProvider"); } var logEncryption = AppSettings.Get <bool>("LogEncryption"); if (logEncryption) { _logger.Info( "Pred da go enkriptira body koe kje se isprati vo requestot " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeEncryptRequest"); } var encryptedBlock = _mimMsgHelper.EncryptSoapBody(original, publicKey.PublicKeyRsa); if (logEncryption) { _logger.Info( "Otkako kje go enkriptira body koe kje se isprati vo requestot " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterEncryptRequest"); } //var soapMethodName = _requestHelper.GetSoapMethodName(soapBody); #region Create MIM Message //set values to missing properties mimMsg.Body.MimBody.Message = Convert.ToBase64String(encryptedBlock.EncryptedData); mimMsg.Header.CryptoHeader.Key = Convert.ToBase64String(encryptedBlock.EncryptedSessionKey); mimMsg.Header.CryptoHeader.InitializationVector = Convert.ToBase64String(encryptedBlock.Iv); mimMsg.Header.MimHeader.ServiceMethod = executionMethodName; mimMsg.Header.MimHeader.PublicKey = ownCert.CertString; _logger.Info("mimMsg.Header.MimHeader.PublicKey is: " + ownCert.CertString); var logCreateMimXmlMsg = AppSettings.Get <bool>("LogCreateMimXmlMsg"); if (logCreateMimXmlMsg) { _logger.Info("Pred CreateMimXmlMsg " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeCreateMimXmlMsg"); } var doc = _mimMsgHelper.CreateMimXmlMsg(mimMsg); if (logCreateMimXmlMsg) { _logger.Info("Posle CreateMimXmlMsg " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterACreateMimXmlMsg"); } //_logger.Info("MIM message before KIBS" + doc); try { KIBSResponse resultkibs = null; if (mimMsg.Header.MimAdditionalHeader.IsInteropTestCommunicationCall) { resultkibs = new KIBSResponse { Hash = "InteropTestCommunicationCallHash" }; } else { if (AppSettings.Get <string>("KIBSEnviroment") != null) { if (AppSettings.Get <string>("KIBSEnviroment") == "Test") { var logKibsTimestamp = AppSettings.Get <bool>("LogKIBS"); if (logKibsTimestamp) { _logger.Info("Se koristi testen KIBS."); } var requestBeforeKibs = DateTime.Now; if (logKibsTimestamp) { _logger.Info( "Pred request ." + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "KIBSPredRequest"); } resultkibs = KIBS.KIBS.GenerateTimeStamp(doc.ToString()); if (logKibsTimestamp) { _logger.Info( "Pred request ." + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "KIBSPosleRequest"); var totalMinRequestKibs = (int)(DateTime.Now - requestBeforeKibs).TotalMinutes; var totalSecRequestKibs = (int)(DateTime.Now - requestBeforeKibs).TotalSeconds; var totalMilisecRequestKibs = (int)(DateTime.Now - requestBeforeKibs).TotalMilliseconds; _logger.Info( "Kibs ni vratil odgovor za " + totalMinRequestKibs + " min " + totalSecRequestKibs + " sec " + totalMilisecRequestKibs + " miliseconds", "RequestKIBS"); } } if (AppSettings.Get <string>("KIBSEnviroment") == "Production") { _logger.Info("Se koristi produkciski KIBS."); resultkibs = KIBS.KIBS.GenerateTimeStampProduction(doc.ToString()); } } } try { //resultkibs = new KIBSResponse //{ // Hash = "InteropTestCommunicationCallHash", // TimeStamp = DateTime.Now //}; if (resultkibs != null) { //_logger.Info("Pred update message log: " + mimMsg.Header.MimHeader.Dir + "/" + mimMsg.Header.MimHeader.ServiceMethod + "/" + mimMsg.Header.MimHeader.PublicKey + "/" + mimMsg.Header.MimHeader.TransactionId); //Prethodno se zemashe vrednosta Timestamp od servisot na KIBS, i istata se zapisuvase vo baza //Sega se zapishuva DateTime.Now vo poleto Timestamp // _messageLogsRepository.UpdateMessageLog(mimMsg.Header.MimHeader.Dir, resultkibs.TimeStamp, //resultkibs.Hash, mimMsg.Header.MimHeader.ServiceMethod, mimMsg.Header.MimHeader.PublicKey, //mimMsg.Header.MimHeader.TransactionId); var logUpdateMessageLog = AppSettings.Get <bool>("LogUpdateMessageLog"); if (logUpdateMessageLog) { _logger.Info( "Pred UpdateMessageLog " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeUpdateMessageLog"); } _messageLogsRepository.UpdateMessageLog(mimMsg.Header.MimHeader.Dir, resultkibs.Hash, mimMsg.Header.MimHeader.ServiceMethod, mimMsg.Header.MimHeader.PublicKey, mimMsg.Header.MimHeader.TransactionId); if (logUpdateMessageLog) { _logger.Info( "Posle UpdateMessageLog " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterUpdateMessageLog"); } //mimMsg.Header.MimHeader.TimeStamp = resultkibs.TimeStamp; //.ToString(); mimMsg.Header.MimHeader.TimeStamp = DateTime.Now; mimMsg.Header.MimAdditionalHeader.TimeStampToken = resultkibs.Hash; //_logger.Info("posle kibs so result: " + resultkibs.TimeStamp); } } catch (Exception exception) { _logger.Error("Error while updating mim message: ", exception); throw new Exception("Неуспешна комуникација со KIBS!"); } } catch (Exception ex) { _logger.Info("KIBS error posle CreateMimRequestMsg: " + ex.Message); throw new Exception("KIBS врати грешка!"); } var logCreateMimSignedXmlMsg = AppSettings.Get <bool>("LogCreateMimSignedXmlMsg"); if (logCreateMimSignedXmlMsg) { _logger.Info("Pred CreateMimSignedXmlMsg " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeCreateMimSignedXmlMsg"); } var mimMsgXml = _mimMsgHelper.CreateMimSignedXmlMsg(mimMsg, ownCert, _logger); if (logCreateMimSignedXmlMsg) { _logger.Info("Posle CreateMimSignedXmlMsg " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterCreateMimSignedXmlMsg"); } //_logger.Info("Created MIM signed xml message: " + mimMsgXml); #endregion var urlToBizTalk = AppSettings.Get <string>("URLWebRequest"); ResponseInteropCommunication responseBizTalk = null; try { //_logger.Info("pred responseBizTalk urlToBizTalk" + urlToBizTalk); var timeBeforeCallBizTalk = DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"); responseBizTalk = _soapRequestHelper.Execute(mimMsgXml, contentType, urlToBizTalk, _logger); _logger.Info( "Calling BizTalk in " + timeBeforeCallBizTalk + " , receving response in " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BizTalkResponseTime"); //Real MIM message var logUnwrapSoapFaultMessage = AppSettings.Get <bool>("LogUnwrapSoapFaultMessage"); if (logUnwrapSoapFaultMessage) { _logger.Info( "Pred UnwrapSoapFaultMessage " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeUnwrapSoapFaultMessage"); } var soapFaultUnwrapped = _soapRequestHelper.UnwrapSoapFaultMessage(responseBizTalk.Response); if (logUnwrapSoapFaultMessage) { _logger.Info( "Posle UnwrapSoapFaultMessage " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterUnwrapSoapFaultMessage"); } //_logger.Info("Pominal kaj soapFaultUnwrapped!"); _logger.Info(responseBizTalk.Response, "BTResponseReceived"); if (soapFaultUnwrapped.Body.Fault != null) { // BizzTalk error if (soapFaultUnwrapped.Body.Fault.Code.Subcode.value == "10000") { if (soapFaultUnwrapped.Body.Fault.Code.value == "10001") { throw new Exception("BTMstatus10000BTMend;" + AppSettings.Get <string>("SoapFaultAccessMapping")); } else if (soapFaultUnwrapped.Body.Fault.Code.value == "10002") { throw new Exception("BTMstatus10000BTMend;" + AppSettings.Get <string>("SoapFaultParticipantInactive")); } else if (soapFaultUnwrapped.Body.Fault.Code.value == "10003") { throw new Exception("BTMstatus10000BTMend;" + AppSettings.Get <string>("SoapFaultServiceUnReachable")); } else if (soapFaultUnwrapped.Body.Fault.Code.value == "10004") { throw new Exception("BTMstatus10000BTMend;" + AppSettings.Get <string>("SoapFaultKIBSUnReachable")); } else if (soapFaultUnwrapped.Body.Fault.Code.value == "10005") { throw new Exception("BTMstatus10000BTMend;" + soapFaultUnwrapped.Body.Fault.Reason.Text.value); } else if (soapFaultUnwrapped.Body.Fault.Code.value == "10010") { throw new Exception("BTMstatus10000BTMend;" + soapFaultUnwrapped.Body.Fault.Reason.Text.value); } else if (soapFaultUnwrapped.Body.Fault.Code.value == "10007") { throw new Exception("BTMstatus10000BTMend;" + AppSettings.Get <string>("SoapFaultUnsuccessfulRequest")); } else if (soapFaultUnwrapped.Body.Fault.Code.value == "10000") { //ova e vo slucaj koga CC-to e nedostapno throw new Exception("BTMstatus10000BTMend;" + AppSettings.Get <string>("SoapFaultServiceUnReachable")); } throw new Exception("BTMstatus10000BTMend;" + soapFaultUnwrapped.Body.Fault.Reason.Text.value); } // Our error else { throw new Exception(soapFaultUnwrapped.Body.Fault.Reason.Text.value); } } } catch (Exception e) { _logger.Error("Greska vo povikot do BizTalk", e); throw new Exception(e.Message); } var logUnwrapMimMessage = AppSettings.Get <bool>("LogUnwrapMimMessage"); if (logUnwrapMimMessage) { _logger.Info("Pred UnwrapMimMessage " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeUnwrapMimMessage"); } var mimMsgResponse = _soapRequestHelper.UnwrapMimMessage(responseBizTalk.Response); if (logUnwrapMimMessage) { _logger.Info("Posle UnwrapMimMessage " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterUnwrapMimMessage"); } #region Log MIM Message var logMimMessage = AppSettings.Get <bool>("LogMimMessage"); if (logMimMessage) { _logger.Info("Pred LogMimMessage " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeLogMimMessage"); } _mimMsgHelper.LogMimMessage(mimMsgResponse, _logger); if (logMimMessage) { _logger.Info("posle LogMimMessage " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterLogMimMessage"); } #endregion #region ValidateMsg try { var logValidateSignature = AppSettings.Get <bool>("LogValidateSignature"); if (logValidateSignature) { _logger.Info("Pred ValidateSignature " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeValidateSignature"); _logger.Info("Own cert string " + ownCert.CertString, "OwnCertString"); } if (_soapRequestHelper.ValidateSignature(responseBizTalk.Response, ownCert.CertString, _logger)) { if (logValidateSignature) { _logger.Info( "Posle ValidateSignature " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterValidateSignature"); } var logValidateXml = AppSettings.Get <bool>("LogValidateXml"); if (logValidateXml) { _logger.Info("Pred ValidateXml " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeValidateXml"); } _validXmlMsgHelper.ValidateXml(responseBizTalk.Response); if (logValidateXml) { _logger.Info("Posle ValidateXml " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterValidateXml"); } } } catch (Exception ex) { _logger.Error("Nastanala greska kaj ValidateSignature", ex); } #endregion var symmetricKey = mimMsgResponse.Header.CryptoHeader.Key; var iVector = mimMsgResponse.Header.CryptoHeader.InitializationVector; var decryptBody = string.Empty; try { //_logger.Info("symmetricKey" + symmetricKey); //_logger.Info("iVector" + iVector); if (logEncryption) { _logger.Info( "Pred da go dekriptira body koe kje se vrati kako response " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeDecryptResponse"); } decryptBody = _mimMsgHelper.DecryptSoapBody( Convert.FromBase64String(mimMsgResponse.Body.MimBody.Message), Convert.FromBase64String(symmetricKey), Convert.FromBase64String(iVector), privateKey); if (logEncryption) { _logger.Info( "Otkako kje go dekriptira body koe kje se vrati kako response " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterDecryptResponse"); } } catch (Exception ex) { _logger.Error("Nastanala greska kaj DecryptSoapBody", ex); } #region Log DecryptBody if (AppSettings.Get <bool>("LogDecryptBody")) { _logger.Info("Decripting MIM message: " + decryptBody); } #endregion #region KIBS after BT try { KIBSResponse resultkibsAfterBt = null; if (mimMsgResponse.Header.MimAdditionalHeader.IsInteropTestCommunicationCall) { resultkibsAfterBt = new KIBSResponse { Hash = "InteropTestCommunicationCallHash" }; } else { if (AppSettings.Get <string>("KIBSEnviroment") != null) { if (AppSettings.Get <string>("KIBSEnviroment") == "Test") { var logKibsTimestamp = AppSettings.Get <bool>("LogKIBS"); if (logKibsTimestamp) { _logger.Info("Se koristi testen KIBS."); } var responseBeforeKibs = DateTime.Now; if (logKibsTimestamp) { _logger.Info( "Pred response ." + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "KIBSPredResponse"); } resultkibsAfterBt = KIBS.KIBS.GenerateTimeStamp(responseBizTalk.Response); if (logKibsTimestamp) { _logger.Info( "Posle response ." + DateTime.Now.ToString("dd.MM.yyy hh:mm:ss.fff tt"), "KIBSPosleResponse"); var totalMinRequestKibs = (int)(DateTime.Now - responseBeforeKibs).TotalMinutes; var totalSecRequestKibs = (int)(DateTime.Now - responseBeforeKibs).TotalSeconds; var totalMilisecRequestKibs = (int)(DateTime.Now - responseBeforeKibs).TotalMilliseconds; //TimeSpan a = DateTime.Now - responseBeforeKibs; //int b = a.Seconds; //int c = a.Milliseconds; //int d = a.Minutes; //_logger.Info("minuti ima " + d, "minuti"); //_logger.Info("sekindi ima " + b, "sekundi"); //_logger.Info("milisekunds ima " + c, "milisekunds"); _logger.Info( "Kibs ni vratil odgovor za " + totalMinRequestKibs + " min " + totalSecRequestKibs + " sec " + totalMilisecRequestKibs + " miliseconds", "ResponseKIBS"); } } if (AppSettings.Get <string>("KIBSEnviroment") == "Production") { _logger.Info("Se koristi produkciski KIBS."); resultkibsAfterBt = KIBS.KIBS.GenerateTimeStampProduction(responseBizTalk.Response); } } } try { //Prethodno se zemashe vrednosta Timestamp od servisot na KIBS, i istata se zapisuvase vo baza //Sega se zapishuva DateTime.Now vo poleto Timestamp //_messageLogsRepository.UpdateMessageLog(mimMsgResponse.Header.MimHeader.Dir, // resultkibsAfterBt.TimeStamp, resultkibsAfterBt.Hash, string.Empty, string.Empty, // mimMsg.Header.MimHeader.TransactionId); var logUpdateMessageLogResponse = AppSettings.Get <bool>("LogUpdateMessageLogResponse"); if (logUpdateMessageLogResponse) { _logger.Info( "Pred UpdateMessageLog " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeUpdateMessageLogResponse"); } _messageLogsRepository.UpdateMessageLog(mimMsgResponse.Header.MimHeader.Dir, resultkibsAfterBt.Hash, string.Empty, string.Empty, mimMsg.Header.MimHeader.TransactionId); if (logUpdateMessageLogResponse) { _logger.Info( "Posle UpdateMessageLog " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterUpdateMessageLogResponse"); } //Prethodno se zemashe vrednosta Timestamp od servisot na KIBS, i istata se zapisuvase vo baza //Sega se zapishuva DateTime.Now vo poleto Timestamp //mimMsgResponse.Header.MimHeader.TimeStamp = resultkibsAfterBt.TimeStamp; //.ToString(); mimMsgResponse.Header.MimHeader.TimeStamp = DateTime.Now; mimMsgResponse.Header.MimAdditionalHeader.TimeStampToken = resultkibsAfterBt.Hash; } catch (Exception exception) { _logger.Error("Error while updating mim message: ", exception); throw new Exception("Неуспешна комуникација со KIBS!"); } } catch (Exception ex) { _logger.Info("KIBS error after BT: " + ex.Message); throw new Exception("KIBS врати грешка!"); } #endregion #region Log SOAP Response Message if (logSoap) { _logger.Info(responseBizTalk.Response, "BizTalk response"); } #endregion string decryptedResponseBodyWrappedInSoapEnvelope = "<s:Envelope xmlns:s=\"http://www.w3.org/2003/05/soap-envelope\"><s:Body>" + decryptBody + "</s:Body></s:Envelope>"; //_logger.Info(decryptedResponseBodyWrappedInSoapEnvelope, "decryptedResponseBodyWrappedInSoapEnvelope"); _logger.Info("Zavsilo se na External handler vo " + DateTime.Now + " casot.", "EndedOnExternalHandler"); HttpContext.Current.Response.ContentType = "application/soap+xml"; context.Response.Write(decryptedResponseBodyWrappedInSoapEnvelope); } catch (Exception ex) { //AccessMap=0;Status=;StatusDescription="";IsActive=1;IsExternal=1;Uri="http://internalHandler-fpiom/";KIBS=True; if (validTId) { var soapFault = new SoapFaultMessage(); if (ex.Message.StartsWith("BTMstatus10000BTMend")) { // BizzTalk error handled - Custom //var soapFaultError = _soapRequestHelper.BTsoapFault(ex.Message); // BizzTalk error handled - Kornel var soapFaultError = ex.Message.Split(';')[1]; soapFault = _mimMsgHelper.CreateSoapFault("Code value", "Code - SubCode value", "Details - MaxTime value", soapFaultError); } else { soapFault = _mimMsgHelper.CreateSoapFault("Code value", "Code - SubCode value", "Details - MaxTime value", ex.Message); } _logger.Error("Generalen exception", ex); _logger.Error(soapFault.Body.Fault.Reason.Text.value, ex, "Error on response"); var soapFaultDB = _soapRequestHelper.CreateSoapFaultDB(transactionId, soapFault.Body.Fault.Code.value, soapFault.Body.Fault.Code.Subcode.value, soapFault.Body.Fault.Detail.maxTime, soapFault.Body.Fault.Reason.Text.value); _soapFaultRepo.InsertSoapFault(soapFaultDB); var soapFaultXml = _mimMsgHelper.CreateFaultMessage(soapFault); HttpContext.Current.Response.ContentType = "application/soap+xml"; HttpContext.Current.Response.Write(soapFaultXml.InnerXml); } } }
// Опис: Метод кој овозможува процесирање на НТТР Web повици // Влезни параметри: HttpContext context // Излезни параметри: / public void ProcessRequest(HttpContext context) { var validTId = false; var transactionId = new Guid(); try { var logGetSoapBody = AppSettings.Get <bool>("LogGetSoapBody"); if (logGetSoapBody) { _logger.Info( "Pred da go zeme samo soap body od porakata " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeGetSoapBody"); } var soapBody = _requestHelper.GetSoapBody(context.Request.InputStream); if (logGetSoapBody) { _logger.Info( "Otkako kje go zeme soap body od porakata " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterGetSoapBody"); } var contentType = context.Request.ContentType; #region Log SOAP Request Message var logSoap = AppSettings.Get <bool>("LogSoap"); if (logSoap) { _logger.Info(soapBody + Environment.NewLine + "ContentType: " + contentType, "Request to Internal handler"); } //soapBody = File.ReadAllText(@"C:\NSRequest.txt"); ; #endregion if (string.IsNullOrEmpty(soapBody)) { context.Response.StatusCode = 400; context.Response.End(); } var logUnwrapMimMessage = AppSettings.Get <bool>("LogUnwrapMimMessage"); if (logUnwrapMimMessage) { _logger.Info("Pred UnwrapMimMessage " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeUnwrapMimMessage"); } var mimMsg = _soapRequestHelper.UnwrapMimMessage(soapBody); if (logUnwrapMimMessage) { _logger.Info("Posle UnwrapMimMessage " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterUnwrapMimMessage"); } validTId = true; transactionId = new Guid(mimMsg.Header.MimHeader.TransactionId); #region Log MIM Message var logMimMessageRequest = AppSettings.Get <bool>("LogMimMessageRequest"); if (logMimMessageRequest) { _logger.Info("Pred LogMimMessage " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeLogMimMessage"); } _mimMsgHelper.LogMimMessage(mimMsg, _logger); if (logMimMessageRequest) { _logger.Info("Posle LogMimMessage " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterLogMimMessage"); } #endregion var logLoadOwnCertificate = AppSettings.Get <bool>("LogLoadOwnCertificate"); if (logLoadOwnCertificate) { _logger.Info("Pred LoadOwnCertificate " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeLoadOwnCertificate"); } var ownCert = _mimMsgHelper.LoadOwnCertificate(_logger); if (logLoadOwnCertificate) { _logger.Info("Posle LoadOwnCertificate " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterLoadOwnCertificate"); } var logGetPrivateKey = AppSettings.Get <bool>("LogGetPrivateKey"); if (logGetPrivateKey) { _logger.Info("Pred GetPrivateKey " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeGetPrivateKey"); } var privateKey = _mimMsgHelper.GetPrivateKey(ownCert.PrivateKey); if (logGetPrivateKey) { _logger.Info("Posle GetPrivateKey " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterGetPrivateKey"); } var publicKey = mimMsg.Header.MimHeader.PublicKey; var logValidateSignature = AppSettings.Get <bool>("LogValidateSignature"); if (logValidateSignature) { _logger.Info("Pred ValidateSignature " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeValidateSignature"); } if (_soapRequestHelper.ValidateSignature(soapBody, publicKey, _logger)) { if (logValidateSignature) { _logger.Info("Posle ValidateSignature " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterValidateSignature"); } var logValidateXml = AppSettings.Get <bool>("LogValidateXml"); if (logValidateXml) { _logger.Info("Pred ValidateXml " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeValidateXml"); } _validXmlMsgHelper.ValidateXml(soapBody); if (logValidateXml) { _logger.Info("Posle ValidateXml " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterValidateXml"); } } var symmetricKey = mimMsg.Header.CryptoHeader.Key; var iVector = mimMsg.Header.CryptoHeader.InitializationVector; var logEncryption = AppSettings.Get <bool>("LogEncryption"); if (logEncryption) { _logger.Info( "Pred da go dekriptira body koe kje se prati vo requestot " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeDecryptRequest"); } var decryptBody = _mimMsgHelper.DecryptSoapBody(Convert.FromBase64String(mimMsg.Body.MimBody.Message.ToString()), Convert.FromBase64String(symmetricKey), Convert.FromBase64String(iVector), privateKey); if (logEncryption) { _logger.Info( "Otkako kje go dekriptira body koe kje se prati vo requestot " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterDecryptRequest"); } #region Log DecryptBody if (AppSettings.Get <bool>("LogDecryptBody")) { _logger.Info("Decripting MIM message: " + decryptBody); } #endregion #region KIBS after DecryptSoapBody try { KIBSResponse resultkibs = null; if (mimMsg.Header.MimAdditionalHeader.IsInteropTestCommunicationCall) { resultkibs = new KIBSResponse { Hash = "InteropTestCommunicationCallHash" }; } else { if (AppSettings.Get <string>("KIBSEnviroment") != null) { if (AppSettings.Get <string>("KIBSEnviroment") == "Test") { var logKibsTimestamp = AppSettings.Get <bool>("LogKIBS"); if (logKibsTimestamp) { _logger.Info("Se koristi testen KIBS."); } var requestBeforeKibs = DateTime.Now; if (logKibsTimestamp) { _logger.Info( "Pred request ." + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "KIBSPredRequest"); } resultkibs = KIBS.KIBS.GenerateTimeStamp(soapBody); if (logKibsTimestamp) { _logger.Info( "Pred request ." + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "KIBSPosleRequest"); var totalMinRequestKibs = (int)(DateTime.Now - requestBeforeKibs).TotalMinutes; var totalSecRequestKibs = (int)(DateTime.Now - requestBeforeKibs).TotalSeconds; var totalMilisecRequestKibs = (int)(DateTime.Now - requestBeforeKibs).TotalMilliseconds; _logger.Info( "Kibs ni vratil odgovor za " + totalMinRequestKibs + " min " + totalSecRequestKibs + " sec " + totalMilisecRequestKibs + " miliseconds", "RequestKIBS"); } } if (AppSettings.Get <string>("KIBSEnviroment") == "Production") { _logger.Info("Se koristi produkciski KIBS."); resultkibs = KIBS.KIBS.GenerateTimeStampProduction(soapBody); } } //resultkibs = new KIBSResponse //{ // Hash = "InteropTestCommunicationCallHash", // TimeStamp = DateTime.Now //}; } try { if (resultkibs != null) { //Prethodno se zemashe vrednosta Timestamp od servisot na KIBS, i istata se zapisuvase vo baza //Sega se zapishuva DateTime.Now vo poleto Timestamp //_messageLogsRepository.UpdateMessageLog(mimMsg.Header.MimHeader.Dir, resultkibs.TimeStamp, // resultkibs.Hash, string.Empty, string.Empty, mimMsg.Header.MimHeader.TransactionId); var logUpdateMessageLog = AppSettings.Get <bool>("LogUpdateMessageLog"); if (logUpdateMessageLog) { _logger.Info( "Pred UpdateMessageLog " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeUpdateMessageLogRequest"); } _messageLogsRepository.UpdateMessageLog(mimMsg.Header.MimHeader.Dir, resultkibs.Hash, string.Empty, string.Empty, mimMsg.Header.MimHeader.TransactionId); if (logUpdateMessageLog) { _logger.Info( "Posle UpdateMessageLog " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterUpdateMessageLogRequest"); } //Prethodno se zemashe vrednosta Timestamp od servisot na KIBS, i istata se zapisuvase vo baza //Sega se zapishuva DateTime.Now vo poleto Timestamp //mimMsg.Header.MimHeader.TimeStamp = resultkibs.TimeStamp; //.ToString(); mimMsg.Header.MimHeader.TimeStamp = DateTime.Now; mimMsg.Header.MimAdditionalHeader.TimeStampToken = resultkibs.Hash; } } catch (Exception exception) { _logger.Error("Error while updating mim message: ", exception.Message); throw new Exception("Грешка при UpdateMessageLog!"); } } catch (Exception ex) { _logger.Info("KIBS error posle DecryptSoapBody: " + ex.Message); throw new Exception("KIBS врати грешка!"); } #endregion //_logger.Info("posle LogMimMessage"); var logGetServiceUrl = AppSettings.Get <bool>("LogGetServiceUrl"); if (logGetServiceUrl) { _logger.Info("Pred GetServiceUrl " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeGetServiceUrl"); } var urlToHostedApp = _requestHelper.GetServiceUrl(mimMsg.Header.MimHeader); if (logGetServiceUrl) { _logger.Info("Posle GetServiceUrl " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterGetServiceUrl"); } //_logger.Info("urlToHostedApp mimheader e: " + mimMsg.Header.MimHeader); _logger.Info("urlToHostedApp e: " + urlToHostedApp); #region ExecuteRequestToInstitution ResponseInteropCommunication responseEndPointInstitution; string decryptedRequestBodyWrappedInSoapEnvelope = "<s:Envelope xmlns:s=\"http://www.w3.org/2003/05/soap-envelope\"><s:Body>" + decryptBody + "</s:Body></s:Envelope>"; if (mimMsg.Header.MimAdditionalHeader.IsInteropTestCommunicationCall) { responseEndPointInstitution = new ResponseInteropCommunication { Response = @"<s:Envelope xmlns:s=""http://www.w3.org/2003/05/soap-envelope""><s:Body><InteropTestCommunicationService xmlns=""http://tempuri.org/"">InteropTestCommunicationCallResponse</InteropTestCommunicationService></s:Body></s:Envelope>", MimeType = "InteropTestCommunicationCallMimeType" }; } else { try { _logger.Info("Povikot koj se prakja e: " + decryptedRequestBodyWrappedInSoapEnvelope); System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true); //sertifikatot ne im e u red za toa go stavam ova za da go ignorira var timeBeforeCallInstitution = DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"); //ovaa linija da se proveri za custom interop fault greski, od tuka pa natamu da se proveruva povikot responseEndPointInstitution = _soapRequestHelper.Execute(decryptedRequestBodyWrappedInSoapEnvelope, contentType, urlToHostedApp, _logger); //_logger.Info( // "decryptedRequestBodyWrappedInSoapEnvelope" + decryptedRequestBodyWrappedInSoapEnvelope + // "contentType" + contentType + "urltToApp" + urlToHostedApp, "Test"); _logger.Info( "Calling institution in " + timeBeforeCallInstitution + " , receiving response in " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "InsitutionTotalResponse"); //ovie dva loga ne gi pravi bidejki direktno odi na exception! //_logger.Info("Response institution is: " + responseEndPointInstitution.Response, "InstitutionReturnedLength"); // _logger.Info("Response institution bez envelope is: " + _requestHelper.GetOnlySoapBodyFromString(responseEndPointInstitution.Response)); } //tuka probaj stavi catch (FaultException e) da vidish shto kje vrati catch (FaultException ex) { //_logger.Info("dosol vo fault exception."); //_logger.Error("Error koj se vrakja od fault exception e: ", ex); _logger.Error("Error koj se vrakja od fault exception Message e: ", ex.Message); //_logger.Error("Error koj se vrakja od fault exception inner exception e: ", ex.InnerException.Message); throw new FaultException(ex.Message); } //MARIJA //DODADENO za da se fati Web exception od povikot do adapterot vo slucaj koga toj e nedostapen //INICIJALNO ova BESE ZAKOMENTIRANO //catch (Exception e) //{ // _logger.Info("catch exception e: " + e.Message, "WebErrorVoPovikotDoAdapterot"); // //throw new Exception("Сервисот кој го повикавте врати грешка!", e); // throw new FaultException(e.Message); //} } #endregion #region Create MIM Message var logCreateMimResponseMsg = AppSettings.Get <bool>("LogCreateMimResponseMsg"); if (logCreateMimResponseMsg) { _logger.Info("Pred CreateMimResponseMsg " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeCreateMimResponseMsg"); } var mimMsgResponse = _mimMsgHelper.CreateMimResponseMsg(mimMsg, responseEndPointInstitution.MimeType); if (logCreateMimResponseMsg) { _logger.Info("Posle CreateMimResponseMsg " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterCreateMimResponseMsg"); } #region Log MIM Message //_logger.Info("Pred LogMimMessage."); var logMimMessageResponse = AppSettings.Get <bool>("LogMimMessageResponse"); if (logMimMessageResponse) { _logger.Info("Pred LogMimMessageResponse " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeLogMimMessageResponse"); } _mimMsgHelper.LogMimMessage(mimMsgResponse, _logger); if (logMimMessageResponse) { _logger.Info("Posle LogMimMessageResponse " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterLogMimMessageResponse"); } //_logger.Info("Posle LogMimMessage."); #endregion //_logger.Info("Pred responseWithoutSoapEnvelope."); var logGetOnlySoapBodyFromString = AppSettings.Get <bool>("LogGetOnlySoapBodyFromString"); if (logGetOnlySoapBodyFromString) { _logger.Info( "Pred GetOnlySoapBodyFromString " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeGetOnlySoapBodyFromString"); } string responseWithoutSoapEnvelope = _requestHelper.GetOnlySoapBodyFromString(responseEndPointInstitution.Response); if (logGetOnlySoapBodyFromString) { _logger.Info( "Posle GetOnlySoapBodyFromString " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterGetOnlySoapBodyFromString"); } //_logger.Info("Posle responseWithoutSoapEnvelope."); var logGetPublicKeyFromString = AppSettings.Get <bool>("LogGetPublicKeyFromString"); if (logGetPublicKeyFromString) { _logger.Info("Pred GetPublicKeyFromString " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeGetPublicKeyFromString"); } var publicKeyRsa = _mimMsgHelper.GetPublicKeyFromString(publicKey); if (logGetPublicKeyFromString) { _logger.Info("Posle GetPublicKeyFromString " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterGetPublicKeyFromString"); } if (logEncryption) { _logger.Info( "Pred da go enkriptira body koe kje se prati vo responsot " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeEncryptResponse"); } var encryptedBlock = _mimMsgHelper.EncryptSoapBody(responseWithoutSoapEnvelope, publicKeyRsa); if (logEncryption) { _logger.Info( "Otkako kje go enkriptira body koe kje se prati vo responsot " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterEncryptResponse"); } var encryptedSoapBody = Convert.ToBase64String(encryptedBlock.EncryptedData); var encryptedSessionKey = Convert.ToBase64String(encryptedBlock.EncryptedSessionKey); var encriptedIVector = Convert.ToBase64String(encryptedBlock.Iv); mimMsgResponse.Body.MimBody.Message = encryptedSoapBody; mimMsgResponse.Header.CryptoHeader.InitializationVector = encriptedIVector; mimMsgResponse.Header.CryptoHeader.Key = encryptedSessionKey; var logCreateMimXmlMsg = AppSettings.Get <bool>("LogCreateMimXmlMsg"); if (logCreateMimXmlMsg) { _logger.Info("Pred CreateMimXmlMsg " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeCreateMimXmlMsg"); } var doc = _mimMsgHelper.CreateMimXmlMsg(mimMsgResponse); if (logCreateMimXmlMsg) { _logger.Info("Posle CreateMimXmlMsg " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterCreateMimXmlMsg"); } #region KIBS after CreateMimXmlMsg try { KIBSResponse resultkibsResp = null; if (mimMsgResponse.Header.MimAdditionalHeader.IsInteropTestCommunicationCall) { resultkibsResp = new KIBSResponse { Hash = "InteropTestCommunicationCallHash" }; } else { if (AppSettings.Get <string>("KIBSEnviroment") != null) { if (AppSettings.Get <string>("KIBSEnviroment") == "Test") { var logKibsTimestamp = AppSettings.Get <bool>("LogKIBS"); if (logKibsTimestamp) { _logger.Info("Se koristi testen KIBS."); } var responseBeforeKibs = DateTime.Now; if (logKibsTimestamp) { _logger.Info( "Pred request ." + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "KIBSPredResponse"); } resultkibsResp = KIBS.KIBS.GenerateTimeStamp(doc.ToString()); if (logKibsTimestamp) { _logger.Info( "Pred request ." + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "KIBSPosleResponse"); var totalMinRequestKibs = (int)(DateTime.Now - responseBeforeKibs).TotalMinutes; var totalSecRequestKibs = (int)(DateTime.Now - responseBeforeKibs).TotalSeconds; var totalMilisecRequestKibs = (int)(DateTime.Now - responseBeforeKibs).TotalMilliseconds; _logger.Info( "Kibs ni vratil odgovor za " + totalMinRequestKibs + " min " + totalSecRequestKibs + " sec " + totalMilisecRequestKibs + " miliseconds", "ResponseKIBS"); } } if (AppSettings.Get <string>("KIBSEnviroment") == "Production") { _logger.Info("Se koristi produkciski KIBS."); resultkibsResp = KIBS.KIBS.GenerateTimeStampProduction(doc.ToString()); } } //resultkibsResp = new KIBSResponse //{ // Hash = "InteropTestCommunicationCallHash", // TimeStamp = DateTime.Now //}; } try { if (resultkibsResp != null) { //Prethodno se zemashe vrednosta Timestamp od servisot na KIBS, i istata se zapisuvase vo baza //Sega se zapishuva DateTime.Now vo poleto Timestamp //_messageLogsRepository.UpdateMessageLog(mimMsgResponse.Header.MimHeader.Dir, resultkibsResp.TimeStamp, resultkibsResp.Hash, string.Empty, string.Empty, mimMsg.Header.MimHeader.TransactionId); var logUpdateMessageLogResponse = AppSettings.Get <bool>("LogUpdateMessageLogResponse"); if (logUpdateMessageLogResponse) { _logger.Info( "Pred UpdateMessageLog " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeUpdateMessageLogResponse"); } _messageLogsRepository.UpdateMessageLog(mimMsgResponse.Header.MimHeader.Dir, resultkibsResp.Hash, string.Empty, string.Empty, mimMsg.Header.MimHeader.TransactionId); if (logUpdateMessageLogResponse) { _logger.Info( "Posle UpdateMessageLog " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterUpdateMessageLogResponse"); } //Prethodno se zemashe vrednosta Timestamp od servisot na KIBS, i istata se zapisuvase vo baza //Sega se zapishuva DateTime.Now vo poleto Timestamp //mimMsgResponse.Header.MimHeader.TimeStamp = resultkibsResp.TimeStamp;//.ToString(); mimMsgResponse.Header.MimHeader.TimeStamp = DateTime.Now; mimMsgResponse.Header.MimAdditionalHeader.TimeStampToken = resultkibsResp.Hash; } } catch (Exception exception) { _logger.Info("KIBS error: " + exception.Message); throw new Exception("KIBS врати грешка: " + exception.Message); } } catch (Exception ex) { _logger.Info("KIBS error after CreateMimXmlMsg: " + ex.Message); throw new Exception("KIBS врати грешка: " + ex.Message); } #endregion var logCreateMimSignedXmlMsg = AppSettings.Get <bool>("LogCreateMimSignedXmlMsg"); if (logCreateMimSignedXmlMsg) { _logger.Info("Pred CreateMimSignedXmlMsg " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "BeforeCreateMimSignedXmlMsg"); } var mimMsgResponseXml = _mimMsgHelper.CreateMimSignedXmlMsg(mimMsgResponse, ownCert, _logger); //Check for need of encryption if (logCreateMimSignedXmlMsg) { _logger.Info("Posle CreateMimSignedXmlMsg " + DateTime.Now.ToString("dd.MM.yyyy hh:mm:ss.fff tt"), "AfterCreateMimSignedXmlMsg"); } #endregion #region Log SOAP Response Message if (logSoap) { //LogHelper.WriteInNLoc("", "", mimMsgResponseXml, "Response_" + DateTime.Now, "Info"); _logger.Info(mimMsgResponseXml, "ResponseSignedXml"); } #endregion HttpContext.Current.Response.ContentType = "application/soap+xml"; context.Response.Write(mimMsgResponseXml); _logger.Info("Zavsilo se na Internal handler vo " + DateTime.Now + " casot.", "EndedOnInternalHandler"); } catch (FaultException ex) { //_logger.Info("dosol vo fault exception."); _logger.Error("Error koj se vrakja od fault exception e: ", ex, "CatchFaultException"); //_logger.Info("validTID vo glavniot catch e: " + validTId); if (validTId) { var soapFault = _mimMsgHelper.CreateSoapFault("Code value", "Code - SubCode value", "Details - MaxTime value", ex.Message); var soapFaultDb = _soapRequestHelper.CreateSoapFaultDB(transactionId, soapFault.Body.Fault.Code.value, soapFault.Body.Fault.Code.Subcode.value, soapFault.Body.Fault.Detail.maxTime, soapFault.Body.Fault.Reason.Text.value); try { _soapFaultRepo.InsertSoapFault(soapFaultDb); } catch (Exception exception) { _logger.Error(exception, "Nastanata greska pri kreiranje na soap fault vo baza."); } var soapFaultXml = _mimMsgHelper.CreateFaultMessage(soapFault); _logger.Info(soapFaultXml.InnerXml, "SoapFaultXml"); _logger.Error(soapFault.Body.Fault.Reason.Text.value, ex, "ErrorOnResponseInternalHandler"); HttpContext.Current.Response.ContentType = "application/soap+xml"; HttpContext.Current.Response.Write(soapFaultXml.InnerXml); } } catch (Exception ex) { _logger.Error("odma u catch", ex); _logger.Info("validTID vo glavniot catch e: " + validTId); if (validTId) { var soapFault = _mimMsgHelper.CreateSoapFault("Code value", "Code - SubCode value", "Details - MaxTime value", ex.Message); var soapFaultDb = _soapRequestHelper.CreateSoapFaultDB(transactionId, soapFault.Body.Fault.Code.value, soapFault.Body.Fault.Code.Subcode.value, soapFault.Body.Fault.Detail.maxTime, soapFault.Body.Fault.Reason.Text.value); try { _soapFaultRepo.InsertSoapFault(soapFaultDb); } catch (Exception exception) { _logger.Error(exception, "Nastanata greska pri kreiranje na soap fault vo baza."); } var soapFaultXml = _mimMsgHelper.CreateFaultMessage(soapFault); _logger.Error(soapFault.Body.Fault.Reason.Text.value, ex, "Error on response"); HttpContext.Current.Response.ContentType = "application/soap+xml"; HttpContext.Current.Response.Write(soapFaultXml.InnerXml); } } }
// Опис: Метод кој овозможува процесирање на НТТР Web повици // Влезни параметри: HttpContext context // Излезни параметри: / public void ProcessRequest(HttpContext context) { var validTId = false; var transactionId = new Guid(); try { var soapBody = _requestHelper.GetSoapBody(context.Request.InputStream); var contentType = context.Request.ContentType; var soapHeader = _requestHelper.GetSoapHeader(context.Request.Headers); #region Log SOAP Request Message var logSoap = AppSettings.Get <bool>("LogSoap"); if (logSoap) { _logger.Info(soapBody + Environment.NewLine + "ContentType: " + contentType + Environment.NewLine + "SoapHeader: " + soapHeader, "Request to Internal handler"); } //soapBody = File.ReadAllText(@"C:\NSRequest.txt"); ; #endregion if (string.IsNullOrEmpty(soapBody)) { context.Response.StatusCode = 400; context.Response.End(); } var mimMsg = _soapRequestHelper.UnwrapMimMessage(soapBody); validTId = true; transactionId = new Guid(mimMsg.Header.MimHeader.TransactionId); #region Log MIM Message _mimMsgHelper.LogMimMessage(mimMsg, _logger); #endregion var ownCert = _mimMsgHelper.LoadOwnCertificate(_logger); var privateKey = _mimMsgHelper.GetPrivateKey(ownCert.PrivateKey); var publicKey = mimMsg.Header.MimHeader.PublicKey; if (_soapRequestHelper.ValidateSignature(soapBody, publicKey, _logger)) { _validXmlMsgHelper.ValidateXml(soapBody); } var symmetricKey = mimMsg.Header.CryptoHeader.Key; var iVector = mimMsg.Header.CryptoHeader.InitializationVector; var decryptBody = _mimMsgHelper.DecryptSoapBody(Convert.FromBase64String(mimMsg.Body.MimBody.Message.ToString()), Convert.FromBase64String(symmetricKey), Convert.FromBase64String(iVector), privateKey); #region Log DecryptBody if (AppSettings.Get <bool>("LogDecryptBody")) { _logger.Info("Decripting MIM message: " + decryptBody); } #endregion #region KIBS after DecryptSoapBody try { KIBSResponse resultkibs = null; if (mimMsg.Header.MimAdditionalHeader.IsInteropTestCommunicationCall) { resultkibs = new KIBSResponse { Hash = "InteropTestCommunicationCallHash" }; } else { if (AppSettings.Get <string>("KIBSEnviroment") != null) { if (AppSettings.Get <string>("KIBSEnviroment") == "Test") { _logger.Info("Se koristi testen KIBS."); resultkibs = KIBS.KIBS.GenerateTimeStamp(soapBody); } if (AppSettings.Get <string>("KIBSEnviroment") == "Production") { _logger.Info("Se koristi produkciski KIBS."); resultkibs = KIBS.KIBS.GenerateTimeStampProduction(soapBody); } } //resultkibs = new KIBSResponse //{ // Hash = "InteropTestCommunicationCallHash", // TimeStamp = DateTime.Now //}; } try { if (resultkibs != null) { //Prethodno se zemashe vrednosta Timestamp od servisot na KIBS, i istata se zapisuvase vo baza //Sega se zapishuva DateTime.Now vo poleto Timestamp //_messageLogsRepository.UpdateMessageLog(mimMsg.Header.MimHeader.Dir, resultkibs.TimeStamp, // resultkibs.Hash, string.Empty, string.Empty, mimMsg.Header.MimHeader.TransactionId); _messageLogsRepository.UpdateMessageLog(mimMsg.Header.MimHeader.Dir, resultkibs.Hash, string.Empty, string.Empty, mimMsg.Header.MimHeader.TransactionId); //Prethodno se zemashe vrednosta Timestamp od servisot na KIBS, i istata se zapisuvase vo baza //Sega se zapishuva DateTime.Now vo poleto Timestamp //mimMsg.Header.MimHeader.TimeStamp = resultkibs.TimeStamp; //.ToString(); mimMsg.Header.MimHeader.TimeStamp = DateTime.Now; mimMsg.Header.MimAdditionalHeader.TimeStampToken = resultkibs.Hash; } } catch (Exception exception) { _logger.Error("Error while updating mim message: ", exception); throw new Exception("Неуспешна комуникација со KIBS!"); } } catch (Exception ex) { _logger.Info("KIBS error posle DecryptSoapBody: " + ex.Message); throw new Exception("KIBS врати грешка!"); } #endregion _logger.Info("posle LogMimMessage"); var urlToHostedApp = _requestHelper.GetServiceUrl(mimMsg.Header.MimHeader); _logger.Info("urlToHostedApp mimheader e: " + mimMsg.Header.MimHeader); _logger.Info("urlToHostedApp e: " + urlToHostedApp); #region ExecuteRequestToInstitution ResponseInteropCommunication responseEndPointInstitution; string decryptedRequestBodyWrappedInSoapEnvelope = "<s:Envelope xmlns:s=\"http://www.w3.org/2003/05/soap-envelope\"><s:Body>" + decryptBody + "</s:Body></s:Envelope>"; if (mimMsg.Header.MimAdditionalHeader.IsInteropTestCommunicationCall) { responseEndPointInstitution = new ResponseInteropCommunication { Response = @"<s:Envelope xmlns:s=""http://www.w3.org/2003/05/soap-envelope""><s:Body><InteropTestCommunicationService xmlns=""http://tempuri.org/"">InteropTestCommunicationCallResponse</InteropTestCommunicationService></s:Body></s:Envelope>", MimeType = "InteropTestCommunicationCallMimeType" }; } else { try { _logger.Info("Povikot koj se prakja e: " + decryptedRequestBodyWrappedInSoapEnvelope); System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);//sertifikatot ne im e u red za toa go stavam ova za da go ignorira //ovaa linija da se proveri za custom interop fault greski, od tuka pa natamu da se proveruva povikot responseEndPointInstitution = _soapRequestHelper.Execute(decryptedRequestBodyWrappedInSoapEnvelope, contentType, urlToHostedApp, _logger); //ovie dva loga ne gi pravi bidejki direktno odi na exception! _logger.Info("Response institution is: " + responseEndPointInstitution.Response); _logger.Info("Response institution bez envelope is: " + _requestHelper.GetOnlySoapBodyFromString(responseEndPointInstitution.Response)); } //tuka probaj stavi catch (FaultException e) da vidish shto kje vrati catch (FaultException ex) { _logger.Info("dosol vo fault exception."); _logger.Error("Error koj se vrakja od fault exception e: ", ex); _logger.Error("Error koj se vrakja od fault exception Message e: ", ex.Message); _logger.Error("Error koj se vrakja od fault exception inner exception e: ", ex.InnerException.Message); throw; } catch (Exception e) { _logger.Info("catch exception e: " + e.Message); throw new Exception("Сервисот кој го повикавте врати грешка!"); } } #endregion #region Create MIM Message var mimMsgResponse = _mimMsgHelper.CreateMimResponseMsg(mimMsg, responseEndPointInstitution.MimeType); #region Log MIM Message _mimMsgHelper.LogMimMessage(mimMsgResponse, _logger); #endregion string responseWithoutSoapEnvelope = _requestHelper.GetOnlySoapBodyFromString(responseEndPointInstitution.Response); var publicKeyRsa = _mimMsgHelper.GetPublicKeyFromString(publicKey); var encryptedBlock = _mimMsgHelper.EncryptSoapBody(responseWithoutSoapEnvelope, publicKeyRsa); var encryptedSoapBody = Convert.ToBase64String(encryptedBlock.EncryptedData); var encryptedSessionKey = Convert.ToBase64String(encryptedBlock.EncryptedSessionKey); var encriptedIVector = Convert.ToBase64String(encryptedBlock.Iv); mimMsgResponse.Body.MimBody.Message = encryptedSoapBody; mimMsgResponse.Header.CryptoHeader.InitializationVector = encriptedIVector; mimMsgResponse.Header.CryptoHeader.Key = encryptedSessionKey; var doc = _mimMsgHelper.CreateMimXmlMsg(mimMsgResponse); #region KIBS after CreateMimXmlMsg try { KIBSResponse resultkibsResp = null; if (mimMsgResponse.Header.MimAdditionalHeader.IsInteropTestCommunicationCall) { resultkibsResp = new KIBSResponse { Hash = "InteropTestCommunicationCallHash" }; } else { if (AppSettings.Get <string>("KIBSEnviroment") != null) { if (AppSettings.Get <string>("KIBSEnviroment") == "Test") { _logger.Info("Se koristi testen KIBS."); resultkibsResp = KIBS.KIBS.GenerateTimeStamp(doc.ToString()); } if (AppSettings.Get <string>("KIBSEnviroment") == "Production") { _logger.Info("Se koristi produkciski KIBS."); resultkibsResp = KIBS.KIBS.GenerateTimeStampProduction(doc.ToString()); } } //resultkibsResp = new KIBSResponse //{ // Hash = "InteropTestCommunicationCallHash", // TimeStamp = DateTime.Now //}; } try { if (resultkibsResp != null) { //Prethodno se zemashe vrednosta Timestamp od servisot na KIBS, i istata se zapisuvase vo baza //Sega se zapishuva DateTime.Now vo poleto Timestamp //_messageLogsRepository.UpdateMessageLog(mimMsgResponse.Header.MimHeader.Dir, resultkibsResp.TimeStamp, resultkibsResp.Hash, string.Empty, string.Empty, mimMsg.Header.MimHeader.TransactionId); _messageLogsRepository.UpdateMessageLog(mimMsgResponse.Header.MimHeader.Dir, resultkibsResp.Hash, string.Empty, string.Empty, mimMsg.Header.MimHeader.TransactionId); //Prethodno se zemashe vrednosta Timestamp od servisot na KIBS, i istata se zapisuvase vo baza //Sega se zapishuva DateTime.Now vo poleto Timestamp //mimMsgResponse.Header.MimHeader.TimeStamp = resultkibsResp.TimeStamp;//.ToString(); mimMsgResponse.Header.MimHeader.TimeStamp = DateTime.Now; mimMsgResponse.Header.MimAdditionalHeader.TimeStampToken = resultkibsResp.Hash; } } catch (Exception exception) { _logger.Info("KIBS error: " + exception.Message); throw new Exception("KIBS врати грешка: " + exception.Message); } } catch (Exception ex) { _logger.Info("KIBS error after CreateMimXmlMsg: " + ex.Message); throw new Exception("KIBS врати грешка: " + ex.Message); } #endregion var mimMsgResponseXml = _mimMsgHelper.CreateMimSignedXmlMsg(mimMsgResponse, ownCert, _logger); //Check for need of encryption #endregion #region Log SOAP Response Message if (logSoap) { //LogHelper.WriteInNLoc("", "", mimMsgResponseXml, "Response_" + DateTime.Now, "Info"); _logger.Info(mimMsgResponseXml, "Response"); } #endregion HttpContext.Current.Response.ContentType = "application/soap+xml"; context.Response.Write(mimMsgResponseXml); } catch (FaultException ex) { _logger.Info("dosol vo fault exception."); _logger.Error("Error koj se vrakja od fault exception e: ", ex); _logger.Info("validTID vo glavniot catch e: " + validTId); if (validTId) { var soapFault = _mimMsgHelper.CreateSoapFault("Code value", "Code - SubCode value", "Details - MaxTime value", ex.Message); var soapFaultDB = _soapRequestHelper.CreateSoapFaultDB(transactionId, soapFault.Body.Fault.Code.value, soapFault.Body.Fault.Code.Subcode.value, soapFault.Body.Fault.Detail.maxTime, soapFault.Body.Fault.Reason.Text.value); try { _soapFaultRepo.InsertSoapFault(soapFaultDB); } catch (Exception exception) { _logger.Error(exception, "Nastanata greska pri kreiranje na soap fault vo baza."); } var soapFaultXml = _mimMsgHelper.CreateFaultMessage(soapFault); _logger.Error(soapFault.Body.Fault.Reason.Text.value, ex, "Error on response"); HttpContext.Current.Response.ContentType = "application/soap+xml"; HttpContext.Current.Response.Write(soapFaultXml.InnerXml); } } catch (Exception ex) { _logger.Error("odma u catch", ex); _logger.Info("validTID vo glavniot catch e: " + validTId); if (validTId) { var soapFault = _mimMsgHelper.CreateSoapFault("Code value", "Code - SubCode value", "Details - MaxTime value", ex.Message); var soapFaultDb = _soapRequestHelper.CreateSoapFaultDB(transactionId, soapFault.Body.Fault.Code.value, soapFault.Body.Fault.Code.Subcode.value, soapFault.Body.Fault.Detail.maxTime, soapFault.Body.Fault.Reason.Text.value); try { _soapFaultRepo.InsertSoapFault(soapFaultDb); } catch (Exception exception) { _logger.Error(exception, "Nastanata greska pri kreiranje na soap fault vo baza."); } var soapFaultXml = _mimMsgHelper.CreateFaultMessage(soapFault); _logger.Error(soapFault.Body.Fault.Reason.Text.value, ex, "Error on response"); HttpContext.Current.Response.ContentType = "application/soap+xml"; HttpContext.Current.Response.Write(soapFaultXml.InnerXml); } } }