Exemple #1
0
        private static Forretningskvitteringfelter HentForretningskvitteringFelter(IntegrasjonspunktKvittering integrasjonspunktKvittering)
        {
            var forretningskvittergFelter = new Forretningskvitteringfelter();

            XmlDocument document = new XmlDocument();

            document.LoadXml(integrasjonspunktKvittering.rawReceipt);

            try
            {
                var guidNode = GetXmlNodeFromDocument(document, "//ns3:BusinessScope/ns3:Scope/ns3:InstanceIdentifier");
                forretningskvittergFelter.KonversasjonsId = new Guid(guidNode.InnerText);

                forretningskvittergFelter.IntegrasjonsPunktId = integrasjonspunktKvittering.id;

                var tidspunktNode = GetXmlNodeFromDocument(document, "//ns9:tidspunkt");
                forretningskvittergFelter.Generert = Convert.ToDateTime(tidspunktNode.InnerText);

                var bodyReferenceNode = document.SelectSingleNode("//ns9:kvittering/ns5:Signature/ns5:SignedInfo/ns5:Reference", GetNamespaceManager(document));
                forretningskvittergFelter.BodyReferenceUri = bodyReferenceNode.Attributes["URI"].Value;
                forretningskvittergFelter.DigestValue      = bodyReferenceNode.SelectSingleNode("//ds:DigestValue", GetNamespaceManager(document)).InnerText;
            }
            catch (Exception e)
            {
                throw new XmlParseException($"Feil under bygging av {e.GetType()} (av type Forretningskvittering).", e);
            }

            return(forretningskvittergFelter);
        }
Exemple #2
0
            public void ParserReturpostkvittering()
            {
                //Arrange
                var          xml                   = KvitteringsUtility.Forretningskvittering.ReturpostkvitteringXml();
                const string konversasjonsId       = "2049057a-9b53-41bb-9cc3-d10f55fa0f87";
                const string meldingsId            = "7142d8ab-9408-4cb5-8b80-dca3618dd722";
                const string referanseTilMeldingId = "2049057a-9b53-41bb-9cc3-d10f55fa0f87";
                const string tidspunkt             = "2015-11-10T08:26:49.797+01:00";

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

                //Act
                var returpostkvittering = Kvitteringsparser.TilReturpostkvittering(kvittering);

                //Assert
                Assert.Equal(konversasjonsId, returpostkvittering.KonversasjonsId.ToString());
                Assert.Equal(meldingsId, returpostkvittering.MeldingsId);
                Assert.Equal(referanseTilMeldingId, returpostkvittering.ReferanseTilMeldingId);
                Assert.Equal(DateTime.Parse(tidspunkt), returpostkvittering.Returnert);
                Assert.Equal(xml, returpostkvittering.Xml);
            }
Exemple #3
0
            public void ParserÅpningskvittering()
            {
                //Arrange
                var          xml                   = KvitteringsUtility.Forretningskvittering.ÅpningskvitteringXml();
                const string konversasjonsId       = "1d4aff36-b6d2-4506-bc0b-bd62ae6f8966";
                const string meldingsId            = "2d476cb1-cf9a-4210-ba74-ee095f41c9f2";
                const string referanseTilMeldingId = "1d4aff36-b6d2-4506-bc0b-bd62ae6f8966";
                const string tidspunkt             = "2015-11-09T16:11:31.171+01:00";

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

                //Act
                var åpningskvittering = Kvitteringsparser.TilÅpningskvittering(kvittering);

                //Assert
                Assert.Equal(konversasjonsId, åpningskvittering.KonversasjonsId.ToString());
                Assert.Equal(meldingsId, åpningskvittering.MeldingsId);
                Assert.Equal(referanseTilMeldingId, åpningskvittering.ReferanseTilMeldingId);
                Assert.Equal(DateTime.Parse(tidspunkt), åpningskvittering.Åpnet);
                Assert.Equal(xml, åpningskvittering.Xml);
            }
