/// <param name="databehandler">
 /// Virksomhet (offentlig eller privat) som har en kontraktfestet avtale med Avsender med 
 /// formål å dekke hele eller deler av prosessen med å formidle en digital postmelding fra 
 /// Behandlingsansvarlig til Meldingsformidler. Det kan være flere databehandlere som har 
 /// ansvar for forskjellige steg i prosessen med å formidle en digital postmelding.
 /// </param>
 /// <param name="klientkonfigurasjon">Klientkonfigurasjon for klienten. Brukes for å sette parametere
 /// som proxy, timeout og URI til meldingsformidler. For å bruke standardkonfigurasjon, lag
 /// SikkerDigitalPostKlient uten Klientkonfigurasjon som parameter.</param>
 /// <remarks>
 /// Se <a href="http://begrep.difi.no/SikkerDigitalPost/forretningslag/Aktorer">oversikt over aktører</a>
 /// </remarks>
 public SikkerDigitalPostKlient(Databehandler databehandler, Klientkonfigurasjon klientkonfigurasjon)
 {
     _databehandler = databehandler;
     _klientkonfigurasjon = klientkonfigurasjon;
     Logging.Initialize(klientkonfigurasjon);
     FileUtility.BasePath = klientkonfigurasjon.StandardLoggSti;
 }
        /// <param name="databehandler">
        ///     Virksomhet (offentlig eller privat) som har en kontraktfestet avtale med Avsender med
        ///     formål å dekke hele eller deler av prosessen med å formidle en digital postmelding fra
        ///     <see cref="Avsender" /> til Meldingsformidler.
        /// </param>
        /// <param name="klientkonfigurasjon">
        ///     Brukes for å sette parametere som proxy, timeout, logging av forespørsel/respons og selve dokumentpakken.
        /// </param>
        /// <remarks>
        ///     Se <a href="http://begrep.difi.no/SikkerDigitalPost/forretningslag/Aktorer">oversikt over aktører</a>
        /// </remarks>
        public SikkerDigitalPostKlient(Databehandler databehandler, Klientkonfigurasjon klientkonfigurasjon)
        {
            ValidateDatabehandlerCertificateAndThrowIfInvalid(databehandler, klientkonfigurasjon.Miljø);

            Databehandler = databehandler;
            Klientkonfigurasjon = klientkonfigurasjon;
            RequestHelper = new RequestHelper(klientkonfigurasjon);
        }
 /// <summary>
 ///     Settings for DigitalPostForsendelse
 /// </summary>
 public EnvelopeSettings(Forsendelse forsendelse, DocumentBundle documentBundle, Databehandler databehandler, GuidUtility guidUtility, Klientkonfigurasjon konfigurasjon)
 {
     Forsendelse = forsendelse;
     DocumentBundle = documentBundle;
     Databehandler = databehandler;
     GuidUtility = guidUtility;
     Konfigurasjon = konfigurasjon;
 }
 /// <summary>
 /// Settings for DigitalPostForsendelse
 /// </summary>
 public EnvelopeSettings(Forsendelse forsendelse, AsicEArkiv asicEArkiv, Databehandler databehandler, GuidUtility guidHandler, Klientkonfigurasjon konfigurasjon)
 {
     Forsendelse = forsendelse;
     AsicEArkiv = asicEArkiv;
     Databehandler = databehandler;
     GuidHandler = guidHandler;
     Konfigurasjon = konfigurasjon;
 }
            public void Fails_if_invalid_certificate()
            {
                //Arrange
                var databehandler = new Databehandler(new Organisasjonsnummer("988015814"),  DomainUtility.GetAvsenderEnhetstesterSertifikat());
                var klientkonfigurasjon = new Klientkonfigurasjon(Miljø.FunksjoneltTestmiljø);

                //Act
                Assert.Throws<SecurityException>(()=> new SikkerDigitalPostKlient(databehandler, klientkonfigurasjon));
            }
        public void Initier()
        {
            var orgnummerAvsender = new Organisasjonsnummer("123456789");
            var avsender = new Avsender(orgnummerAvsender);

            var orgnummerDatabehandler = new Organisasjonsnummer("987654321");
            var avsendersertifikat = new X509Certificate2();
            var databehandler = new Databehandler(orgnummerDatabehandler, avsendersertifikat);

            avsender.Avsenderidentifikator = "Avsenderidentifikator.I.Organisasjon";
        }
        private void ValidateDatabehandlerCertificateAndThrowIfInvalid(Databehandler databehandler, Miljø miljø)
        {
            var valideringsResultat = CertificateValidator.ValidateCertificateAndChain(
                databehandler.Sertifikat, 
                databehandler.Organisasjonsnummer.Verdi, 
                miljø.CertificateChainValidator.CertificateStore
            );

            if (valideringsResultat.Type != CertificateValidationType.Valid)
            {
                throw new SecurityException($"Sertifikatet som brukes for { nameof(Databehandler) } er ikke gyldig. Prøver du å sende med et testsertifikat i produksjonsmiljø eller omvendt? Grunnen er '{valideringsResultat.Type.ToNorwegianString()}', beskrivelse: '{valideringsResultat.Message}'");

            }
        }
            public void Initializes_fields()
            {
                //Arrange
                var databehandler = new Databehandler(new Organisasjonsnummer("988015814"), DomainUtility.GetAvsenderCertificate());
                var klientkonfigurasjon = new Klientkonfigurasjon(Miljø.FunksjoneltTestmiljø);

                //Act
                var sikkerDigitalPostKlient = new SikkerDigitalPostKlient(databehandler, klientkonfigurasjon);

                //Assert
                Assert.Equal(klientkonfigurasjon, sikkerDigitalPostKlient.Klientkonfigurasjon);
                Assert.Equal(databehandler, sikkerDigitalPostKlient.Databehandler);
                Assert.IsType<RequestHelper>(sikkerDigitalPostKlient.RequestHelper);
            }
        private static void SendPost()
        {
            /*
             * I dette eksemplet er det Posten som er den som produserer informasjon/brev/post som skal formidles (Avsender),
             * Posten som er databehandler, og det er Digipostkassen som skal motta meldingen. 
             */

            Log.Debug(@"--- STARTER Å SENDE POST ---");

            /*
             * SETT OPP MOTTAKER OG INNSTILLINGER
             */
            var postInfo = GenererPostInfo(ErDigitalPostMottaker, ErNorskBrev);
            var avsender = new Avsender(Settings.Default.OrgnummerPosten);

            var databehandler = new Databehandler(
                new Organisasjonsnummer(Settings.Default.OrgnummerPosten),
                Settings.Default.DatabehandlerSertifikatThumbprint);
            avsender.Avsenderidentifikator = "digipost";

            var forsendelse = GenererForsendelse(avsender, postInfo);
            var klientkonfigurasjon = SettOppKlientkonfigurasjon();
            klientkonfigurasjon.AktiverLagringAvDokumentpakkeTilDisk(@"C:\Users\aas\Downloads\");

            var sikkerDigitalPostKlient = new SikkerDigitalPostKlient(databehandler, klientkonfigurasjon);

            /**
             * SEND POST OG MOTTA KVITTERINGER
             */
            SendPost(sikkerDigitalPostKlient, forsendelse);

            Log.Debug(@"--- STARTER Å HENTE KVITTERINGER ---");

            HentKvitteringer(sikkerDigitalPostKlient);

            Console.WriteLine();
            Log.Debug(@"--- FERDIG Å SENDE POST OG MOTTA KVITTERINGER :) --- ");
            Console.ReadKey();
        }
        private static void SendPost()
        {
            /*
             * I dette eksemplet er det Posten som er den som produserer informasjon/brev/post som skal formidles (Avsender),
             * Posten som er teknisk avsender, og det er Digipostkassen som skal motta meldingen. 
             */

            Console.WriteLine("--- STARTER Å SENDE POST ---");

            /*
             * SETT OPP MOTTAKER OG INNSTILLINGER
             */
            PostkasseInnstillinger postkasseInnstillinger = PostkasseInnstillinger.GetPosten();
            var postInfo = GenererPostInfo(postkasseInnstillinger, ErDigitalPostMottaker, ErNorskBrev);
            var avsender = new Avsender(postkasseInnstillinger.OrgNummerBehandlingsansvarlig);

            var databehandler = new Databehandler(postkasseInnstillinger.OrgNummerDatabehandler, "8702F5E55217EC88CF2CCBADAC290BB4312594AC");
            avsender.Avsenderidentifikator = "digipost";

            var forsendelse = GenererForsendelse(avsender, postInfo);
            var klientkonfigurasjon = SettOppKlientkonfigurasjon();
            var sikkerDigitalPostKlient = new SikkerDigitalPostKlient(databehandler, klientkonfigurasjon);


            /**
             * SEND POST OG MOTTA KVITTERINGER
             */
            SendPost(sikkerDigitalPostKlient, forsendelse);

            Console.WriteLine("--- STARTER Å HENTE KVITTERINGER ---");

            HentKvitteringer(sikkerDigitalPostKlient);

            Console.WriteLine();
            Console.WriteLine("--- FERDIG Å SENDE POST OG MOTTA KVITTERINGER :) --- ");
            Console.ReadKey();
        }
        public void SendDigitaltPåVegneAvIntegrasjon()
        {
            //Arrange
            const string testDepartementetAvsenderOrgnummer = "987656789";
            const string postenDatabehandlerOrgnummer = "984661185";
            var avsender = new Avsender(testDepartementetAvsenderOrgnummer);

            var databehandler = new Databehandler(postenDatabehandlerOrgnummer, DomeneUtility.GetAvsenderSertifikat());
            var forsendelse = new Forsendelse(avsender, DomeneUtility.GetDigitalPostInfoEnkel(), DomeneUtility.GetDokumentpakkeUtenVedlegg(), Prioritet.Normal, Guid.NewGuid().ToString());
            var klientKonfig = new Klientkonfigurasjon
            {
                MeldingsformidlerUrl = new Uri(Settings.Default.UrlMeldingsformidler),
                LoggXmlTilFil = true
            };

            //Act
            var sdpKlient = new SikkerDigitalPostKlient(databehandler, klientKonfig);
            var transportkvittering = sdpKlient.Send(forsendelse, true);

            //Assert
            Assert.IsNotNull(transportkvittering);
            var kvittering = HentKvitteringOgBekreft(sdpKlient, "Send digital paa vegne av", forsendelse);
            Assert.IsTrue(kvittering is Leveringskvittering, "Klarte ikke hente kvittering eller feilet kvittering");
        }
 /// <summary>
 ///     Settings for BekreftKvittering
 /// </summary>
 public EnvelopeSettings(Forretningskvittering forrigeKvittering, Databehandler databehandler, GuidUtility guidUtility)
 {
     ForrigeKvittering = forrigeKvittering;
     Databehandler = databehandler;
     GuidUtility = guidUtility;
 }
 /// <summary>
 ///     Settings for KvitteringsEnvelope
 /// </summary>
 public EnvelopeSettings(KvitteringsForespørsel kvitteringsforespørsel, Databehandler databehandler, GuidUtility guidUtility)
 {
     Kvitteringsforespørsel = kvitteringsforespørsel;
     Databehandler = databehandler;
     GuidUtility = guidUtility;
 }
 /// <param name="databehandler">
 /// Virksomhet (offentlig eller privat) som har en kontraktfestet avtale med Avsender med 
 /// formål å dekke hele eller deler av prosessen med å formidle en digital postmelding fra 
 /// Behandlingsansvarlig til Meldingsformidler. Det kan være flere databehandlere som har 
 /// ansvar for forskjellige steg i prosessen med å formidle en digital postmelding.
 /// </param>
 /// <remarks>
 /// Se <a href="http://begrep.difi.no/SikkerDigitalPost/forretningslag/Aktorer">oversikt over aktører</a>
 /// </remarks>
 public SikkerDigitalPostKlient(Databehandler databehandler)
     : this(databehandler, new Klientkonfigurasjon())
 {
 }