/*
         * Function verifies if the AS2 message is signed and the required certificate is present in the Sender's profile in Services world.
         * If the certificate is present, it will assign the certificate ID to the Services certificateId field.
         * If the certificate is not present, the migration will still succeed showing a warning message displaying the Agreement name and missing thumbprint.
         */
        private void CleanAs2ProtocolSettings(Services.AS2ProtocolSettings cloudProtocolSettings, Services.BusinessProfile senderProfile)
        {
            if (cloudProtocolSettings.MessageSigned == true && cloudProtocolSettings.SigningCertificateId == null)
            {
                var certificateReference = senderProfile.CertificateReferences.Where(cert => cert.Thumbprint == cloudProtocolSettings.SigningCertificateThumbprint).FirstOrDefault();
                if (certificateReference == null)
                {
                    cloudProtocolSettings.OverrideGroupSigningCertificate = false;
                    cloudProtocolSettings.MessageSigned = false;
                    signingThumbprintMissing            = cloudProtocolSettings.SigningCertificateThumbprint;
                    cloudProtocolSettings.SigningCertificateThumbprint = null;
                }
                else
                {
                    cloudProtocolSettings.SigningCertificateId = certificateReference.Id;
                }
            }

            senderProfileName = senderProfile.Name;
        }
        private Services.AS2ProtocolSettings CreateAS2ProtocolSettings(Server.AS2ProtocolSettings serverProtocolSettings)
        {
            Services.AS2ProtocolSettings cloudProtocolSettings = new Services.AS2ProtocolSettings();
            cloudProtocolSettings.AckHttpExpect100Continue         = serverProtocolSettings.AcknowledgementConnectionSettings.HttpExpect100ContinueSupported;
            cloudProtocolSettings.AckIgnoreCertificateNameMismatch = serverProtocolSettings.AcknowledgementConnectionSettings.IgnoreCertificateNameMismatch;
            cloudProtocolSettings.AckKeepHttpConnectionAlive       = serverProtocolSettings.AcknowledgementConnectionSettings.KeepHttpConnectionAlive;
            cloudProtocolSettings.AckUnfoldHttpHeaders             = serverProtocolSettings.AcknowledgementConnectionSettings.UnfoldHttpHeaders;

            cloudProtocolSettings.AutogenerateFileName = serverProtocolSettings.EnvelopeSettings.AutogenerateFileName;

            cloudProtocolSettings.CheckCertificateRevocationListOnReceive = serverProtocolSettings.ValidationSettings.CheckCertificateRevocationListOnReceive;
            cloudProtocolSettings.CheckCertificateRevocationListOnSend    = serverProtocolSettings.ValidationSettings.CheckCertificateRevocationListOnSend;
            cloudProtocolSettings.CheckDuplicateMessage               = serverProtocolSettings.ValidationSettings.CheckDuplicateMessage;
            cloudProtocolSettings.DispositionNotificationTo           = serverProtocolSettings.MDNSettings.DispositionNotificationTo;
            cloudProtocolSettings.EnableNRRForInboundDecodedMessages  = serverProtocolSettings.SecuritySettings.EnableNRRForInboundDecodedMessages;
            cloudProtocolSettings.EnableNRRForInboundEncodedMessages  = serverProtocolSettings.SecuritySettings.EnableNRRForInboundEncodedMessages;
            cloudProtocolSettings.EnableNRRForInboundMDN              = serverProtocolSettings.SecuritySettings.EnableNRRForInboundMDN;
            cloudProtocolSettings.EnableNRRForOutboundDecodedMessages = serverProtocolSettings.SecuritySettings.EnableNRRForOutboundDecodedMessages;
            cloudProtocolSettings.EnableNRRForOutboundEncodedMessages = serverProtocolSettings.SecuritySettings.EnableNRRForOutboundEncodedMessages;
            cloudProtocolSettings.EnableNRRForOutboundMDN             = serverProtocolSettings.SecuritySettings.EnableNRRForOutboundMDN;
            cloudProtocolSettings.EncryptionAlgorithm = (short)serverProtocolSettings.ValidationSettings.EncryptionAlgorithm;

            cloudProtocolSettings.FileNameTemplate      = serverProtocolSettings.EnvelopeSettings.FileNameTemplate;
            cloudProtocolSettings.HttpExpect100Continue = serverProtocolSettings.MessageConnectionSettings.HttpExpect100ContinueSupported;

            cloudProtocolSettings.IgnoreCertificateNameMismatch = serverProtocolSettings.MessageConnectionSettings.IgnoreCertificateNameMismatch;
            cloudProtocolSettings.InterchangeDuplicatesValidity = serverProtocolSettings.ValidationSettings.InterchangeDuplicatesValidity;
            cloudProtocolSettings.KeepHttpConnectionAlive       = serverProtocolSettings.MessageConnectionSettings.KeepHttpConnectionAlive;
            cloudProtocolSettings.MaximumHttpRetryAttempts      = serverProtocolSettings.ErrorSettings.MaximumHttpRetryAttempts;
            cloudProtocolSettings.MaxResendAttempts             = serverProtocolSettings.ErrorSettings.MaximumResendAttempts;
            cloudProtocolSettings.MDNText            = serverProtocolSettings.MDNSettings.MDNText;
            cloudProtocolSettings.MessageCompressed  = serverProtocolSettings.ValidationSettings.MessageCompressed;
            cloudProtocolSettings.MessageContentType = serverProtocolSettings.EnvelopeSettings.MessageContentType;
            cloudProtocolSettings.MessageEncrypted   = serverProtocolSettings.ValidationSettings.MessageEncrypted;
            if (cloudProtocolSettings.MessageEncrypted == true)
            {
                cloudProtocolSettings.MessageEncrypted                = false;
                cloudProtocolSettings.EncryptionCertificateId         = null;
                cloudProtocolSettings.EncryptionCertificateThumbprint = null;
                isMessageEncrypted = true;
            }

            cloudProtocolSettings.MessageSigned = serverProtocolSettings.ValidationSettings.MessageSigned;
            if (cloudProtocolSettings.MessageSigned == true)
            {
                cloudProtocolSettings.SigningCertificateId         = null;
                cloudProtocolSettings.SigningCertificateThumbprint = serverProtocolSettings.SecuritySettings.SigningCertificateThumbprint;
            }

            cloudProtocolSettings.MicHashingAlgorithm = (short)serverProtocolSettings.MDNSettings.MicHashingAlgorithm;
            cloudProtocolSettings.NeedMDN             = serverProtocolSettings.MDNSettings.NeedMDN;

            cloudProtocolSettings.OverrideGroupSigningCertificate = serverProtocolSettings.SecuritySettings.OverrideGroupSigningCertificate;
            cloudProtocolSettings.OverrideMessageProperties       = serverProtocolSettings.ValidationSettings.OverrideMessageProperties;
            cloudProtocolSettings.OverrideSendPort   = serverProtocolSettings.ErrorSettings.OverrideSendPort;
            cloudProtocolSettings.ProcessMDNtoMsgBox = serverProtocolSettings.MDNSettings.SendInboundMDNToMessageBox;
            cloudProtocolSettings.ProtocolName       = serverProtocolSettings.ProtocolName;
            if (serverProtocolSettings.MDNSettings.ReceiptDeliveryUrl != null)
            {
                cloudProtocolSettings.ReceiptDeliveryUrl = serverProtocolSettings.MDNSettings.ReceiptDeliveryUrl.ToString();
            }

            cloudProtocolSettings.ResendIfMDNNotReceived = serverProtocolSettings.ErrorSettings.ResendIfMDNNotReceived;

            cloudProtocolSettings.SendMDNAsynchronously = serverProtocolSettings.MDNSettings.SendMDNAsynchronously;
            cloudProtocolSettings.SignMDN = serverProtocolSettings.MDNSettings.SignMDN;
            cloudProtocolSettings.SignOutboundMDNIfOptional = serverProtocolSettings.MDNSettings.SignOutboundMDNIfOptional;
            cloudProtocolSettings.SuspendDuplicateMessage   = serverProtocolSettings.ErrorSettings.SuspendDuplicateMessage;
            cloudProtocolSettings.SuspendMessageOnFileNameGenerationError = serverProtocolSettings.EnvelopeSettings.SuspendMessageOnFileNameGenerationError;
            cloudProtocolSettings.TransmitFileNameInMimeHeader            = serverProtocolSettings.EnvelopeSettings.TransmitFileNameInMimeHeader;
            cloudProtocolSettings.UnfoldHttpHeaders = serverProtocolSettings.MessageConnectionSettings.UnfoldHttpHeaders;

            return(cloudProtocolSettings);
        }