Exemple #4
0
            public void ParserFeilmelding()
            {
                //Arrange
                var            xml                   = KvitteringsUtility.Forretningskvittering.FeilmeldingXml();
                const string   konversasjonsId       = "2049057a-9b53-41bb-9cc3-d10f55fa0f87";
                const string   meldingsId            = "7142d8ab-9408-4cb5-8b80-dca3618dd722";
                const string   referanseTilMeldingId = "2049057a-9b53-41bb-9cc3-d10f55fa0f87";
                const string   tidspunkt             = "2015-11-10T08:26:49.797+01:00";
                const string   detaljer              = "detaljer";
                const Feiltype feiltype              = Feiltype.Server;

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

                //Act
                var feilmelding = Kvitteringsparser.TilFeilmelding(kvittering);

                //Assert
                Assert.Equal(konversasjonsId, feilmelding.KonversasjonsId.ToString());
                Assert.Equal(meldingsId, feilmelding.MeldingsId);
                Assert.Equal(referanseTilMeldingId, feilmelding.ReferanseTilMeldingId);
                Assert.Equal(DateTime.Parse(tidspunkt), feilmelding.Feilet);
                Assert.Equal(detaljer, feilmelding.Detaljer);
                Assert.Equal(feiltype, feilmelding.Skyldig);
                Assert.Equal(xml, feilmelding.Xml);
            }
Exemple #5
0
            public void ParserLeveringskvittering()
            {
                //Arrange
                var          xml                   = KvitteringsUtility.Forretningskvittering.LeveringskvitteringXml();
                const string konversasjonsId       = "716cffc1-58aa-4198-98df-281f4a1a1384";
                const string meldingsId            = "5a93d7e9-e9e5-4013-ab19-c32d9eb0f3d0";
                const string referanseTilMeldingId = "716cffc1-58aa-4198-98df-281f4a1a1384";
                const string tidspunkt             = "2015-11-10T08:37:24.695+01:00";

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

                //Act
                var leveringskvittering = Kvitteringsparser.TilLeveringskvittering(kvittering);

                //Assert
                Assert.Equal(konversasjonsId, leveringskvittering.KonversasjonsId.ToString());
                Assert.Equal(meldingsId, leveringskvittering.MeldingsId);
                Assert.Equal(referanseTilMeldingId, leveringskvittering.ReferanseTilMeldingId);
                Assert.Equal(DateTime.Parse(tidspunkt), leveringskvittering.Levert);
            }
Exemple #6
0
            public void ParserVarslingFeiletKvittering()
            {
                //Arrange
                var                  xml                   = KvitteringsUtility.Forretningskvittering.VarslingFeiletKvitteringXml();
                const string         konversasjonsId       = "2049057a-9b53-41bb-9cc3-d10f55fa0f87";
                const string         meldingsId            = "7142d8ab-9408-4cb5-8b80-dca3618dd722";
                const string         referanseTilMeldingId = "2049057a-9b53-41bb-9cc3-d10f55fa0f87";
                const string         tidspunkt             = "2015-11-10T08:26:49.797+01:00";
                const string         beskrivelse           = "Selvvalgt";
                const Varslingskanal varslingskanal        = Varslingskanal.Sms;

                IntegrasjonspunktKvittering kvittering = new IntegrasjonspunktKvittering(
                    1L,
                    DateTime.Parse(tidspunkt),
                    IntegrasjonspunktKvitteringType.FEIL,
                    beskrivelse,
                    xml.InnerXml,
                    Guid.Parse(konversasjonsId),
                    Guid.Parse(meldingsId),
                    1L);

                //Act
                var varslingfeiletkvittering = Kvitteringsparser.TilVarslingFeiletKvittering(kvittering);

                //Assert
                Assert.Equal(konversasjonsId, varslingfeiletkvittering.KonversasjonsId.ToString());
                Assert.Equal(meldingsId, varslingfeiletkvittering.MeldingsId);
                Assert.Equal(referanseTilMeldingId, varslingfeiletkvittering.ReferanseTilMeldingId);
                Assert.Equal(DateTime.Parse(tidspunkt), varslingfeiletkvittering.Feilet);
                Assert.Equal(beskrivelse, varslingfeiletkvittering.Beskrivelse);
                Assert.Equal(varslingskanal, varslingfeiletkvittering.Varslingskanal);
                Assert.Equal(xml, varslingfeiletkvittering.Xml);
            }
            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);
            }
