diff --git a/docs/antora.yml b/docs/antora.yml
new file mode 100644
index 0000000..65bcea5
--- /dev/null
+++ b/docs/antora.yml
@@ -0,0 +1,3 @@
+name: onecx-help
+title: Help Management
+version: latest
\ No newline at end of file
diff --git a/docs/modules/onecx-help-bff/nav.adoc b/docs/modules/onecx-help-bff/nav.adoc
new file mode 100644
index 0000000..6f2ca6d
--- /dev/null
+++ b/docs/modules/onecx-help-bff/nav.adoc
@@ -0,0 +1 @@
+* xref:onecx-help-bff:index.adoc[Help Bff]
\ No newline at end of file
diff --git a/docs/modules/onecx-help-bff/pages/index.adoc b/docs/modules/onecx-help-bff/pages/index.adoc
new file mode 100644
index 0000000..b2785de
--- /dev/null
+++ b/docs/modules/onecx-help-bff/pages/index.adoc
@@ -0,0 +1,8 @@
+include::onecx-help-bff-attributes.adoc[opts=optional]
+
+== onecx-help-bff
+
+include::docs.adoc[opts=optional]
+
+
+include::onecx-help-bff-docs.adoc[opts=optional]
diff --git a/docs/modules/onecx-help-bff/pages/onecx-help-bff-attributes.adoc b/docs/modules/onecx-help-bff/pages/onecx-help-bff-attributes.adoc
new file mode 100644
index 0000000..48aa211
--- /dev/null
+++ b/docs/modules/onecx-help-bff/pages/onecx-help-bff-attributes.adoc
@@ -0,0 +1,5 @@
+
+:docker-registry: https://github.com/onecx/onecx-help-bff/pkgs/container/onecx-help-bff
+:helm-registry: https://github.com/onecx/onecx-help-bff/pkgs/container/charts%2Fonecx-help-bff
+:properties-file: src/main/resources/application.properties
+:helm-file: src/main/helm/values.yaml
\ No newline at end of file
diff --git a/docs/modules/onecx-help-bff/pages/onecx-help-bff-docs.adoc b/docs/modules/onecx-help-bff/pages/onecx-help-bff-docs.adoc
new file mode 100644
index 0000000..d969906
--- /dev/null
+++ b/docs/modules/onecx-help-bff/pages/onecx-help-bff-docs.adoc
@@ -0,0 +1,66 @@
+
+include::onecx-help-bff-attributes.adoc[opts=optional]
+
+=== Default properties
+
+.{properties-file}
+[%collapsible%open]
+====
+[source,properties,subs=attributes+]
+----
+quarkus.http.auth.permission.health.paths=/q/*
+quarkus.http.auth.permission.health.policy=permit
+quarkus.http.auth.permission.default.paths=/*
+quarkus.http.auth.permission.default.policy=authenticated
+onecx.permissions.application-id=${quarkus.application.name}
+%prod.quarkus.rest-client.onecx_help_svc.url=http://onecx-help-svc:8080
+%prod.quarkus.oidc-client.client-id=${quarkus.application.name}
+org.eclipse.microprofile.rest.client.propagateHeaders=apm-principal-token
+quarkus.openapi-generator.codegen.spec.onecx_help_svc_yaml.config-key=onecx_help_svc
+quarkus.openapi-generator.codegen.spec.onecx_help_svc_yaml.base-package=gen.org.tkit.onecx.help.client
+quarkus.openapi-generator.codegen.spec.onecx_help_svc_yaml.return-response=true
+quarkus.openapi-generator.codegen.input-base-dir=target/tmp/openapi
+quarkus.openapi-generator.codegen.spec.onecx_help_svc_yaml.additional-api-type-annotations=@org.eclipse.microprofile.rest.client.annotation.RegisterClientHeaders;
+quarkus.openapi-generator.codegen.spec.onecx_help_svc_yaml.additional-model-type-annotations=@io.quarkus.runtime.annotations.RegisterForReflection;
+----
+====
+
+=== Extensions
+
+include::onecx-help-bff-extensions.adoc[opts=optional]
+
+=== Container
+
+{docker-registry}[Docker registry]
+
+
+=== Helm
+
+{helm-registry}[Helm registry]
+
+Default values
+
+.{helm-file}
+[source,yaml]
+----
+app:
+ name: bff
+ image:
+ repository: "onecx/onecx-help-bff"
+ operator:
+ # Permission
+ permission:
+ enabled: true
+ spec:
+ permissions:
+ helps:
+ read: permission on all GET requests and POST search
+ write: permission on PUT, POST, PATCH requests, where objects are saved or updated
+ delete: permission on all DELETE requests
+ keycloak:
+ client:
+ enabled: true
+ password: "my-custom-password"
+
+----
+
diff --git a/docs/modules/onecx-help-bff/pages/onecx-help-bff-extensions.adoc b/docs/modules/onecx-help-bff/pages/onecx-help-bff-extensions.adoc
new file mode 100644
index 0000000..2bb1068
--- /dev/null
+++ b/docs/modules/onecx-help-bff/pages/onecx-help-bff-extensions.adoc
@@ -0,0 +1,145 @@
+
+include::onecx-help-bff-attributes.adoc[opts=optional]
+
+[.extension.table.searchable, cols="50,.^15,.^15,.^20"]
+|===
+h| Extensions
+h| Documentation
+h| Configuration
+h| Version
+
+| quarkus-rest
+
+| https://quarkus.io/guides/rest[Link]
+| https://github.com/quarkusio/quarkusio.github.io/blob/develop/_generated-doc/latest/config/quarkus-rest.adoc[Link]
+| 3.9.3
+
+| quarkus-smallrye-openapi
+
+| https://quarkus.io/guides/openapi-swaggerui[Link]
+| https://github.com/quarkusio/quarkusio.github.io/blob/develop/_generated-doc/latest/config/quarkus-smallrye-openapi.adoc[Link]
+| 3.9.3
+
+| quarkus-rest-jackson
+
+| https://quarkus.io/guides/rest-json[Link]
+|
+| 3.9.3
+
+| quarkus-openapi-generator
+
+| https://docs.quarkiverse.io/quarkus-openapi-generator/dev/index.html[Link]
+| https://github.com/quarkiverse/quarkus-openapi-generator/blob/2.4.1/docs/modules/ROOT/pages/includes/quarkus-openapi-generator.adoc[Link]
+| 2.4.1
+
+| quarkus-rest-client-reactive-jackson
+
+| https://quarkus.io/guides/rest-client[Link]
+|
+| 3.9.3
+
+| tkit-quarkus-log-cdi
+
+| https://1000kit.github.io/tkit-quarkus/current/tkit-quarkus/tkit-quarkus-log-cdi.html[Link]
+| https://github.com/1000kit/tkit-quarkus/blob/2.22.0/docs/modules/tkit-quarkus/pages/includes/tkit-quarkus-log-cdi.adoc[Link]
+| 2.22.0
+
+| tkit-quarkus-log-rs
+
+| https://1000kit.github.io/tkit-quarkus/current/tkit-quarkus/tkit-quarkus-log-rs.html[Link]
+| https://github.com/1000kit/tkit-quarkus/blob/2.22.0/docs/modules/tkit-quarkus/pages/includes/tkit-quarkus-log-rs.adoc[Link]
+| 2.22.0
+
+| tkit-quarkus-log-json
+
+| https://1000kit.github.io/tkit-quarkus/current/tkit-quarkus/tkit-quarkus-log-json.html[Link]
+| https://github.com/1000kit/tkit-quarkus/blob/2.22.0/docs/modules/tkit-quarkus/pages/includes/tkit-quarkus-log-json.adoc[Link]
+| 2.22.0
+
+| tkit-quarkus-rest
+
+| https://1000kit.github.io/tkit-quarkus/current/tkit-quarkus/tkit-quarkus-rest.html[Link]
+| https://github.com/1000kit/tkit-quarkus/blob/2.22.0/docs/modules/tkit-quarkus/pages/includes/tkit-quarkus-rest.adoc[Link]
+| 2.22.0
+
+| tkit-quarkus-rest-context
+
+| https://1000kit.github.io/tkit-quarkus/current/tkit-quarkus/tkit-quarkus-rest-context.html[Link]
+| https://github.com/1000kit/tkit-quarkus/blob/2.22.0/docs/modules/tkit-quarkus/pages/includes/tkit-quarkus-rest-context.adoc[Link]
+| 2.22.0
+
+| quarkus-hibernate-validator
+
+| https://quarkus.io/guides/validation[Link]
+| https://github.com/quarkusio/quarkusio.github.io/blob/develop/_generated-doc/latest/config/quarkus-hibernate-validator.adoc[Link]
+| 3.9.3
+
+| quarkus-smallrye-health
+
+| https://quarkus.io/guides/smallrye-health[Link]
+| https://github.com/quarkusio/quarkusio.github.io/blob/develop/_generated-doc/latest/config/quarkus-smallrye-health.adoc[Link]
+| 3.9.3
+
+| quarkus-opentelemetry
+
+| https://quarkus.io/guides/opentelemetry[Link]
+| https://github.com/quarkusio/quarkusio.github.io/blob/develop/_generated-doc/latest/config/quarkus-opentelemetry.adoc[Link]
+| 3.9.3
+
+| quarkus-micrometer-registry-prometheus
+
+| https://quarkus.io/guides/telemetry-micrometer[Link]
+| https://github.com/quarkusio/quarkusio.github.io/blob/develop/_generated-doc/latest/config/quarkus-micrometer-registry-prometheus.adoc[Link]
+| 3.9.3
+
+| quarkus-oidc
+
+| https://quarkus.io/guides/security-oidc-bearer-token-authentication-tutorial[Link]
+| https://github.com/quarkusio/quarkusio.github.io/blob/develop/_generated-doc/latest/config/quarkus-oidc.adoc[Link]
+| 3.9.3
+
+| quarkus-oidc-client-reactive-filter
+
+| https://quarkus.io/guides/security-openid-connect-client-reference[Link]
+| https://github.com/quarkusio/quarkusio.github.io/blob/develop/_generated-doc/latest/config/quarkus-oidc-client-reactive-filter.adoc[Link]
+| 3.9.3
+
+| onecx-permissions
+
+| https://onecx.github.io/docs/onecx-quarkus/current/onecx-quarkus/onecx-permissions.html[Link]
+| https://github.com/onecx/onecx-quarkus/blob/0.17.0/docs/modules/onecx-quarkus/pages/includes/onecx-permissions.adoc[Link]
+| 0.17.0
+
+| tkit-quarkus-security
+
+| https://1000kit.github.io/tkit-quarkus/current/tkit-quarkus/tkit-quarkus-security.html[Link]
+| https://github.com/1000kit/tkit-quarkus/blob/2.22.0/docs/modules/tkit-quarkus/pages/includes/tkit-quarkus-security.adoc[Link]
+| 2.22.0
+
+| onecx-core
+
+| https://onecx.github.io/docs/onecx-quarkus/current/onecx-quarkus/onecx-core.html[Link]
+|
+| 0.17.0
+
+| quarkus-arc
+
+| https://quarkus.io/guides/cdi-reference[Link]
+| https://github.com/quarkusio/quarkusio.github.io/blob/develop/_generated-doc/latest/config/quarkus-arc.adoc[Link]
+| 3.9.3
+
+| quarkus-container-image-docker
+
+| https://quarkus.io/guides/container-image[Link]
+| https://github.com/quarkusio/quarkusio.github.io/blob/develop/_generated-doc/latest/config/quarkus-container-image-docker.adoc[Link]
+| 3.9.3
+
+
+| quarkus-oidc-client
+
+|
+|
+| 3.9.3
+
+
+|===
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index cf3494a..4dcdd2c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,7 +7,7 @@
org.tkit.onecx
onecx-quarkus3-parent
- 0.37.0
+ 0.47.0
onecx-help-bff
@@ -15,7 +15,7 @@
io.quarkus
- quarkus-resteasy-reactive
+ quarkus-rest
io.quarkus
@@ -23,7 +23,7 @@
io.quarkus
- quarkus-resteasy-reactive-jackson
+ quarkus-rest-jackson
io.quarkiverse.openapi.generator
diff --git a/src/main/java/org/tkit/onecx/help/bff/rs/controller/HelpRestController.java b/src/main/java/org/tkit/onecx/help/bff/rs/controller/HelpRestController.java
index 6c50f5d..cab3e06 100644
--- a/src/main/java/org/tkit/onecx/help/bff/rs/controller/HelpRestController.java
+++ b/src/main/java/org/tkit/onecx/help/bff/rs/controller/HelpRestController.java
@@ -8,6 +8,7 @@
import jakarta.ws.rs.core.Response;
import org.eclipse.microprofile.rest.client.inject.RestClient;
+import org.jboss.resteasy.reactive.ClientWebApplicationException;
import org.jboss.resteasy.reactive.RestResponse;
import org.jboss.resteasy.reactive.server.ServerExceptionMapper;
import org.tkit.onecx.help.bff.rs.mappers.ExceptionMapper;
@@ -104,7 +105,7 @@ public RestResponse constraint(ConstraintViolationExce
}
@ServerExceptionMapper
- public Response restException(WebApplicationException ex) {
- return Response.status(ex.getResponse().getStatus()).build();
+ public Response restException(ClientWebApplicationException ex) {
+ return exceptionMapper.clientException(ex);
}
}
diff --git a/src/main/java/org/tkit/onecx/help/bff/rs/mappers/ExceptionMapper.java b/src/main/java/org/tkit/onecx/help/bff/rs/mappers/ExceptionMapper.java
index 880a0a3..bff4ec6 100644
--- a/src/main/java/org/tkit/onecx/help/bff/rs/mappers/ExceptionMapper.java
+++ b/src/main/java/org/tkit/onecx/help/bff/rs/mappers/ExceptionMapper.java
@@ -1,5 +1,7 @@
package org.tkit.onecx.help.bff.rs.mappers;
+import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON;
+
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -9,6 +11,7 @@
import jakarta.validation.Path;
import jakarta.ws.rs.core.Response;
+import org.jboss.resteasy.reactive.ClientWebApplicationException;
import org.jboss.resteasy.reactive.RestResponse;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
@@ -17,6 +20,7 @@
import gen.org.tkit.onecx.help.bff.rs.internal.model.ProblemDetailInvalidParamDTO;
import gen.org.tkit.onecx.help.bff.rs.internal.model.ProblemDetailParamDTO;
import gen.org.tkit.onecx.help.bff.rs.internal.model.ProblemDetailResponseDTO;
+import gen.org.tkit.onecx.permission.model.ProblemDetailResponse;
@Mapper(uses = { OffsetDateTimeMapper.class })
public interface ExceptionMapper {
@@ -27,6 +31,24 @@ default RestResponse constraint(ConstraintViolationExc
return RestResponse.status(Response.Status.BAD_REQUEST, dto);
}
+ default Response clientException(ClientWebApplicationException ex) {
+ if (ex.getResponse().getStatus() == 500) {
+ return Response.status(400).build();
+ } else {
+ if (ex.getResponse().getMediaType() != null
+ && ex.getResponse().getMediaType().toString().equals(APPLICATION_JSON)) {
+ return Response.status(ex.getResponse().getStatus())
+ .entity(map(ex.getResponse().readEntity(ProblemDetailResponse.class))).build();
+ } else {
+ return Response.status(ex.getResponse().getStatus()).build();
+ }
+ }
+ }
+
+ @Mapping(target = "removeParamsItem", ignore = true)
+ @Mapping(target = "removeInvalidParamsItem", ignore = true)
+ ProblemDetailResponseDTO map(ProblemDetailResponse problemDetailResponse);
+
@Mapping(target = "removeParamsItem", ignore = true)
@Mapping(target = "removeInvalidParamsItem", ignore = true)
@Mapping(target = "params", ignore = true)
diff --git a/src/test/java/org/tkit/onecx/help/bff/rs/HelpRestControllerTest.java b/src/test/java/org/tkit/onecx/help/bff/rs/HelpRestControllerTest.java
index 1a8e5df..b980c7c 100644
--- a/src/test/java/org/tkit/onecx/help/bff/rs/HelpRestControllerTest.java
+++ b/src/test/java/org/tkit/onecx/help/bff/rs/HelpRestControllerTest.java
@@ -254,9 +254,7 @@ void getHelpById_shouldReturnNotFound_whenHelpDoesNotExist() {
.withMethod(HttpMethod.GET))
.withPriority(100)
.withId(MOCK_ID)
- .respond(httpRequest -> response().withStatusCode(Response.Status.NOT_FOUND.getStatusCode())
- .withContentType(MediaType.APPLICATION_JSON)
- .withBody(JsonBody.json(Response.status(Response.Status.NOT_FOUND).build())));
+ .respond(httpRequest -> response().withStatusCode(Response.Status.NOT_FOUND.getStatusCode()));
// bff call
var response = given()
@@ -267,7 +265,6 @@ void getHelpById_shouldReturnNotFound_whenHelpDoesNotExist() {
.get(id)
.then()
.statusCode(Response.Status.NOT_FOUND.getStatusCode());
-
Assertions.assertNotNull(response);
}