Esempio n. 1
0
        /// <summary>
        /// Forespør kvittering for forsendelser med mulighet til å samtidig bekrefte på forrige kvittering for å slippe å kjøre eget kall for bekreft.
        /// Kvitteringer blir tilgjengeliggjort etterhvert som de er klare i meldingsformidler. Det er ikke mulig å etterspørre kvittering for en
        /// spesifikk forsendelse.
        /// </summary>
        /// <param name="kvitteringsforespørsel"></param>
        /// <param name="forrigeKvittering"></param>
        /// <returns></returns>
        /// <remarks>
        /// <list type="table">
        /// <listheader><description>Dersom det ikke er tilgjengelige kvitteringer skal det ventes følgende tidsintervaller før en ny forespørsel gjøres</description></listheader>
        /// <item><term>normal</term><description>Minimum 10 minutter</description></item>
        /// <item><term>prioritert</term><description>Minimum 1 minutt</description></item>
        /// </list>
        /// </remarks>
        public async Task <Kvittering> HentKvitteringOgBekreftForrigeAsync(Kvitteringsforespørsel kvitteringsforespørsel, Forretningskvittering forrigeKvittering)
        {
            if (forrigeKvittering != null)
            {
                Bekreft(forrigeKvittering);
            }

            Logging.Log(TraceEventType.Information, "Henter kvittering for " + kvitteringsforespørsel.Mpc);

            var guidHandler         = new GuidUtility();
            var envelopeSettings    = new EnvelopeSettings(kvitteringsforespørsel, _databehandler, guidHandler);
            var kvitteringsenvelope = new KvitteringsforespørselEnvelope(envelopeSettings);

            Logging.Log(TraceEventType.Verbose, "Envelope for kvitteringsforespørsel" + Environment.NewLine + kvitteringsenvelope.Xml().OuterXml);

            ValiderKvitteringsEnvelope(kvitteringsenvelope);

            var soapContainer = new SoapContainer(kvitteringsenvelope);
            var kvittering    = await SendSoapContainer(soapContainer);

            Logg(TraceEventType.Verbose, Guid.Empty, kvitteringsenvelope.Xml().OuterXml, true, true, "Sendt - Kvitteringsenvelope.xml");

            try
            {
                var valideringAvResponsSignatur = new Responsvalidator(kvittering, kvitteringsenvelope.Xml());
                valideringAvResponsSignatur.ValiderHeaderSignatur();
                valideringAvResponsSignatur.ValiderKvitteringSignatur();
            }
            catch (Exception e)
            {
                return(ValiderTransportkvittering(kvittering, kvitteringsenvelope.Xml(), guidHandler));
            }

            return(KvitteringFactory.GetForretningskvittering(kvittering));
        }
            public void ReturnererReturpostkvittering()
            {
                //Arrange
                var xml = KvitteringsUtility.Forretningskvittering.ReturpostkvitteringXml();

                const string konversasjonsId = "2049057a-9b53-41bb-9cc3-d10f55fa0f87";
                const string meldingsId      = "7142d8ab-9408-4cb5-8b80-dca3618dd722";
                const string tidspunkt       = "2015-11-10T08:26:49.797+01:00";

                IntegrasjonspunktKvittering ipkvittering = new IntegrasjonspunktKvittering(
                    1L,
                    DateTime.Parse(tidspunkt),
                    IntegrasjonspunktKvitteringType.ANNET,
                    "",
                    xml.InnerXml,
                    Guid.Parse(konversasjonsId),
                    Guid.Parse(meldingsId),
                    1L);

                //Act
                var kvittering = KvitteringFactory.GetKvittering(ipkvittering);

                //Assert
                Assert.IsType <Returpostkvittering>(kvittering);
            }
            public void ReturnererTomKøKvittering()
            {
                //Arrange
                var xml = KvitteringsUtility.Transportkvittering.TomKøKvitteringXml();

                //Act
                var kvittering = KvitteringFactory.GetKvittering(xml);

                //Assert
                Assert.IsInstanceOfType(kvittering, typeof(TomKøKvittering));
            }
            public void ReturnererÅpningskvittering()
            {
                //Arrange
                var xml = KvitteringsUtility.Forretningskvittering.ÅpningskvitteringXml();

                //Act
                var kvittering = KvitteringFactory.GetKvittering(xml);

                //Assert
                Assert.IsInstanceOfType(kvittering, typeof(Åpningskvittering));
            }
Esempio n. 5
0
            public void ReturnererTomKøKvittering()
            {
                //Arrange
                var xml = KvitteringsUtility.Transportkvittering.TomKøKvitteringXml();

                //Act
                var kvittering = KvitteringFactory.GetKvittering(xml);

                //Assert
                Assert.IsType <TomKøKvittering>(kvittering);
            }
Esempio n. 6
0
            public void ReturnererÅpningskvittering()
            {
                //Arrange
                var xml = KvitteringsUtility.Forretningskvittering.ÅpningskvitteringXml();

                //Act
                var kvittering = KvitteringFactory.GetKvittering(xml);

                //Assert
                Assert.IsType <Åpningskvittering>(kvittering);
            }