Exemple #8
0
 private static Kvitteringsfelter HentKvitteringsfelter(IntegrasjonspunktKvittering integrasjonspunktKvittering, bool sjekkEtterReferanseTilMeldingsId = true)
 {
     try
     {
         return(ParseKvitteringsFelter(integrasjonspunktKvittering, sjekkEtterReferanseTilMeldingsId));
     }
     catch (Exception e)
     {
         throw new XmlParseException($"Feil under bygging av {e.GetType()} (av type Kvittering).", e);
     }
 }
Exemple #9
0
        public static Åpningskvittering TilÅpningskvittering(IntegrasjonspunktKvittering integrasjonspunktKvittering)
        {
            var kvitteringFelter            = HentKvitteringsfelter(integrasjonspunktKvittering);
            var forretningskvitteringfelter = HentForretningskvitteringFelter(integrasjonspunktKvittering);

            return(new Åpningskvittering(kvitteringFelter.MeldingsId, forretningskvitteringfelter.KonversasjonsId, forretningskvitteringfelter.BodyReferenceUri, forretningskvitteringfelter.DigestValue)
            {
                Generert = forretningskvitteringfelter.Generert,
                ReferanseTilMeldingId = kvitteringFelter.ReferanseTilMeldingId,
                Xml = kvitteringFelter.Xml,
                SendtTidspunkt = kvitteringFelter.SendtTidspunkt
            });
        }
Exemple #10
0
        private static Kvitteringsfelter ParseKvitteringsFelter(IntegrasjonspunktKvittering integrasjonspunktKvittering, bool sjekkEtterReferanseTilMeldingsId)
        {
            XmlDocument document = new XmlDocument();

            document.LoadXml(integrasjonspunktKvittering.rawReceipt);

            return(new Kvitteringsfelter
            {
                SendtTidspunkt = Convert.ToDateTime(GetXmlNodeFromDocument(document, "//ns9:tidspunkt").InnerText),
                MeldingsId = integrasjonspunktKvittering.messageId.ToString(),
                Xml = document,
                ReferanseTilMeldingId = sjekkEtterReferanseTilMeldingsId ? integrasjonspunktKvittering.conversationId.ToString() : null
            });
        }
Exemple #11
0
        public static VarslingFeiletKvittering TilVarslingFeiletKvittering(IntegrasjonspunktKvittering integrasjonspunktKvittering)
        {
            var kvitteringFelter                = HentKvitteringsfelter(integrasjonspunktKvittering);
            var forretningskvitteringfelter     = HentForretningskvitteringFelter(integrasjonspunktKvittering);
            var varslingfeiletKvitteringsfelter = HentVarslingFeiletKvitteringsfelter(integrasjonspunktKvittering);

            return(new VarslingFeiletKvittering(kvitteringFelter.MeldingsId, forretningskvitteringfelter.KonversasjonsId, forretningskvitteringfelter.BodyReferenceUri, forretningskvitteringfelter.DigestValue)
            {
                Generert = forretningskvitteringfelter.Generert,
                ReferanseTilMeldingId = kvitteringFelter.ReferanseTilMeldingId,
                Xml = kvitteringFelter.Xml,
                SendtTidspunkt = kvitteringFelter.SendtTidspunkt,
                Beskrivelse = varslingfeiletKvitteringsfelter.Beskrivelse,
                Varslingskanal = varslingfeiletKvitteringsfelter.Varslingskanal
            });
        }
