package no.difi.sdp.client2; import no.difi.begrep.sdp.schema_v10.SDPAapning; import no.difi.begrep.sdp.schema_v10.SDPFeil; import no.difi.begrep.sdp.schema_v10.SDPFeiltype; import no.difi.begrep.sdp.schema_v10.SDPKvittering; import no.difi.begrep.sdp.schema_v10.SDPLevering; import no.difi.begrep.sdp.schema_v10.SDPMelding; import no.difi.begrep.sdp.schema_v10.SDPMottak; import no.difi.begrep.sdp.schema_v10.SDPReturpost; import no.difi.begrep.sdp.schema_v10.SDPVarslingfeilet; import no.difi.begrep.sdp.schema_v10.SDPVarslingskanal; import no.difi.sdp.client2.domain.AktoerOrganisasjonsnummer; import no.difi.sdp.client2.domain.Avsender; import no.difi.sdp.client2.domain.AvsenderOrganisasjonsnummer; import no.difi.sdp.client2.domain.Databehandler; import no.difi.sdp.client2.domain.DatabehandlerOrganisasjonsnummer; import no.difi.sdp.client2.domain.Dokument; import no.difi.sdp.client2.domain.Dokumentpakke; import no.difi.sdp.client2.domain.Forsendelse; import no.difi.sdp.client2.domain.Mottaker; import no.difi.sdp.client2.domain.NoValidationNoekkelpar; import no.difi.sdp.client2.domain.Noekkelpar; import no.difi.sdp.client2.domain.Prioritet; import no.difi.sdp.client2.domain.Sertifikat; import no.difi.sdp.client2.domain.digital_post.DigitalPost; import no.difi.sdp.client2.domain.digital_post.EpostVarsel; import no.difi.sdp.client2.domain.digital_post.Sikkerhetsnivaa; import no.difi.sdp.client2.domain.digital_post.SmsVarsel; import no.difi.sdp.client2.internal.TrustedCertificates; import no.digipost.api.representations.EbmsAktoer; import no.digipost.api.representations.EbmsApplikasjonsKvittering; import no.digipost.api.representations.Organisasjonsnummer; import no.digipost.api.representations.StandardBusinessDocumentFactory; import no.digipost.security.DigipostSecurity; import org.springframework.core.io.ClassPathResource; import org.unece.cefact.namespaces.standardbusinessdocumentheader.BusinessScope; import org.unece.cefact.namespaces.standardbusinessdocumentheader.DocumentIdentification; import org.unece.cefact.namespaces.standardbusinessdocumentheader.Partner; import org.unece.cefact.namespaces.standardbusinessdocumentheader.PartnerIdentification; import org.unece.cefact.namespaces.standardbusinessdocumentheader.Scope; import org.unece.cefact.namespaces.standardbusinessdocumentheader.StandardBusinessDocument; import org.unece.cefact.namespaces.standardbusinessdocumentheader.StandardBusinessDocumentHeader; import org.w3.xmldsig.DigestMethod; import org.w3.xmldsig.Reference; import org.w3.xmldsig.Transform; import org.w3.xmldsig.Transforms; import java.io.ByteArrayInputStream; import java.io.FileInputStream; import java.io.InputStream; import java.security.KeyStore; import java.security.cert.X509Certificate; import java.text.MessageFormat; import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; import static java.util.Arrays.asList; public class ObjectMother { public static final X509Certificate POSTEN_TEST_CERTIFICATE = DigipostSecurity.readCertificate("certificates/test/posten_test.pem"); public static final X509Certificate POSTEN_PROD_CERTIFICATE = DigipostSecurity.readCertificate("certificates/prod/posten_prod.pem"); public static final String SELVSIGNERT_VIRKSOMHETSSERTIFIKAT_ALIAS = "avsender"; public static final String SELVSIGNERT_VIRKSOMHETSSERTIFIKAT_PASSORD = "password1234"; public static final String TESTMILJO_VIRKSOMHETSSERTIFIKAT_PATH_ENVIRONMENT_VARIABLE = "no_difi_sdp_client2_virksomhetssertifikat_sti"; public static final String TESTMILJO_VIRKSOMHETSSERTIFIKAT_ALIAS_ENVIRONMENT_VARIABLE = "no_difi_sdp_client2_virksomhetssertifikat_alias"; public static final String TESTMILJO_VIRKSOMHETSSERTIFIKAT_PASSWORD_ENVIRONMENT_VARIABLE = "no_difi_sdp_client2_virksomhetssertifikat_passord"; public static String TESTMILJO_VIRKSOMHETSSERTIFIKAT_PATH_VALUE = System.getenv(TESTMILJO_VIRKSOMHETSSERTIFIKAT_PATH_ENVIRONMENT_VARIABLE); public static String TESTMILJO_VIRKSOMHETSSERTIFIKAT_ALIAS_VALUE = System.getenv(TESTMILJO_VIRKSOMHETSSERTIFIKAT_ALIAS_ENVIRONMENT_VARIABLE); public static String TESTMILJO_VIRKSOMHETSSERTIFIKAT_PASSWORD_VALUE = System.getenv(TESTMILJO_VIRKSOMHETSSERTIFIKAT_PASSWORD_ENVIRONMENT_VARIABLE); public static Noekkelpar testEnvironmentNoekkelpar() { return Noekkelpar.fraKeyStoreUtenTrustStore(getVirksomhetssertifikat(), TESTMILJO_VIRKSOMHETSSERTIFIKAT_ALIAS_VALUE, TESTMILJO_VIRKSOMHETSSERTIFIKAT_PASSWORD_VALUE); } public static KeyStore getVirksomhetssertifikat() { KeyStore keyStore; try { keyStore = KeyStore.getInstance("PKCS12"); keyStore.load(new FileInputStream(TESTMILJO_VIRKSOMHETSSERTIFIKAT_PATH_VALUE), TESTMILJO_VIRKSOMHETSSERTIFIKAT_PASSWORD_VALUE.toCharArray()); return keyStore; } catch (Exception e) { throw new RuntimeException(MessageFormat.format("Fant ikke virksomhetssertifikat på sti {0}. Eksporter environmentvariabel {1} til virksomhetssertifikatet.", TESTMILJO_VIRKSOMHETSSERTIFIKAT_PATH_VALUE, TESTMILJO_VIRKSOMHETSSERTIFIKAT_PATH_ENVIRONMENT_VARIABLE), e); } } public static KeyStore testEnvironmentTrustStore() { return getKeyStore("/test-environment-trust-keystore.jceks", "sophisticatedpassword", "jceks"); } private static KeyStore getKeyStore(String path, String password, String keyStoreType) { try { KeyStore keyStore = KeyStore.getInstance(keyStoreType); keyStore.load(new ClassPathResource(path).getInputStream(), password.toCharArray()); return keyStore; } catch (Exception e) { throw new RuntimeException("Kunne ikke laste keystore", e); } } public static Forsendelse forsendelse() { DigitalPost digitalPost = digitalPost(); Dokument hovedDokument = Dokument.builder("Sensitiv brevtittel", "faktura.pdf", new ByteArrayInputStream("hei".getBytes())) .mimeType("application/pdf") .build(); Dokumentpakke dokumentpakke = Dokumentpakke.builder(hovedDokument) .vedlegg(new ArrayList<Dokument>()) .build(); Avsender avsender = avsender(); return Forsendelse.digital(avsender, digitalPost, dokumentpakke) .konversasjonsId(UUID.randomUUID().toString()) .prioritet(Prioritet.PRIORITERT) .spraakkode("NO") .build(); } public static DigitalPost digitalPost() { String varslingsTekst = "Du har mottatt brev i din digitale postkasse"; EpostVarsel epostVarsel = EpostVarsel.builder("example@email.org", varslingsTekst) .varselEtterDager(asList(1, 4, 10)) .build(); Mottaker mottaker = Mottaker.builder("04036125433", "ove.jonsen#6K5A", mottakerSertifikat(), Organisasjonsnummer.of("984661185")) .build(); SmsVarsel smsVarsel = SmsVarsel.builder("4799999999", varslingsTekst) .build(); return DigitalPost.builder(mottaker, "Ikke-sensitiv tittel for forsendelsen") .virkningsdato(new Date()) .aapningskvittering(false) .sikkerhetsnivaa(Sikkerhetsnivaa.NIVAA_3) .epostVarsel(epostVarsel) .smsVarsel(smsVarsel) .build(); } public static Avsender avsender() { return Avsender.builder(avsenderOrganisasjonsnummer()).build(); } public static Sertifikat mottakerSertifikat() { return DigipostMottakerSertifikatTest(); } public static AvsenderOrganisasjonsnummer avsenderOrganisasjonsnummer() { return AktoerOrganisasjonsnummer.of("988015814").forfremTilAvsender(); } private static Sertifikat DigipostMottakerSertifikatTest() { return Sertifikat.fraBase64X509String( "MIIE7jCCA9agAwIBAgIKGBZrmEgzTHzeJjANBgkqhkiG9w0BAQsFADBRMQswCQYD" + "VQQGEwJOTzEdMBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIzAhBgNVBAMM" + "GkJ1eXBhc3MgQ2xhc3MgMyBUZXN0NCBDQSAzMB4XDTE0MDQyNDEyMzA1MVoXDTE3" + "MDQyNDIxNTkwMFowVTELMAkGA1UEBhMCTk8xGDAWBgNVBAoMD1BPU1RFTiBOT1JH" + "RSBBUzEYMBYGA1UEAwwPUE9TVEVOIE5PUkdFIEFTMRIwEAYDVQQFEwk5ODQ2NjEx" + "ODUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCLCxU4oBhtGmJxXZWb" + "dWdzO2uA3eRNW/kPdddL1HYl1iXLV/g+H2Q0ELadWLggkS+1kOd8/jKxEN++biMm" + "mDqqCWbzNdmEd1j4lctSlH6M7tt0ywmXIYdZMz5kxcLAMNXsaqnPdikI9uPJZQEL" + "3Kc8hXhXISvpzP7gYOvKHg41uCxu1xCZQOM6pTlNbxemBYqvES4fRh2xvB9aMjwk" + "B4Nz8jrIsyoPI89i05OmGMkI5BPZt8NTa40Yf3yU+SQECW0GWalB5cxaTMeB01tq" + "slUzBJPV3cQx+AhtQG4hkOhQnAMDJramSPVtwbEnqOjQ+lyNmg5GQ4FJO02ApKJT" + "ZDTHAgMBAAGjggHCMIIBvjAJBgNVHRMEAjAAMB8GA1UdIwQYMBaAFD+u9XgLkqNw" + "IDVfWvr3JKBSAfBBMB0GA1UdDgQWBBQ1gsJfVC7KYGiWVLP7ZwzppyVYTTAOBgNV" + "HQ8BAf8EBAMCBLAwFgYDVR0gBA8wDTALBglghEIBGgEAAwIwgbsGA1UdHwSBszCB" + "sDA3oDWgM4YxaHR0cDovL2NybC50ZXN0NC5idXlwYXNzLm5vL2NybC9CUENsYXNz" + "M1Q0Q0EzLmNybDB1oHOgcYZvbGRhcDovL2xkYXAudGVzdDQuYnV5cGFzcy5uby9k" + "Yz1CdXlwYXNzLGRjPU5PLENOPUJ1eXBhc3MlMjBDbGFzcyUyMDMlMjBUZXN0NCUy" + "MENBJTIwMz9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0MIGKBggrBgEFBQcBAQR+" + "MHwwOwYIKwYBBQUHMAGGL2h0dHA6Ly9vY3NwLnRlc3Q0LmJ1eXBhc3Mubm8vb2Nz" + "cC9CUENsYXNzM1Q0Q0EzMD0GCCsGAQUFBzAChjFodHRwOi8vY3J0LnRlc3Q0LmJ1" + "eXBhc3Mubm8vY3J0L0JQQ2xhc3MzVDRDQTMuY2VyMA0GCSqGSIb3DQEBCwUAA4IB" + "AQCe67UOZ/VSwcH2ov1cOSaWslL7JNfqhyNZWGpfgX1c0Gh+KkO3eVkMSozpgX6M" + "4eeWBWJGELMiVN1LhNaGxBU9TBMdeQ3SqK219W6DXRJ2ycBtaVwQ26V5tWKRN4Ul" + "RovYYiY+nMLx9VrLOD4uoP6fm9GE5Fj0vSMMPvOEXi0NsN+8MUm3HWoBeUCLyFpe" + "7/EPsS/Wud5bb0as/E2zIztRodxfNsoiXNvWaP2ZiPWFunIjK1H/8EcktEW1paiP" + "d8AZek/QQoG0MKPfPIJuqH+WJU3a8J8epMDyVfaek+4+l9XOeKwVXNSOP/JSwgpO" + "JNzTdaDOM+uVuk75n2191Fd7"); } public static Databehandler databehandler() { return Databehandler.builder(databehandlerOrganisasjonsnummer(), selvsignertNoekkelparUtenTrustStore()).build(); } public static Noekkelpar selvsignertNoekkelparUtenTrustStore() { return new NoValidationNoekkelpar(selvsignertKeyStore(), SELVSIGNERT_VIRKSOMHETSSERTIFIKAT_ALIAS, SELVSIGNERT_VIRKSOMHETSSERTIFIKAT_PASSORD); } public static Noekkelpar selvsignertNoekkelparMedTrustStore() { return new NoValidationNoekkelpar(selvsignertKeyStore(), TrustedCertificates.getTrustStore(), SELVSIGNERT_VIRKSOMHETSSERTIFIKAT_ALIAS, SELVSIGNERT_VIRKSOMHETSSERTIFIKAT_PASSORD); } public static DatabehandlerOrganisasjonsnummer databehandlerOrganisasjonsnummer() { return AktoerOrganisasjonsnummer.of("984661185").forfremTilDatabehandler(); } public static KeyStore selvsignertKeyStore() { return getKeyStore("/selfsigned-keystore.jks", SELVSIGNERT_VIRKSOMHETSSERTIFIKAT_PASSORD, "jks"); } public static Mottaker mottaker() { return Mottaker.builder("01129955131", "postkasseadresse", mottakerSertifikat(), Organisasjonsnummer.of("984661185")).build(); } public static EbmsApplikasjonsKvittering createEbmsFeil(final SDPFeiltype feiltype) { SDPFeil sdpFeil = new SDPFeil(null, ZonedDateTime.now(), feiltype, "Feilinformasjon"); return createEbmsKvittering(sdpFeil); } public static EbmsApplikasjonsKvittering createEbmsKvittering(final Object sdpMelding) { Organisasjonsnummer avsenderOrganisasjonsnummer = Organisasjonsnummer.of("984661185"); Organisasjonsnummer mottakerOrganisasjonsnummer = Organisasjonsnummer.of("988015814"); StandardBusinessDocument sbd = new StandardBusinessDocument().withStandardBusinessDocumentHeader( new StandardBusinessDocumentHeader() .withHeaderVersion("1.0") .withSenders(new Partner().withIdentifier(new PartnerIdentification(avsenderOrganisasjonsnummer.getOrganisasjonsnummerMedLandkode(), Organisasjonsnummer.ISO6523_ACTORID))) .withReceivers(new Partner().withIdentifier(new PartnerIdentification(mottakerOrganisasjonsnummer.getOrganisasjonsnummerMedLandkode(), Organisasjonsnummer.ISO6523_ACTORID))) .withDocumentIdentification(new DocumentIdentification() .withStandard("urn:no:difi:sdp:1.0") .withTypeVersion("1.0") .withInstanceIdentifier("instanceIdentifier") .withType(StandardBusinessDocumentFactory.Type.from((SDPMelding) sdpMelding).toString()) .withCreationDateAndTime(ZonedDateTime.now()) ) .withBusinessScope(new BusinessScope() .withScopes(new Scope() .withIdentifier("urn:no:difi:sdp:1.0") .withType("ConversationId") .withInstanceIdentifier(UUID.randomUUID().toString()) ) ) ) .withAny(sdpMelding); EbmsApplikasjonsKvittering build = EbmsApplikasjonsKvittering.create(EbmsAktoer.avsender(avsenderOrganisasjonsnummer), EbmsAktoer.postkasse(mottakerOrganisasjonsnummer), sbd) .withReferences(getReferences()) .withRefToMessageId("RefToMessageId") .build(); return build; } private static List<Reference> getReferences() { List<Reference> incomingReferences = new ArrayList<>(); Reference reference = new Reference(); reference.setURI("#id-f2ecf3b2-101e-433b-a30d-65a9b6779b5a"); incomingReferences.add(reference); List<Transform> transforms = new ArrayList<>(); Transform transform = new Transform(); transform.setAlgorithm("http://www.w3.org/2001/10/xml-exc-c14n#"); transforms.add(transform); DigestMethod digestMethod = new DigestMethod(); digestMethod.setAlgorithm("http://www.w3.org/2001/04/xmlenc#sha256"); reference.setDigestMethod(digestMethod); reference.setDigestValue("xQbKUtuEGSrsgZsSAT5rF+/yflr+hl2cUC4cKyiMxRM=".getBytes()); Transforms transformsContainer = new Transforms(transforms); reference.setTransforms(transformsContainer); return incomingReferences; } public static EbmsApplikasjonsKvittering createEbmsAapningsKvittering() { SDPKvittering aapningsKvittering = new SDPKvittering(null, ZonedDateTime.now(), null, null, new SDPAapning(), null, null); return createEbmsKvittering(aapningsKvittering); } public static EbmsApplikasjonsKvittering createEbmsLeveringsKvittering() { SDPKvittering leveringsKvittering = new SDPKvittering(null, ZonedDateTime.now(), null, null, null, new SDPLevering(), null); return createEbmsKvittering(leveringsKvittering); } public static EbmsApplikasjonsKvittering createEbmsMottaksKvittering() { SDPKvittering mottaksKvittering = new SDPKvittering(null, ZonedDateTime.now(), null, null, null, null, new SDPMottak()); return createEbmsKvittering(mottaksKvittering); } public static EbmsApplikasjonsKvittering createEbmsReturpostKvittering() { SDPKvittering returpostKvittering = new SDPKvittering(null, ZonedDateTime.now(), new SDPReturpost(), null, null, null, null); return createEbmsKvittering(returpostKvittering); } public static EbmsApplikasjonsKvittering createEbmsVarslingFeiletKvittering(final SDPVarslingskanal varslingskanal) { SDPVarslingfeilet sdpVarslingfeilet = new SDPVarslingfeilet(varslingskanal, "Varsling feilet 'Viktig brev'"); SDPKvittering varslingFeiletKvittering = new SDPKvittering(null, ZonedDateTime.now(), null, sdpVarslingfeilet, null, null, null); return createEbmsKvittering(varslingFeiletKvittering); } public static Dokumentpakke dokumentpakke() { Dokument dokument = Dokument.builder("Sensitiv tittel", "filnavn", new ByteArrayInputStream("hei".getBytes())).build(); return Dokumentpakke.builder(dokument).build(); } public static Forsendelse forsendelse(String mpcId, InputStream dokumentStream) { DigitalPost digitalPost = digitalPost(); Dokument hovedDokument = Dokument.builder("Sensitiv brevtittel", "faktura.pdf", dokumentStream) .mimeType("application/pdf") .build(); Dokumentpakke dokumentpakke = Dokumentpakke.builder(hovedDokument) .vedlegg(new ArrayList<Dokument>()) .build(); Avsender avsender = avsender(); return Forsendelse.digital(avsender, digitalPost, dokumentpakke) .konversasjonsId(UUID.randomUUID().toString()) .prioritet(Prioritet.PRIORITERT) .mpcId(mpcId) .spraakkode("NO") .build(); } public static Databehandler databehandlerMedSertifikat(final Organisasjonsnummer organisasjonsnummer, final Noekkelpar noekkelpar) { return Databehandler .builder(AktoerOrganisasjonsnummer.of(organisasjonsnummer).forfremTilDatabehandler(), noekkelpar) .build(); } public static Sertifikat eboksmottakerSertifikatTest() { return Sertifikat.fraBase64X509String( "MIIE+DCCA+CgAwIBAgIKGQiM/jonpcG0VTANBgkqhkiG9w0BAQsFADBRMQswCQYD\n" + "VQQGEwJOTzEdMBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIzAhBgNVBAMM\n" + "GkJ1eXBhc3MgQ2xhc3MgMyBUZXN0NCBDQSAzMB4XDTE0MDYxMjEzNTYzOFoXDTE3\n" + "MDYxMjIxNTkwMFowXzELMAkGA1UEBhMCTk8xEjAQBgNVBAoMCUUtQk9LUyBBUzEU\n" + "MBIGA1UECwwLT3BlcmF0aW9uIDExEjAQBgNVBAMMCUUtQk9LUyBBUzESMBAGA1UE\n" + "BRMJOTk2NDYwMzIwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArDwI\n" + "/8AEOlml4abZt+zXRTxQuzuWTVx8QS2a2zE0BdUE+PO3K8QQpfPzIZVHSrhiDr03\n" + "VRW2zJ5qz2peGhwNw1BRBltndJLuSJBqSdfJ2TbayoBQoHJkg7YvPi11LsM2aYE7\n" + "5tiKN/FUqKIgqMiOz0rbTyjOcNI1cD6ZC0xskZN1ONJqG5Jxqc3NOpPTco/YA7s4\n" + "1v1gUPdPfoXlu5tgnmiMh4Ixwr7x7FK80aj3Akg0eWmHI8P1IxJU8hJI6sthYO0Z\n" + "2d8RCLeXIc4pXAkRBvgKC8I8HEYk6pDxR3UvFlwC96Mj4Ne0EN8yo3ODtT1chPp7\n" + "iyUPiDvNhqSRrp8GEQIDAQABo4IBwjCCAb4wCQYDVR0TBAIwADAfBgNVHSMEGDAW\n" + "gBQ/rvV4C5KjcCA1X1r69ySgUgHwQTAdBgNVHQ4EFgQUBL6S6KHLV/uxUDs5bB6n\n" + "3jZUP/4wDgYDVR0PAQH/BAQDAgSwMBYGA1UdIAQPMA0wCwYJYIRCARoBAAMCMIG7\n" + "BgNVHR8EgbMwgbAwN6A1oDOGMWh0dHA6Ly9jcmwudGVzdDQuYnV5cGFzcy5uby9j\n" + "cmwvQlBDbGFzczNUNENBMy5jcmwwdaBzoHGGb2xkYXA6Ly9sZGFwLnRlc3Q0LmJ1\n" + "eXBhc3Mubm8vZGM9QnV5cGFzcyxkYz1OTyxDTj1CdXlwYXNzJTIwQ2xhc3MlMjAz\n" + "JTIwVGVzdDQlMjBDQSUyMDM/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDCBigYI\n" + "KwYBBQUHAQEEfjB8MDsGCCsGAQUFBzABhi9odHRwOi8vb2NzcC50ZXN0NC5idXlw\n" + "YXNzLm5vL29jc3AvQlBDbGFzczNUNENBMzA9BggrBgEFBQcwAoYxaHR0cDovL2Ny\n" + "dC50ZXN0NC5idXlwYXNzLm5vL2NydC9CUENsYXNzM1Q0Q0EzLmNlcjANBgkqhkiG\n" + "9w0BAQsFAAOCAQEARj4WegvcMeqvt8R2BxB/uoNIjATmoUxlUc1f/vLkqq0fNGMt\n" + "RDAJWlQJ26P6Q+05G+85mK0DkRNWEjZNnX/NzMijygYwgHc0KukMoIVfYngc02Vn\n" + "p2QNk5YC+EGF3WjtuD9D653WkA/eKXNGEkyKPO4Okgr5akDWqUORH2ZvgyIg+r/f\n" + "AScTxj8YhAdooXBh5TSQqWyyCLxspY7TY/qiQ5Yk1nQTUIkrBh3UD2VSeR+ymozO\n" + "9DxzboFRh87BgoT0c9scVo7yWpEkMcjUdZnpvqDQ0vtKFHz/VR7JfRFWpx7JG4Cs\n" + "xDCnMjfCd/jSllWUjrUmKVj7es8CqXcQnjTUZg=="); } }