Esempio n. 7
0
        /// <summary>
        ///     Sender en forsendelse til meldingsformidler. Dersom noe feilet i sendingen til meldingsformidler, vil det kastes en
        ///     exception.
        /// </summary>
        /// <param name="forsendelse">
        ///     Et objekt som har all informasjon klar til å kunne sendes (mottakerinformasjon, sertifikater,
        ///     vedlegg mm), enten digitalt eller fysisk.
        /// </param>
        /// <param name="lagreDokumentpakke">Hvis satt til true, så lagres dokumentpakken på Klientkonfigurasjon.StandardLoggSti.</param>
        public async Task <Transportkvittering> SendAsync(Forsendelse forsendelse, bool lagreDokumentpakke = false)
        {
            Logging.Log(TraceEventType.Information, forsendelse.KonversasjonsId, "Sender ny forsendelse til meldingsformidler.");

            var guidHandler = new GuidUtility();

            var arkiv = LagAsicEArkiv(forsendelse, lagreDokumentpakke, guidHandler);
            var forretningsmeldingEnvelope = LagForretningsmeldingEnvelope(forsendelse, arkiv, guidHandler);

            Logg(TraceEventType.Verbose, forsendelse.KonversasjonsId, arkiv.Signatur.Xml().OuterXml, true, true, "Sendt - Signatur.xml");
            Logg(TraceEventType.Verbose, forsendelse.KonversasjonsId, arkiv.Manifest.Xml().OuterXml, true, true, "Sendt - Manifest.xml");
            Logg(TraceEventType.Verbose, forsendelse.KonversasjonsId, forretningsmeldingEnvelope.Xml().OuterXml, true, true, "Sendt - Envelope.xml");

            try
            {
                ValiderForretningsmeldingEnvelope(forretningsmeldingEnvelope.Xml());
                ValiderArkivManifest(arkiv.Manifest.Xml());
                ValiderArkivSignatur(arkiv.Signatur.Xml());
            }
            catch (Exception e)
            {
                throw new Exception("Sending av forsendelse feilet under validering. Feilmelding: " + e.GetBaseException(), e.InnerException);
            }

            var soapContainer             = LagSoapContainer(forretningsmeldingEnvelope, arkiv);
            var transportkvitteringRådata = await SendSoapContainer(soapContainer);

            Logg(TraceEventType.Verbose, forsendelse.KonversasjonsId, transportkvitteringRådata, true, true, "Mottatt - Meldingsformidlerespons.txt");
            Logg(TraceEventType.Verbose, forsendelse.KonversasjonsId, new byte[1], true, false, "Sendt - SOAPContainer.txt");

            Logging.Log(TraceEventType.Information, forsendelse.KonversasjonsId, "Kvittering for forsendelse" + Environment.NewLine + transportkvitteringRådata);

            var transportKvittering = (Transportkvittering)KvitteringFactory.GetKvittering(transportkvitteringRådata);

            var transportkvitteringXml = new XmlDocument();

            transportkvitteringXml.LoadXml(transportkvitteringRådata);

            SikkerhetsvalideringAvTransportkvittering(transportkvitteringXml, forretningsmeldingEnvelope.Xml(), guidHandler);

            return(transportKvittering);
        }
Esempio n. 8
0
        /// <summary>
        ///     Forespør <see cref="Kvittering" /> for <see cref="Forsendelse">Forsendelser</see>, med mulighet til å samtidig
        ///     <see cref="BekreftAsync">bekrefte</see> på forrige <see cref="Kvittering" /> for å slippe å
        ///     kjøre eget kall for <see cref="BekreftAsync" />. <see cref="Kvittering">Kvitteringer</see> blir tilgjengeliggjort
        ///     etterhvert som de er klare i Meldingsformidler. Det er ikke mulig å etterspørre
        ///     <see cref="Kvittering" /> for en spesifikk forsendelse.
        /// </summary>
        /// <param name="kvitteringsforespørsel"></param>
        /// <param name="forrigeKvittering"></param>
        /// <returns></returns>
        public async Task <Kvittering> HentKvitteringOgBekreftForrigeAsync(Kvitteringsforespørsel kvitteringsforespørsel,
                                                                           Forretningskvittering forrigeKvittering)
        {
            if (forrigeKvittering != null)
            {
                await BekreftAsync(forrigeKvittering).ConfigureAwait(false);
            }

            var guidUtility = new GuidUtility();

            _logger.LogDebug($"Utgående kvitteringsforespørsel, messageId '{guidUtility.MessageId}'.");


            int GUARD = 100;

            for (int i = 0; i < GUARD; i++)
            {
                IntegrasjonspunktKvittering ipKvittering = await RequestHelper.GetReceipt();

                if (ipKvittering == null)
                {
                    return(new TomKøKvittering());
                }

                var shouldFetchKvitteringAgain =
                    ipKvittering.status == IntegrasjonspunktKvitteringType.SENDT ||
                    ipKvittering.status == IntegrasjonspunktKvitteringType.OPPRETTET;

                if (shouldFetchKvitteringAgain)
                {
                    await RequestHelper.ConfirmReceipt(ipKvittering.id);
                }
                else
                {
                    return(KvitteringFactory.GetKvittering(ipKvittering));
                }
            }

            _logger.LogWarning(
                $"Antall forsøk på å hente kvittering overskredet. Det kan komme av det er mange {IntegrasjonspunktKvitteringType.SENDT}- og {IntegrasjonspunktKvitteringType.OPPRETTET}-kvitteringer på integrasjonspunktkøen. Prøv igjen.");
            return(null);
        }