Exemple #12
0
        public static Feilmelding TilFeilmelding(IntegrasjonspunktKvittering integrasjonspunktKvittering)
        {
            var kvitteringFelter            = HentKvitteringsfelter(integrasjonspunktKvittering);
            var forretningskvitteringfelter = HentForretningskvitteringFelter(integrasjonspunktKvittering);
            var feilmeldingfelter           = HentFeilmeldingsfelter(integrasjonspunktKvittering);

            return(new Feilmelding(kvitteringFelter.MeldingsId, forretningskvitteringfelter.KonversasjonsId, forretningskvitteringfelter.BodyReferenceUri, forretningskvitteringfelter.DigestValue)
            {
                Generert = forretningskvitteringfelter.Generert,
                ReferanseTilMeldingId = kvitteringFelter.ReferanseTilMeldingId,
                Xml = kvitteringFelter.Xml,
                SendtTidspunkt = kvitteringFelter.SendtTidspunkt,
                Skyldig = feilmeldingfelter.SkyldigFeiltype,
                Detaljer = feilmeldingfelter.Detaljer
            });
        }
Exemple #13
0
        /// <summary>
        ///     Bekreft mottak av <see cref="Forretningskvittering" /> mottatt gjennom
        ///     <see cref="HentKvittering(Kvitteringsforespørsel)" />.
        ///     <list type="bullet">
        ///         <listheader>
        ///             <description>
        ///                 <para>Dette legger opp til følgende arbeidsflyt:</para>
        ///             </description>
        ///         </listheader>
        ///         <item>
        ///             <description>
        ///                 <para>
        ///                     <see cref="HentKvittering(Kvitteringsforespørsel)" />.
        ///                 </para>
        ///             </description>
        ///         </item>
        ///         <item>
        ///             <description>
        ///                 <para>Gjør intern prosessering av <see cref="Kvittering">Kvitteringen</see>.</para>
        ///             </description>
        ///         </item>
        ///         <item>
        ///             <description>
        ///                 <para><see cref="BekreftAsync">Bekreft</see> mottak av <see cref="Forretningskvittering" />.</para>
        ///             </description>
        ///         </item>
        ///     </list>
        /// </summary>
        /// <param name="kvittering"></param>
        /// <remarks>
        ///     <see cref="HentKvittering(Kvitteringsforespørsel)" /> kommer ikke til å returnere en ny kvittering før mottak av
        ///     den forrige er bekreftet.
        /// </remarks>
        public async Task BekreftAsync(Forretningskvittering kvittering)
        {
            if (kvittering == null || kvittering.IntegrasjonsPunktId == -1L)
            {
                IntegrasjonspunktKvittering nyKvittering = await RequestHelper.GetReceipt();

                await RequestHelper.ConfirmReceipt(nyKvittering.id);

                _logger.LogDebug($"Bekreftet kvittering, conversationId '{nyKvittering.conversationId}'");
            }
            else
            {
                await RequestHelper.ConfirmReceipt(kvittering.IntegrasjonsPunktId);

                _logger.LogDebug($"Bekreftet kvittering, conversationId '{kvittering.KonversasjonsId}'");
            }
        }
Exemple #14
0
 public static Kvittering GetKvittering(IntegrasjonspunktKvittering integrasjonspunktKvittering)
 {
     if (integrasjonspunktKvittering.rawReceipt != null)
     {
         return(GetKvitteringFromIntegrasjonsPunktKvittering(integrasjonspunktKvittering));
     }
     else if (integrasjonspunktKvittering.status == IntegrasjonspunktKvitteringType.LEVETID_UTLOPT)
     {
         return(new Feilmelding(integrasjonspunktKvittering.messageId.ToString(), integrasjonspunktKvittering.conversationId, "", ""));
     }
     else if (integrasjonspunktKvittering.status == IntegrasjonspunktKvitteringType.ANNET)
     {
         return(new Feilmelding(integrasjonspunktKvittering.messageId.ToString(), integrasjonspunktKvittering.conversationId, "", ""));
     }
     else
     {
         return(new Feilmelding(integrasjonspunktKvittering.messageId.ToString(), integrasjonspunktKvittering.conversationId, "", ""));
     }
 }
Exemple #15
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);
        }
