diff --git a/ReleaseNotes.md b/ReleaseNotes.md index f1f654d..cabc22b 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -1,3 +1,7 @@ +# Release 3.0.5 + +- minor refactoring/some bug fixes in testsuite + # Release 3.0.4 - fix missing iat and iss in signedJwks structure diff --git a/gsi-coverage-report/pom.xml b/gsi-coverage-report/pom.xml index 762db6a..c7ba159 100644 --- a/gsi-coverage-report/pom.xml +++ b/gsi-coverage-report/pom.xml @@ -6,7 +6,7 @@ de.gematik.idp gemSekIdp-global - 3.0.4 + 3.0.5 ../pom.xml diff --git a/gsi-server/pom.xml b/gsi-server/pom.xml index 23e56d0..5c4306a 100644 --- a/gsi-server/pom.xml +++ b/gsi-server/pom.xml @@ -7,13 +7,13 @@ de.gematik.idp gemSekIdp-global - 3.0.4 + 3.0.5 ../pom.xml gsi-server - 3.0.4 + 3.0.5 jar gsi-server diff --git a/gsi-testsuite/pom.xml b/gsi-testsuite/pom.xml index 3525570..af249c6 100644 --- a/gsi-testsuite/pom.xml +++ b/gsi-testsuite/pom.xml @@ -7,12 +7,12 @@ de.gematik.idp gemSekIdp-global - 3.0.4 + 3.0.5 ../pom.xml gsi-testsuite - 3.0.4 + 3.0.5 jar Testsuite fuer sektorale IDPs diff --git a/gsi-testsuite/src/test/java/de/gematik/idp/gsi/test/steps/IdpSektoralSteps.java b/gsi-testsuite/src/test/java/de/gematik/idp/gsi/test/steps/IdpSektoralSteps.java index eba3453..55b0a11 100644 --- a/gsi-testsuite/src/test/java/de/gematik/idp/gsi/test/steps/IdpSektoralSteps.java +++ b/gsi-testsuite/src/test/java/de/gematik/idp/gsi/test/steps/IdpSektoralSteps.java @@ -34,10 +34,6 @@ public class IdpSektoralSteps { static final String FED_MASTER_URL = "fedmaster"; static final String ENTITY_STATEMENT_ENDPOINT = "/.well-known/openid-federation"; - public void fetchEntStmnt() { - sendRequestTo("http://" + IDP_SEKTORAL_URL + ENTITY_STATEMENT_ENDPOINT, "GET", null); - } - public void sendRequestTo(final String url, final String httpMethod, final DataTable params) { SerenityRest.useRelaxedHTTPSValidation(); final RequestSpecification reqSpec = SerenityRest.rest(); diff --git a/gsi-testsuite/src/test/java/de/gematik/idp/gsi/test/steps/StepsGlue.java b/gsi-testsuite/src/test/java/de/gematik/idp/gsi/test/steps/StepsGlue.java index 585e745..e5a85cc 100644 --- a/gsi-testsuite/src/test/java/de/gematik/idp/gsi/test/steps/StepsGlue.java +++ b/gsi-testsuite/src/test/java/de/gematik/idp/gsi/test/steps/StepsGlue.java @@ -61,11 +61,6 @@ public class StepsGlue { @Steps IdpSektoralSteps idpSektoralSteps; - @And("Fetch Entity statement") - public void ifetchEntStmnt() { - idpSektoralSteps.fetchEntStmnt(); - } - @Given("Fetch Fed Master's Entity Statement") public void fetchFedMasterSEntityStatement() { idpSektoralSteps.sendRequestTo( diff --git a/gsi-testsuite/src/test/resources/features/gsiSpecificAuthentication.feature b/gsi-testsuite/src/test/resources/features/gsiSpecificAuthentication.feature index be03363..dfd28bf 100644 --- a/gsi-testsuite/src/test/resources/features/gsiSpecificAuthentication.feature +++ b/gsi-testsuite/src/test/resources/features/gsiSpecificAuthentication.feature @@ -19,8 +19,8 @@ Feature: Test GSI specific authentication Background: Initialisiere Testkontext durch Abfrage des Entity Statements - Given Fetch Entity statement - And TGR find request to path "/.well-known/openid-federation" + When TGR sende eine leere GET Anfrage an "${gsi.fachdienstEntityStatementEndpoint}" + And TGR find request to path ".*/.well-known/openid-federation" Then TGR set local variable "pushed_authorization_request_endpoint" to "!{rbel:currentResponseAsString('$..pushed_authorization_request_endpoint')}" Then TGR set local variable "authorization_endpoint" to "!{rbel:currentResponseAsString('$..authorization_endpoint')}" diff --git a/gsi-testsuite/src/test/resources/features/idpsektoralAuthorizationEndpoint.feature b/gsi-testsuite/src/test/resources/features/idpsektoralAuthorizationEndpoint.feature index 2985e35..d708e93 100644 --- a/gsi-testsuite/src/test/resources/features/idpsektoralAuthorizationEndpoint.feature +++ b/gsi-testsuite/src/test/resources/features/idpsektoralAuthorizationEndpoint.feature @@ -19,8 +19,8 @@ Feature: Test IdpSektoral's Auth Endpoint Background: Initialisiere Testkontext durch Abfrage des Entity Statements - Given Fetch Entity statement - And TGR find request to path "/.well-known/openid-federation" + When TGR sende eine leere GET Anfrage an "${gsi.fachdienstEntityStatementEndpoint}" + And TGR find request to path ".*/.well-known/openid-federation" Then TGR set local variable "pushed_authorization_request_endpoint" to "!{rbel:currentResponseAsString('$..pushed_authorization_request_endpoint')}" Then TGR set local variable "authorization_endpoint" to "!{rbel:currentResponseAsString('$..authorization_endpoint')}" @@ -49,13 +49,14 @@ Feature: Test IdpSektoral's Auth Endpoint | request_uri | client_id | | ${requestUri} | gsi.clientid.valid | And TGR find request to path ".*" - Then TGR current response with attribute "$.responseCode" matches "200" + Then TGR current response with attribute "$.responseCode" matches "(200|302)" @TCID:IDPSEKTORAL_AUTH_ENDPOINT_002 @Approval @PRIO:1 @TESTSTUFE:4 + @OpenBug Scenario Outline: IdpSektoral Auth Endpoint - Negativfall - fehlerhaft befüllte Parameter ``` @@ -76,17 +77,27 @@ Feature: Test IdpSektoral's Auth Endpoint | | | And TGR find request to path ".*" Then TGR current response with attribute "$.responseCode" matches "" + And TGR current response at "$.body" matches as JSON: + """ + { + "error": '.*', + "____error_description": '.*', + "____error_uri": '.*' + } + """ + And TGR current response at "$.body.error" matches "" Examples: - | client_id | request_uri | error | responseCode | - | gsi.clientid.valid | urn:ietf:params:oauth:request_uri:ZoWuCxe9C8-uW8T3ngvqoYN-stzw | invalid_request | 200 | - | invalidClient | ${requestUri} | invalid_request | 200 | + | client_id | request_uri | error | responseCode | + | gsi.clientid.valid | urn:ietf:params:oauth:request_uri:ZoWuCxe9C8-uW8T3ngvqoYN-stzw | invalid_request_uri | 400 | + | invalidClient | ${requestUri} | invalid_request | 400 | @TCID:IDPSEKTORAL_AUTH_ENDPOINT_003 @Approval @PRIO:1 @TESTSTUFE:4 + @OpenBug Scenario Outline: IdpSektoral Auth Endpoint - Negativfall - fehlende verpflichtende Parameter ``` @@ -158,4 +169,4 @@ Feature: Test IdpSektoral's Auth Endpoint "____error_uri": '.*' } """ - And TGR current response at "$.body.error" matches "invalid_request" \ No newline at end of file + And TGR current response at "$.body.error" matches "(invalid_request|invalid_request_uri)" \ No newline at end of file diff --git a/gsi-testsuite/src/test/resources/features/idpsektoralEntityStatement.feature b/gsi-testsuite/src/test/resources/features/idpsektoralEntityStatement.feature index dcfef2c..bf149ec 100644 --- a/gsi-testsuite/src/test/resources/features/idpsektoralEntityStatement.feature +++ b/gsi-testsuite/src/test/resources/features/idpsektoralEntityStatement.feature @@ -19,8 +19,8 @@ Feature: Test Entity Statement of IdpSektoral Background: Initialisiere Testkontext durch Abfrage des Entity Statements - Given Fetch Entity statement - And TGR find request to path "/.well-known/openid-federation" + When TGR sende eine leere GET Anfrage an "${gsi.fachdienstEntityStatementEndpoint}" + And TGR find request to path ".*/.well-known/openid-federation" And Expect JWKS in last message and add its keys to truststore @TCID:IDPSEKTORAL_ENTITY_STATEMENT_001 @@ -33,8 +33,8 @@ Feature: Test Entity Statement of IdpSektoral Wir rufen das Entity Statement des IdpSektoral ab und prüfen, ob die Signatur korrekt ist Given TGR clear recorded messages - When Fetch Entity statement - And TGR find request to path "/.well-known/openid-federation" + When TGR sende eine leere GET Anfrage an "${gsi.fachdienstEntityStatementEndpoint}" + And TGR find request to path ".*/.well-known/openid-federation" And Check signature of JWS in last message @TCID:IDPSEKTORAL_ENTITY_STATEMENT_002 @@ -52,8 +52,8 @@ Feature: Test Entity Statement of IdpSektoral - einen JWS enthalten Given TGR clear recorded messages - When Fetch Entity statement - And TGR find request to path "/.well-known/openid-federation" + When TGR sende eine leere GET Anfrage an "${gsi.fachdienstEntityStatementEndpoint}" + And TGR find request to path ".*/.well-known/openid-federation" Then TGR current response with attribute "$.responseCode" matches "200" And TGR current response with attribute "$.header.Content-Type" matches "application/entity-statement\+jwt.*" @@ -70,8 +70,8 @@ Feature: Test Entity Statement of IdpSektoral Der Response Body muss ein JWS mit den folgenden Header Claims sein: Given TGR clear recorded messages - When Fetch Entity statement - And TGR find request to path "/.well-known/openid-federation" + When TGR sende eine leere GET Anfrage an "${gsi.fachdienstEntityStatementEndpoint}" + And TGR find request to path ".*/.well-known/openid-federation" Then TGR current response at "$.body.header" matches as JSON: """ { @@ -93,8 +93,8 @@ Feature: Test Entity Statement of IdpSektoral Der Response Body muss ein JWS mit den korrekten Body Claims sein: Given TGR clear recorded messages - When Fetch Entity statement - And TGR find request to path "/.well-known/openid-federation" + When TGR sende eine leere GET Anfrage an "${gsi.fachdienstEntityStatementEndpoint}" + And TGR find request to path ".*/.well-known/openid-federation" Then TGR current response at "$.body.body" matches as JSON: """ { @@ -120,8 +120,8 @@ Feature: Test Entity Statement of IdpSektoral Der Response Body muss ein JWS sein. Dieser muss einen korrekt aufgebauten Body Claim metadata enthalten Given TGR clear recorded messages - When Fetch Entity statement - And TGR find request to path "/.well-known/openid-federation" + When TGR sende eine leere GET Anfrage an "${gsi.fachdienstEntityStatementEndpoint}" + And TGR find request to path ".*/.well-known/openid-federation" Then TGR current response at "$.body.body.metadata" matches as JSON: """ { @@ -166,8 +166,8 @@ Feature: Test Entity Statement of IdpSektoral """ { name: '.*', - contacts: "${json-unit.ignore}", - homepage_uri: 'http.*' + ____contacts: "${json-unit.ignore}", + ____homepage_uri: 'http.*' } """ And TGR current response at "$.body.body.metadata.federation_entity.contacts.0" matches ".*" @@ -186,8 +186,8 @@ Feature: Test Entity Statement of IdpSektoral Das JWKS muss mindestens einen strukturell korrekten JWK mit use = sig enthalten. Given TGR clear recorded messages - When Fetch Entity statement - And TGR find request to path "/.well-known/openid-federation" + When TGR sende eine leere GET Anfrage an "${gsi.fachdienstEntityStatementEndpoint}" + And TGR find request to path ".*/.well-known/openid-federation" Then TGR current response at "$.body.body.jwks.keys.[?(@.kid.content =='${gsi.sigKeyKid}')]" matches as JSON: """ { @@ -213,8 +213,8 @@ Feature: Test Entity Statement of IdpSektoral In dem Claim scopes_supported müssen (neben möglichen anderen) die von der gematik vorgeschriebenen Scopes enthalten sein Given TGR clear recorded messages - When Fetch Entity statement - And TGR find request to path "/.well-known/openid-federation" + When TGR sende eine leere GET Anfrage an "${gsi.fachdienstEntityStatementEndpoint}" + And TGR find request to path ".*/.well-known/openid-federation" And TGR current response at "$.body.body.metadata.openid_provider.scopes_supported" matches ".*urn:telematik:given_name.*" And TGR current response at "$.body.body.metadata.openid_provider.scopes_supported" matches ".*urn:telematik:geburtsdatum.*" And TGR current response at "$.body.body.metadata.openid_provider.scopes_supported" matches ".*urn:telematik:alter.*" @@ -237,6 +237,6 @@ Feature: Test Entity Statement of IdpSektoral In dem Claim response_types_supported muss (neben möglichen anderen) der Wert "code" enthalten sein Given TGR clear recorded messages - When Fetch Entity statement - And TGR find request to path "/.well-known/openid-federation" + When TGR sende eine leere GET Anfrage an "${gsi.fachdienstEntityStatementEndpoint}" + And TGR find request to path ".*/.well-known/openid-federation" And TGR current response at "$.body.body.metadata.openid_provider.response_types_supported" matches ".*code.*" diff --git a/gsi-testsuite/src/test/resources/features/idpsektoralPushedAuthorizationEndpoint.feature b/gsi-testsuite/src/test/resources/features/idpsektoralPushedAuthorizationEndpoint.feature index e11a959..5385075 100644 --- a/gsi-testsuite/src/test/resources/features/idpsektoralPushedAuthorizationEndpoint.feature +++ b/gsi-testsuite/src/test/resources/features/idpsektoralPushedAuthorizationEndpoint.feature @@ -19,8 +19,8 @@ Feature: Test IdpSektoral's Pushed Auth Endpoint Background: Initialisiere Testkontext durch Abfrage des Entity Statements - Given Fetch Entity statement - And TGR find request to path "/.well-known/openid-federation" + When TGR sende eine leere GET Anfrage an "${gsi.fachdienstEntityStatementEndpoint}" + And TGR find request to path ".*/.well-known/openid-federation" Then TGR set local variable "pushed_authorization_request_endpoint" to "!{rbel:currentResponseAsString('$..pushed_authorization_request_endpoint')}" @TCID:IDPSEKTORAL_PUSHED_AUTH_ENDPOINT_001 @@ -99,7 +99,7 @@ Feature: Test IdpSektoral's Pushed Auth Endpoint Examples: | client_id | redirect_uri | code_challenge_method | response_type | scope | acr_values | error | responseCode | - | notUrl | gsi.redirectUri | S256 | code | gsi.scope | gematik-ehealth-loa-high | invalid_request | 400 | + | notUrl | gsi.redirectUri | S256 | code | gsi.scope | gematik-ehealth-loa-high | invalid_.* | 40.* | | gsi.clientid.valid | gsi.redirectUri | plain | code | gsi.scope | gematik-ehealth-loa-high | invalid_request | 400 | | gsi.clientid.valid | gsi.redirectUri | S256 | token | gsi.scope | gematik-ehealth-loa-high | .* | 400 | | gsi.clientid.valid | gsi.redirectUri | S256 | code | invalidScope | gematik-ehealth-loa-high | invalid_scope | 400 | @@ -195,7 +195,7 @@ Feature: Test IdpSektoral's Pushed Auth Endpoint And TGR current response at "$.body" matches as JSON: """ { - "error": 'invalid_request', + "error": '(invalid_request|invalid_client)', "____error_description": '.*' } """ @@ -219,7 +219,7 @@ Feature: Test IdpSektoral's Pushed Auth Endpoint And TGR current response at "$.body" matches as JSON: """ { - "error": 'invalid_request', + "error": '(invalid_request|invalid_client)', "____error_description": '.*' } """ diff --git a/gsi-testsuite/src/test/resources/features/idpsektoralSignedJwks.feature b/gsi-testsuite/src/test/resources/features/idpsektoralSignedJwks.feature index 62fb4c9..96d0634 100644 --- a/gsi-testsuite/src/test/resources/features/idpsektoralSignedJwks.feature +++ b/gsi-testsuite/src/test/resources/features/idpsektoralSignedJwks.feature @@ -19,8 +19,8 @@ Feature: Test signed Jwks of IdpSektoral Background: Initialisiere Testkontext durch Abfrage des Entity Statements - Given Fetch Entity statement - And TGR find request to path "/.well-known/openid-federation" + When TGR sende eine leere GET Anfrage an "${gsi.fachdienstEntityStatementEndpoint}" + And TGR find request to path ".*/.well-known/openid-federation" And Expect JWKS in last message and add its keys to truststore Then TGR set local variable "signed_jwks_uri" to "!{rbel:currentResponseAsString('$..signed_jwks_uri')}" And TGR set local variable "entity_statement_sig_kid" to "!{rbel:currentResponseAsString('$.body.header.kid')}" diff --git a/gsi-testsuite/src/test/resources/features/idpsektoralTokenEndpoint.feature b/gsi-testsuite/src/test/resources/features/idpsektoralTokenEndpoint.feature index 53a0067..064e8e3 100644 --- a/gsi-testsuite/src/test/resources/features/idpsektoralTokenEndpoint.feature +++ b/gsi-testsuite/src/test/resources/features/idpsektoralTokenEndpoint.feature @@ -19,8 +19,8 @@ Feature: Test IdpSektoral's Token Endpoint Background: Initialisiere Testkontext durch Abfrage des Entity Statements - Given Fetch Entity statement - And TGR find request to path "/.well-known/openid-federation" + When TGR sende eine leere GET Anfrage an "${gsi.fachdienstEntityStatementEndpoint}" + And TGR find request to path ".*/.well-known/openid-federation" Then TGR set local variable "pushed_authorization_request_endpoint" to "!{rbel:currentResponseAsString('$..pushed_authorization_request_endpoint')}" Then TGR set local variable "authorization_endpoint" to "!{rbel:currentResponseAsString('$..authorization_endpoint')}" Then TGR set local variable "token_endpoint" to "!{rbel:currentResponseAsString('$..token_endpoint')}" @@ -51,7 +51,7 @@ Feature: Test IdpSektoral's Token Endpoint "____error_uri": '.*' } """ - And TGR current response at "$.body.error" matches "(invalid_request)|(invalid_grant)" + And TGR current response at "$.body.error" matches "(invalid_request)|(invalid_grant)|(invalid_client)|(unsupported_grant_type)" Examples: | client_id | redirect_uri | code_verifier | grant_type | code | responseCode | diff --git a/gsi-testsuite/src/test/resources/features/registration.feature b/gsi-testsuite/src/test/resources/features/registration.feature index e00b33b..fbe2538 100644 --- a/gsi-testsuite/src/test/resources/features/registration.feature +++ b/gsi-testsuite/src/test/resources/features/registration.feature @@ -35,8 +35,8 @@ Feature: Test Fed Master's Entity Statement about IdpSektoral Wir rufen das Entity Statement des Fed Masters über den IdpSektoral ab und prüfen, ob im jwks ein passender Schlüssel steht Given TGR clear recorded messages - And Fetch Entity statement - And TGR find request to path "/.well-known/openid-federation" + When TGR sende eine leere GET Anfrage an "${gsi.fachdienstEntityStatementEndpoint}" + And TGR find request to path ".*/.well-known/openid-federation" Then TGR set local variable "idpSigKid" to "!{rbel:currentResponseAsString('$.body.header.kid')}" Given TGR clear recorded messages When Send Get Request to "${fedmasterFederationFetchEndpoint}" with diff --git a/gsi-testsuite/tc_properties-external-Idp.yaml b/gsi-testsuite/tc_properties-external-Idp.yaml index 567a86a..2d52236 100644 --- a/gsi-testsuite/tc_properties-external-Idp.yaml +++ b/gsi-testsuite/tc_properties-external-Idp.yaml @@ -15,4 +15,6 @@ codeChallenge: Ca3Ve8jSsBQOBFVqQvLs1E-dGV1BXg2FTvrd-Tg19Vg authorizationCode: eyfadsfds -idToken: eyJhbGciOiJFUzI1NiIsImtpZCI6InB1a19pZHBfc2lnIiwidHlwIjoiSldUIn0=.eyJpc3MiOiJodHRwczovL2lkcC10ZXN0LnplbnRyYWwuaWRwLnNwbGl0ZG5zLnRpLWRpZW5zdGUuZGUiLCJzdWIiOiJodHRwczovL2lkcC10ZXN0LnplbnRyYWwuaWRwLnNwbGl0ZG5zLnRpLWRpZW5zdGUuZGUiLCJpYXQiOjE2MjMwNTYxMzYsImV4cCI6MTYyMzA5OTMzNiwiYXVkIjoiaHR0cHM6Ly9pZHAtdGVzdC56ZW50cmFsLmlkcC5zcGxpdGRucy50aS1kaWVuc3RlLmRlIiwibm9uY2UiOiI5ODc2NSIsImFjciI6ImdlbWF0aWstZWhlYWx0aC1sb2EtaGlnaCIsImFtciI6InVybjp0ZWxlbWF0aWs6YXV0aDplR0siLCJ1cm46dGVsZW1hdGlrOmNsYWltczpwcm9mZXNzaW9uIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJ1cm46dGVsZW1hdGlrOmNsYWltczpnaXZlbl9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyIsInVybjp0ZWxlbWF0aWs6Y2xhaW1zOm9yZ2FuaXphdGlvbiI6IlRlc3QgR0tWLVNWTk9ULVZBTElEIiwidXJuOnRlbGVtYXRpazpjbGFpbXM6aWQiOiJYMTEwNDExNjc1Igp9.Z0mhWFS2TcUtZlj-KAX9ys9Az-MwEvQ6AxRMLh2mKSdG6PKfsxsXJQhldeIzD1s2zcTTe74QPd0xUG8OCz9VuQ \ No newline at end of file +idToken: eyJhbGciOiJFUzI1NiIsImtpZCI6InB1a19pZHBfc2lnIiwidHlwIjoiSldUIn0=.eyJpc3MiOiJodHRwczovL2lkcC10ZXN0LnplbnRyYWwuaWRwLnNwbGl0ZG5zLnRpLWRpZW5zdGUuZGUiLCJzdWIiOiJodHRwczovL2lkcC10ZXN0LnplbnRyYWwuaWRwLnNwbGl0ZG5zLnRpLWRpZW5zdGUuZGUiLCJpYXQiOjE2MjMwNTYxMzYsImV4cCI6MTYyMzA5OTMzNiwiYXVkIjoiaHR0cHM6Ly9pZHAtdGVzdC56ZW50cmFsLmlkcC5zcGxpdGRucy50aS1kaWVuc3RlLmRlIiwibm9uY2UiOiI5ODc2NSIsImFjciI6ImdlbWF0aWstZWhlYWx0aC1sb2EtaGlnaCIsImFtciI6InVybjp0ZWxlbWF0aWs6YXV0aDplR0siLCJ1cm46dGVsZW1hdGlrOmNsYWltczpwcm9mZXNzaW9uIjoiMS4yLjI3Ni4wLjc2LjQuNDkiLCJ1cm46dGVsZW1hdGlrOmNsYWltczpnaXZlbl9uYW1lIjoiRGFyaXVzIE1pY2hhZWwgQnJpYW4gVWJibyIsInVybjp0ZWxlbWF0aWs6Y2xhaW1zOm9yZ2FuaXphdGlvbiI6IlRlc3QgR0tWLVNWTk9ULVZBTElEIiwidXJuOnRlbGVtYXRpazpjbGFpbXM6aWQiOiJYMTEwNDExNjc1Igp9.Z0mhWFS2TcUtZlj-KAX9ys9Az-MwEvQ6AxRMLh2mKSdG6PKfsxsXJQhldeIzD1s2zcTTe74QPd0xUG8OCz9VuQ + +fachdienstEntityStatementEndpoint: http://gsiserver/.well-known/openid-federation \ No newline at end of file diff --git a/pom.xml b/pom.xml index 529b1c2..90360b3 100644 --- a/pom.xml +++ b/pom.xml @@ -7,12 +7,12 @@ org.springframework.boot spring-boot-starter-parent - 3.1.4 + 3.1.5 de.gematik.idp gemSekIdp-global - 3.0.4 + 3.0.5 pom gsi - gematik sektoraler IDP @@ -78,9 +78,9 @@ 3.24.2 1.76 - 2.14.0 + 2.15.0 20231013 - 2.21.0 + 2.21.1 3.4.2 5.3.0 3.14.5 @@ -97,10 +97,10 @@ 3.1.0 1.18.30 3.8.6 - 3.3.1 + 3.3.2 3.11.0 3.4.1 - 3.1.2 + 3.2.1 3.1.0 3.3.0 3.4.1 @@ -110,13 +110,13 @@ 3.12.1 3.2.1 - 3.1.2 + 3.2.1 1.6.13 3.10.0.2594 2.40.0 1.16.0 3.0.1 - 2.2.0 + 2.2.1 false