Esempio n. 9
0
        private static Transportkvittering ValiderTransportkvittering(string meldingsformidlerRespons,
                                                                      XmlDocument forretningsmeldingEnvelope, GuidUtility guidHandler)
        {
            try
            {
                var valideringAvRespons = new Responsvalidator(meldingsformidlerRespons, forretningsmeldingEnvelope);
                valideringAvRespons.ValiderHeaderSignatur();
                valideringAvRespons.ValiderDigest(guidHandler);
            }
            catch (Exception e)
            {
                var transportFeiletKvittering = KvitteringFactory.GetTransportkvittering(meldingsformidlerRespons);
                if (transportFeiletKvittering is TransportOkKvittering)
                {
                    throw new SdpSecurityException("Validering av signatur og digest på respons feilet.", e);
                }
                return(transportFeiletKvittering);
            }

            return(KvitteringFactory.GetTransportkvittering(meldingsformidlerRespons));
        }
Esempio n. 10
0
        /// <summary>
        ///     Forespør kvittering for forsendelser med mulighet til å samtidig bekrefte på forrige kvittering for å slippe å
        ///     kjøre eget kall for bekreft.
        ///     Kvitteringer blir tilgjengeliggjort etterhvert som de er klare i meldingsformidler. Det er ikke mulig å etterspørre
        ///     kvittering for en
        ///     spesifikk forsendelse.
        /// </summary>
        /// <param name="kvitteringsforespørsel"></param>
        /// <param name="forrigeKvittering"></param>
        /// <returns></returns>
        /// <remarks>
        ///     <list type="table">
        ///         <listheader>
        ///             <description>
        ///                 Dersom det ikke er tilgjengelige kvitteringer skal det ventes følgende tidsintervaller før en
        ///                 ny forespørsel gjøres
        ///             </description>
        ///         </listheader>
        ///         <item>
        ///             <term>normal</term><description>Minimum 10 minutter</description>
        ///         </item>
        ///         <item>
        ///             <term>prioritert</term><description>Minimum 1 minutt</description>
        ///         </item>
        ///     </list>
        /// </remarks>
        public async Task <Kvittering> HentKvitteringOgBekreftForrigeAsync(Kvitteringsforespørsel kvitteringsforespørsel, Forretningskvittering forrigeKvittering)
        {
            if (forrigeKvittering != null)
            {
                Bekreft(forrigeKvittering);
            }

            Logging.Log(TraceEventType.Information, "Henter kvittering for " + kvitteringsforespørsel.Mpc);

            var guidUtility      = new GuidUtility();
            var envelopeSettings = new EnvelopeSettings(kvitteringsforespørsel, _databehandler, guidUtility);
            var kvitteringsforespørselEnvelope = new KvitteringsforespørselEnvelope(envelopeSettings);

            Logging.Log(TraceEventType.Verbose, "Envelope for kvitteringsforespørsel" + Environment.NewLine + kvitteringsforespørselEnvelope.Xml().OuterXml);

            ValiderKvitteringsEnvelope(kvitteringsforespørselEnvelope);

            var soapContainer            = new SoapContainer(kvitteringsforespørselEnvelope);
            var kvitteringsresponsrådata = await SendSoapContainer(soapContainer);

            Logg(TraceEventType.Verbose, Guid.Empty, kvitteringsforespørselEnvelope.Xml().OuterXml, true, true, "Sendt - Kvitteringsenvelope.xml");

            var kvitteringsresponsXml = new XmlDocument();

            kvitteringsresponsXml.LoadXml(kvitteringsresponsrådata);

            var kvitteringsrespons = KvitteringFactory.GetKvittering(kvitteringsresponsrådata);

            if (kvitteringsrespons is TomKøKvittering)
            {
                SikkerhetsvalideringAvTomKøKvittering(kvitteringsresponsXml, kvitteringsforespørselEnvelope.Xml());
            }
            else if (kvitteringsrespons is Forretningskvittering)
            {
                SikkerhetsvalideringAvMeldingskvittering(kvitteringsresponsXml, kvitteringsforespørselEnvelope);
            }

            return(kvitteringsrespons);
        }
        public async Task <Kvittering> GetReceipt(KvitteringsforespørselEnvelope kvitteringsforespørselEnvelope)
        {
            var result = await Send(kvitteringsforespørselEnvelope).ConfigureAwait(false);

            return(KvitteringFactory.GetKvittering(result));
        }
        public async Task <Kvittering> SendMessage(ForretningsmeldingEnvelope envelope, DocumentBundle asiceDocumentBundle)
        {
            var result = await Send(envelope, asiceDocumentBundle).ConfigureAwait(false);

            return(KvitteringFactory.GetKvittering(result));
        }