Exemple #16
0
        private static Kvittering GetKvitteringFromIntegrasjonsPunktKvittering(IntegrasjonspunktKvittering integrasjonspunktKvittering)
        {
            var kvittering = LagForretningskvittering(integrasjonspunktKvittering);

            if (kvittering != null)
            {
                return(kvittering);
            }

            XmlDocument xmlDocument = new XmlDocument();

            xmlDocument.LoadXml(integrasjonspunktKvittering.rawReceipt);

            var ingenKvitteringstypeFunnetException = new XmlParseException(
                "Klarte ikke å finne ut hvilken type Kvittering som ble tatt inn. Sjekk rådata for mer informasjon.")
            {
                Xml = xmlDocument
            };

            throw ingenKvitteringstypeFunnetException;
        }
Exemple #17
0
        private static Forretningskvittering LagForretningskvittering(IntegrasjonspunktKvittering kvittering)
        {
            XmlDocument xmlDocument = new XmlDocument();

            xmlDocument.LoadXml(kvittering.rawReceipt);

            if (IsLeveringskvittering(xmlDocument))
            {
                return(Kvitteringsparser.TilLeveringskvittering(kvittering));
            }

            if (IsVarslingFeiletkvittering(xmlDocument))
            {
                return(Kvitteringsparser.TilVarslingFeiletKvittering(kvittering));
            }

            if (IsFeilmelding(xmlDocument))
            {
                return(Kvitteringsparser.TilFeilmelding(kvittering));
            }

            if (IsÅpningskvittering(xmlDocument))
            {
                return(Kvitteringsparser.TilÅpningskvittering(kvittering));
            }

            if (IsMottaksKvittering(xmlDocument))
            {
                return(Kvitteringsparser.TilMottakskvittering(kvittering));
            }

            if (IsReturpost(xmlDocument))
            {
                return(Kvitteringsparser.TilReturpostkvittering(kvittering));
            }

            throw new SikkerDigitalPostException("Ukjent kvitteringstype basert på XML-input fra ip-kvittering.");
        }
Exemple #18
0
        private static Feilmeldingsfelter HentFeilmeldingsfelter(IntegrasjonspunktKvittering integrasjonspunktKvittering)
        {
            var feilmeldingsfelter = new Feilmeldingsfelter();

            XmlDocument document = new XmlDocument();

            document.LoadXml(integrasjonspunktKvittering.rawReceipt);

            try
            {
                var feiltype = GetXmlNodeFromDocument(document, "//ns9:feiltype").InnerText;
                feilmeldingsfelter.SkyldigFeiltype = feiltype.ToLower().Equals(Feiltype.Klient.ToString().ToLower())
                    ? Feiltype.Klient
                    : Feiltype.Server;

                feilmeldingsfelter.Detaljer = GetXmlNodeFromDocument(document, "//ns9:detaljer").InnerText;
            }
            catch (Exception e)
            {
                throw new XmlParseException("Feil under bygging av Feilmelding-kvittering.", e);
            }

            return(feilmeldingsfelter);
        }
Exemple #19
0
        private static VarslingFeiletKvitteringsfelter HentVarslingFeiletKvitteringsfelter(IntegrasjonspunktKvittering integrasjonspunktKvittering)
        {
            var varslingFeiletKvitteringsfelter = new VarslingFeiletKvitteringsfelter();

            XmlDocument document = new XmlDocument();

            document.LoadXml(integrasjonspunktKvittering.rawReceipt);

            try
            {
                var varslingskanal = GetXmlNodeFromDocument(document, "//ns9:varslingskanal").InnerText;
                varslingFeiletKvitteringsfelter.Varslingskanal = varslingskanal == Varslingskanal.Epost.ToString()
                    ? Varslingskanal.Epost
                    : Varslingskanal.Sms;

                var beskrivelseNode = GetXmlNodeFromDocument(document, "//ns9:beskrivelse");
                if (beskrivelseNode != null)
                {
                    varslingFeiletKvitteringsfelter.Beskrivelse = beskrivelseNode.InnerText;
                }
            }
            catch (Exception e)
            {
                throw new XmlParseException(
                          "Feil under bygging av VarslingFeilet-kvittering.", e);
            }

            return(varslingFeiletKvitteringsfelter);
        }