diff --git a/bom/application/pom.xml b/bom/application/pom.xml index 34dccce7014d8..0d55e5e754476 100644 --- a/bom/application/pom.xml +++ b/bom/application/pom.xml @@ -186,7 +186,7 @@ 2.17.2 1.3.0.Final 1.11.0 - 2.2.3.Final + 2.2.4.Final 0.1.9.Final 0.8.8 1.17.2 @@ -1385,16 +1385,31 @@ quarkus-smallrye-reactive-messaging-amqp ${project.version} + + io.quarkus + quarkus-smallrye-reactive-messaging-amqp-deployment + ${project.version} + io.quarkus quarkus-smallrye-reactive-messaging-mqtt ${project.version} + + io.quarkus + quarkus-smallrye-reactive-messaging-mqtt-deployment + ${project.version} + io.quarkus quarkus-smallrye-reactive-messaging-rabbitmq ${project.version} + + io.quarkus + quarkus-smallrye-reactive-messaging-rabbitmq-deployment + ${project.version} + io.quarkus quarkus-smallrye-metrics diff --git a/build-parent/pom.xml b/build-parent/pom.xml index 8a29b67c29b2f..69917457461c2 100644 --- a/build-parent/pom.xml +++ b/build-parent/pom.xml @@ -89,13 +89,13 @@ http - docker.io/postgres:14.2 - docker.io/mariadb:10.7 + docker.io/postgres:14 + docker.io/mariadb:10.6 docker.io/ibmcom/db2:11.5.7.0a - mcr.microsoft.com/mssql/server:2019-CU15-ubuntu-20.04 + mcr.microsoft.com/mssql/server:2019-latest docker.io/mysql:8.0 docker.io/gvenzl/oracle-xe:21-slim - docker.io/mongo:4.4.13 + docker.io/mongo:4.4 4.13.2 diff --git a/extensions/hibernate-orm/deployment-spi/src/main/java/io.quarkus.hibernate.orm.deployment.spi/DatabaseKindDialectBuildItem.java b/extensions/hibernate-orm/deployment-spi/src/main/java/io/quarkus/hibernate/orm/deployment/spi/DatabaseKindDialectBuildItem.java similarity index 100% rename from extensions/hibernate-orm/deployment-spi/src/main/java/io.quarkus.hibernate.orm.deployment.spi/DatabaseKindDialectBuildItem.java rename to extensions/hibernate-orm/deployment-spi/src/main/java/io/quarkus/hibernate/orm/deployment/spi/DatabaseKindDialectBuildItem.java diff --git a/extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/QuteProcessor.java b/extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/QuteProcessor.java index ce114af8a5eda..d86446af0144d 100644 --- a/extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/QuteProcessor.java +++ b/extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/QuteProcessor.java @@ -186,39 +186,47 @@ void processTemplateErrors(TemplatesAnalysisBuildItem analysis, List { - assertTrue(t.getMessage().contains("Incorrect expression")); + assertTrue(t.getMessage().contains("Found incorrect expressions")); assertTrue(t.getMessage().contains("name.foo()")); }); diff --git a/extensions/resteasy-reactive/quarkus-resteasy-reactive-qute/deployment/src/test/java/io/quarkus/resteasy/reactive/qute/deployment/TypeErrorTest.java b/extensions/resteasy-reactive/quarkus-resteasy-reactive-qute/deployment/src/test/java/io/quarkus/resteasy/reactive/qute/deployment/TypeErrorTest.java index cbaf3ab513024..ac8a13836298f 100644 --- a/extensions/resteasy-reactive/quarkus-resteasy-reactive-qute/deployment/src/test/java/io/quarkus/resteasy/reactive/qute/deployment/TypeErrorTest.java +++ b/extensions/resteasy-reactive/quarkus-resteasy-reactive-qute/deployment/src/test/java/io/quarkus/resteasy/reactive/qute/deployment/TypeErrorTest.java @@ -20,7 +20,7 @@ public class TypeErrorTest { .addAsResource("templates/HelloResource/typedTemplatePrimitives.txt") .addAsResource(new StringAsset("Hello {name}!"), "templates/hello.txt")) .assertException(t -> { - assertTrue(t.getMessage().contains("Incorrect expression")); + assertTrue(t.getMessage().contains("Found incorrect expressions")); assertTrue(t.getMessage().contains("name.foo()")); }); diff --git a/integration-tests/devmode/src/test/java/io/quarkus/test/qute/QuteErrorPageTest.java b/integration-tests/devmode/src/test/java/io/quarkus/test/qute/QuteErrorPageTest.java index be9814850f204..effa9b27abe78 100644 --- a/integration-tests/devmode/src/test/java/io/quarkus/test/qute/QuteErrorPageTest.java +++ b/integration-tests/devmode/src/test/java/io/quarkus/test/qute/QuteErrorPageTest.java @@ -22,7 +22,7 @@ public class QuteErrorPageTest { public void testErrorPage() { config.modifyResourceFile("templates/hello.txt", file -> "{@java.lang.String hello}{hello.foo}"); RestAssured.when().get("/hello").then() - .body(containsString("Incorrect expression found: {hello.foo}")) + .body(containsString("hello.txt:1"), containsString("{hello.foo}")) .statusCode(Status.INTERNAL_SERVER_ERROR.getStatusCode()); } diff --git a/integration-tests/oidc-token-propagation-reactive/pom.xml b/integration-tests/oidc-token-propagation-reactive/pom.xml index af5b04910e051..93212dbcab094 100644 --- a/integration-tests/oidc-token-propagation-reactive/pom.xml +++ b/integration-tests/oidc-token-propagation-reactive/pom.xml @@ -15,6 +15,15 @@ Module that contains OpenID Connect Token Propagation Reactive tests + + io.quarkus + quarkus-resteasy-reactive-jackson + + + io.quarkus + quarkus-test-security-oidc + test + io.quarkus quarkus-junit5 @@ -34,6 +43,19 @@ io.quarkus quarkus-resteasy-reactive + + io.quarkus + quarkus-resteasy-reactive-jackson-deployment + ${project.version} + pom + test + + + * + * + + + io.quarkus quarkus-resteasy-reactive-deployment diff --git a/integration-tests/oidc-token-propagation-reactive/src/main/java/io/quarkus/it/keycloak/ProtectedJwtResource.java b/integration-tests/oidc-token-propagation-reactive/src/main/java/io/quarkus/it/keycloak/ProtectedJwtResource.java new file mode 100644 index 0000000000000..791c4232fd35a --- /dev/null +++ b/integration-tests/oidc-token-propagation-reactive/src/main/java/io/quarkus/it/keycloak/ProtectedJwtResource.java @@ -0,0 +1,52 @@ +package io.quarkus.it.keycloak; + +import javax.annotation.security.RolesAllowed; +import javax.inject.Inject; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.SecurityContext; + +import org.eclipse.microprofile.jwt.JsonWebToken; + +import io.quarkus.security.Authenticated; +import io.quarkus.security.identity.SecurityIdentity; + +@Path("/web-app") +@Authenticated +public class ProtectedJwtResource { + + @Inject + SecurityIdentity identity; + + @Inject + JsonWebToken accessToken; + + @Context + SecurityContext securityContext; + + @GET + @Path("test-security") + @RolesAllowed("viewer") + public String testSecurity() { + return securityContext.getUserPrincipal().getName(); + } + + @POST + @Path("test-security") + @Consumes("application/json") + @RolesAllowed("viewer") + public String testSecurityJson(User user) { + return user.getName() + ":" + securityContext.getUserPrincipal().getName(); + } + + @GET + @Path("test-security-jwt") + @RolesAllowed("viewer") + public String testSecurityJwt() { + return accessToken.getName() + ":" + accessToken.getGroups().iterator().next() + + ":" + accessToken.getClaim("email"); + } +} diff --git a/integration-tests/oidc-token-propagation-reactive/src/main/java/io/quarkus/it/keycloak/User.java b/integration-tests/oidc-token-propagation-reactive/src/main/java/io/quarkus/it/keycloak/User.java new file mode 100644 index 0000000000000..d84af41bcdf4d --- /dev/null +++ b/integration-tests/oidc-token-propagation-reactive/src/main/java/io/quarkus/it/keycloak/User.java @@ -0,0 +1,15 @@ +package io.quarkus.it.keycloak; + +public class User { + + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/integration-tests/oidc-token-propagation-reactive/src/test/java/io/quarkus/it/keycloak/TestSecurityLazyAuthTest.java b/integration-tests/oidc-token-propagation-reactive/src/test/java/io/quarkus/it/keycloak/TestSecurityLazyAuthTest.java new file mode 100644 index 0000000000000..2f4ea6ffb2440 --- /dev/null +++ b/integration-tests/oidc-token-propagation-reactive/src/test/java/io/quarkus/it/keycloak/TestSecurityLazyAuthTest.java @@ -0,0 +1,56 @@ +package io.quarkus.it.keycloak; + +import static org.hamcrest.Matchers.is; + +import org.junit.jupiter.api.Test; + +import io.quarkus.test.common.http.TestHTTPEndpoint; +import io.quarkus.test.junit.QuarkusTest; +import io.quarkus.test.security.TestSecurity; +import io.quarkus.test.security.oidc.Claim; +import io.quarkus.test.security.oidc.OidcSecurity; +import io.restassured.RestAssured; +import io.restassured.http.ContentType; + +@QuarkusTest +@TestHTTPEndpoint(ProtectedJwtResource.class) +public class TestSecurityLazyAuthTest { + + @Test + @TestSecurity(user = "user1", roles = "viewer") + public void testWithDummyUser() { + RestAssured.when().get("test-security").then() + .body(is("user1")); + } + + @Test + @TestSecurity(user = "user1", roles = "tester") + public void testWithDummyUserForbidden() { + RestAssured.when().get("test-security").then().statusCode(403); + } + + @Test + @TestSecurity(user = "user1", roles = "viewer") + public void testPostWithDummyUser() { + RestAssured.given().contentType(ContentType.JSON).when().body("{\"name\":\"user1\"}").post("test-security").then() + .body(is("user1:user1")); + } + + @Test + @TestSecurity(user = "user1", roles = "tester") + public void testPostWithDummyUserForbidden() { + RestAssured.given().contentType(ContentType.JSON).when().body("{\"name\":\"user1\"}").post("test-security").then() + .statusCode(403); + } + + @Test + @TestSecurity(user = "userJwt", roles = "viewer") + @OidcSecurity(claims = { + @Claim(key = "email", value = "user@gmail.com") + }) + public void testJwtGetWithDummyUser() { + RestAssured.when().get("test-security-jwt").then() + .body(is("userJwt:viewer:user@gmail.com")); + } + +} diff --git a/jakarta/rewrite.yml b/jakarta/rewrite.yml index 680eefa754dd8..7c7c3f0481f26 100644 --- a/jakarta/rewrite.yml +++ b/jakarta/rewrite.yml @@ -430,7 +430,7 @@ recipeList: newValue: 2.0 - org.openrewrite.maven.ChangePropertyValue: key: smallrye-jwt.version - newValue: 4.0.0-RC1 + newValue: 4.0.0-RC2 - org.openrewrite.maven.ChangePropertyValue: key: microprofile-lra.version newValue: 2.0-RC1