All Downloads are FREE. Search and download functionalities are using the official Maven repository.

no.difi.sdp.client2.SikkerDigitalPostKlient Maven / Gradle / Ivy

There is a newer version: 7.0.0-RC2
Show newest version
package no.difi.sdp.client2;

import no.difi.sdp.client2.domain.Databehandler;
import no.difi.sdp.client2.domain.Forsendelse;
import no.difi.sdp.client2.domain.exceptions.SendException;
import no.difi.sdp.client2.domain.kvittering.ForretningsKvittering;
import no.difi.sdp.client2.domain.kvittering.KvitteringForespoersel;
import no.difi.sdp.client2.internal.Billable;
import no.difi.sdp.client2.internal.CertificateValidator;
import no.difi.sdp.client2.internal.DigipostMessageSenderFacade;
import no.difi.sdp.client2.internal.EbmsForsendelseBuilder;
import no.difi.sdp.client2.internal.KvitteringBuilder;
import no.difi.sdp.client2.util.CryptoChecker;
import no.digipost.api.representations.EbmsApplikasjonsKvittering;
import no.digipost.api.representations.EbmsForsendelse;
import no.digipost.api.representations.EbmsPullRequest;
import no.digipost.api.representations.KanBekreftesSomBehandletKvittering;
import no.digipost.api.representations.TransportKvittering;

public class SikkerDigitalPostKlient {

    private final Databehandler databehandler;
    private final EbmsForsendelseBuilder ebmsForsendelseBuilder;
    private final KvitteringBuilder kvitteringBuilder;
    private final DigipostMessageSenderFacade digipostMessageSenderFacade;
    private final KlientKonfigurasjon klientKonfigurasjon;

    /**
     * @param databehandler       parten som er ansvarlig for den tekniske utførelsen av sendingen.
     *                            Se oversikt over aktører for mer informasjon.
     * @param klientKonfigurasjon Oppsett for blant annet oppkoblingen mot meldingsformidler og interceptorer for å få ut data som sendes.
     */
    public SikkerDigitalPostKlient(Databehandler databehandler, KlientKonfigurasjon klientKonfigurasjon) {
        CryptoChecker.checkCryptoPolicy();

        this.ebmsForsendelseBuilder = new EbmsForsendelseBuilder();
        this.kvitteringBuilder = new KvitteringBuilder();
        this.digipostMessageSenderFacade = new DigipostMessageSenderFacade(databehandler, klientKonfigurasjon);

        this.klientKonfigurasjon = klientKonfigurasjon;
        this.databehandler = databehandler;

        CertificateValidator.validate(klientKonfigurasjon.getMiljo(), databehandler.noekkelpar.getVirksomhetssertifikat().getX509Certificate());
    }

    /**
     * Sender en forsendelse til meldingsformidler. Dersom noe feilet i sendingen til meldingsformidler, vil det kastes en exception med beskrivende feilmelding.
     *
     * @param forsendelse Et objekt som har all informasjon klar til å kunne sendes (mottakerinformasjon, sertifikater, dokumenter mm),
     *                    enten digitalt eller fyisk.
     * @throws SendException
     */
    public SendResultat send(Forsendelse forsendelse) throws SendException {
        Billable forsendelseBundleWithBillableBytes = ebmsForsendelseBuilder.buildEbmsForsendelse(databehandler, klientKonfigurasjon.getMeldingsformidlerOrganisasjon(), forsendelse);
        TransportKvittering kvittering = digipostMessageSenderFacade.send(forsendelseBundleWithBillableBytes.entity);

        return new SendResultat(kvittering.messageId, kvittering.refToMessageId, forsendelseBundleWithBillableBytes.billableBytes);
    }

    /**
     * Forespør kvittering for forsendelser. Kvitteringer blir tilgjengeliggjort etterhvert som de er klare i meldingsformidler.
     * Det er ikke mulig å etterspørre kvittering for en spesifikk forsendelse.
     * 

* Dersom det ikke er tilgjengelige kvitteringer skal det ventes følgende tidsintervaller før en ny forespørsel gjøres: *

*
normal
*
Minimum 10 minutter
*
prioritert
*
Minimum 1 minutt
*
*/ public ForretningsKvittering hentKvittering(KvitteringForespoersel kvitteringForespoersel) throws SendException { return hentKvitteringOgBekreftForrige(kvitteringForespoersel, null); } /** * 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. *

* Dersom det ikke er tilgjengelige kvitteringer skal det ventes følgende tidsintervaller før en ny forespørsel gjøres: *

*
normal
*
Minimum 10 minutter
*
prioritert
*
Minimum 1 minutt
*
*/ public ForretningsKvittering hentKvitteringOgBekreftForrige(KvitteringForespoersel kvitteringForespoersel, KanBekreftesSomBehandletKvittering forrigeKvittering) throws SendException { EbmsPullRequest ebmsPullRequest = kvitteringBuilder.buildEbmsPullRequest(klientKonfigurasjon.getMeldingsformidlerOrganisasjon(), kvitteringForespoersel); EbmsApplikasjonsKvittering ebmsApplikasjonsKvittering; if (forrigeKvittering == null) { ebmsApplikasjonsKvittering = digipostMessageSenderFacade.hentKvittering(ebmsPullRequest); } else { ebmsApplikasjonsKvittering = digipostMessageSenderFacade.hentKvittering(ebmsPullRequest, forrigeKvittering); } if (ebmsApplikasjonsKvittering == null) { return null; } return kvitteringBuilder.buildForretningsKvittering(ebmsApplikasjonsKvittering); } /** * Bekreft mottak av forretningskvittering gjennom {@link #hentKvittering(KvitteringForespoersel)}. * {@link #hentKvittering(KvitteringForespoersel)} kommer ikke til å returnere en ny kvittering før mottak av den forrige er bekreftet. *

* Dette legger opp til følgende arbeidsflyt: *

    *
  1. {@link #hentKvittering(KvitteringForespoersel)}
  2. *
  3. Gjør intern prosessering av kvitteringen (lagre til database, og så videre)
  4. *
  5. Bekreft mottak av kvittering
  6. *
*/ public void bekreft(KanBekreftesSomBehandletKvittering forrigeKvittering) throws SendException { digipostMessageSenderFacade.bekreft(forrigeKvittering); } /** * Registrer egen ExceptionMapper. */ public void setExceptionMapper(ExceptionMapper exceptionMapper) { this.digipostMessageSenderFacade.setExceptionMapper(exceptionMapper); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy