Loading src/main/java/org/etsi/osl/hypo/registry/model/kafka/incoming/KafkaRequestPayload.java +2 −0 Changes for src/main/java/org/etsi/osl/hypo/registry/model/kafka/incoming/KafkaRequestPayload.java: 2 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -17,5 +17,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; public interface KafkaRequestPayload { String getType(); String getServiceId(); String toStringAsJson(); } src/main/java/org/etsi/osl/hypo/registry/model/kafka/incoming/KubeConfigRequest.java +1 −0 Changes for src/main/java/org/etsi/osl/hypo/registry/model/kafka/incoming/KubeConfigRequest.java: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ public class KubeConfigRequest implements KafkaRequestPayload { @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private String type; private String serviceId; private JsonNode serviceOperationRequest; private String kubernetesServiceID; private List<String> secretNames; Loading src/main/java/org/etsi/osl/hypo/registry/model/kafka/incoming/RegistryURLRequest.java +1 −0 Changes for src/main/java/org/etsi/osl/hypo/registry/model/kafka/incoming/RegistryURLRequest.java: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ public class RegistryURLRequest implements KafkaRequestPayload { @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private String type; private String serviceId; private JsonNode serviceOrderRequest; private String url; private String schedulerNamespace; Loading src/main/java/org/etsi/osl/hypo/registry/service/RegistryService.java +18 −13 Changes for src/main/java/org/etsi/osl/hypo/registry/service/RegistryService.java: 18 added lines, 13 removed lines. Original line number Diff line number Diff line Loading @@ -5,8 +5,6 @@ import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstan import static org.etsi.osl.hypo.registry.config.ApplicationProperties.REGISTRY_ORGANIZATION_GET_CREDENTIALS_RESULT; import static org.etsi.osl.hypo.registry.config.ApplicationProperties.UNKNOWN; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.MissingNode; import io.smallrye.mutiny.Uni; import io.smallrye.reactive.messaging.kafka.api.IncomingKafkaRecordMetadata; import jakarta.enterprise.context.ApplicationScoped; Loading Loading @@ -77,6 +75,8 @@ public class RegistryService { // Vault key for fetching Kubernetes configuration data. public static final String KUBE_CONFIG_KEY = "kubeConfig"; private static final String SCHEDULER_NAMESPACE_KEY = "schedulerNamespace"; static final String MISSING_SERVICE_ID_MESSAGE = "Invalid request: missing required top-level field 'serviceId'"; public static final String S_WITH_ERROR_MESSAGE_S = " %s with error message: %s"; private final VaultService vaultService; Loading Loading @@ -122,7 +122,7 @@ public class RegistryService { public PackageRegistrySecretResponseMessage getPackageRegistrySecretResponseMessage( RegistryURLRequest request, String keycloakTokenStr) { String serviceID = serviceIdOf(request); String serviceID = requireServiceId(request); logger.infof("Processing package registry secret request for ServiceID: %s", serviceID); String rawUrl = request.getUrl(); Loading Loading @@ -169,7 +169,7 @@ public class RegistryService { public KubeConfigResponseMessage getDeploymentKubeConfigResponseMessage( KubeConfigRequest request, String keycloakTokenStr) { String serviceID = serviceIdOf(request); String serviceID = requireServiceId(request); logger.infof("Processing deployment kubeconfig request for ServiceID: %s", serviceID); String group = tokenService.getGroup(keycloakTokenStr); Loading Loading @@ -217,7 +217,7 @@ public class RegistryService { private KubeConfigResponseMessage activationOrTermination( KubeConfigRequest request, String vaultToken, String group) { String serviceID = serviceIdOf(request); String serviceID = requireServiceId(request); logger.infof( "Processing activation/termination kubeconfig request for ServiceID: %s", serviceID); Loading Loading @@ -1044,6 +1044,8 @@ public class RegistryService { String type = payload.getType(); logger.debugf("Dispatching payload type '%s' to RegistryService routing", type); // Fail before any auth or Vault work when the request cannot be tied to a service. requireServiceId(payload); switch (type) { case "parsing": Loading Loading @@ -1108,15 +1110,18 @@ public class RegistryService { return serviceId; } private static String requireServiceId(KafkaRequestPayload payload) { String serviceId = serviceIdOf(payload); if (serviceId == null) { throw new IllegalArgumentException(MISSING_SERVICE_ID_MESSAGE); } return serviceId; } private static String serviceIdOf(KafkaRequestPayload payload) { JsonNode serviceId = MissingNode.getInstance(); if (payload instanceof RegistryURLRequest request && request.getServiceOrderRequest() != null) { serviceId = request.getServiceOrderRequest().at("/serviceOrder/serviceId"); } else if (payload instanceof KubeConfigRequest request && request.getServiceOperationRequest() != null) { serviceId = request.getServiceOperationRequest().at("/serviceId"); } return serviceId.isValueNode() && !serviceId.isNull() ? serviceId.asText() : null; return payload != null && StringUtils.isNotBlank(payload.getServiceId()) ? payload.getServiceId() : null; } private Headers extractKafkaHeaders(Message<?> message) { Loading src/test/java/org/etsi/osl/hypo/registry/kafka/incoming/RegistrySecretsKafkaListenerTest.java +2 −1 Changes for src/test/java/org/etsi/osl/hypo/registry/kafka/incoming/RegistrySecretsKafkaListenerTest.java: 2 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -282,10 +282,11 @@ public class RegistrySecretsKafkaListenerTest { void shouldDeserializeRegistryURLRequestFromJson() throws Exception { ObjectMapper mapper = new ObjectMapper(); String json = "{\"type\":\"parsing\",\"serviceOrderRequest\":{\"serviceOrder\":{\"serviceId\":\"123\"}},\"url\":\"myrepo\"}"; "{\"type\":\"parsing\",\"serviceId\":\"123\",\"serviceOrderRequest\":{\"serviceOrder\":{\"serviceId\":\"123\"}},\"url\":\"myrepo\"}"; KafkaRequestPayload payload = mapper.readValue(json, KafkaRequestPayload.class); assertThat(payload).isInstanceOf(RegistryURLRequest.class); assertThat(payload.getType()).isNotBlank().isEqualTo("parsing"); assertThat(payload.getServiceId()).isEqualTo("123"); } @Test Loading Loading
src/main/java/org/etsi/osl/hypo/registry/model/kafka/incoming/KafkaRequestPayload.java +2 −0 Changes for src/main/java/org/etsi/osl/hypo/registry/model/kafka/incoming/KafkaRequestPayload.java: 2 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -17,5 +17,7 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo; public interface KafkaRequestPayload { String getType(); String getServiceId(); String toStringAsJson(); }
src/main/java/org/etsi/osl/hypo/registry/model/kafka/incoming/KubeConfigRequest.java +1 −0 Changes for src/main/java/org/etsi/osl/hypo/registry/model/kafka/incoming/KubeConfigRequest.java: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ public class KubeConfigRequest implements KafkaRequestPayload { @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private String type; private String serviceId; private JsonNode serviceOperationRequest; private String kubernetesServiceID; private List<String> secretNames; Loading
src/main/java/org/etsi/osl/hypo/registry/model/kafka/incoming/RegistryURLRequest.java +1 −0 Changes for src/main/java/org/etsi/osl/hypo/registry/model/kafka/incoming/RegistryURLRequest.java: 1 added line, 0 removed lines. Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ public class RegistryURLRequest implements KafkaRequestPayload { @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) private String type; private String serviceId; private JsonNode serviceOrderRequest; private String url; private String schedulerNamespace; Loading
src/main/java/org/etsi/osl/hypo/registry/service/RegistryService.java +18 −13 Changes for src/main/java/org/etsi/osl/hypo/registry/service/RegistryService.java: 18 added lines, 13 removed lines. Original line number Diff line number Diff line Loading @@ -5,8 +5,6 @@ import static org.etsi.osl.hypo.core.common.constants.SonataKafkaTriggersConstan import static org.etsi.osl.hypo.registry.config.ApplicationProperties.REGISTRY_ORGANIZATION_GET_CREDENTIALS_RESULT; import static org.etsi.osl.hypo.registry.config.ApplicationProperties.UNKNOWN; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.MissingNode; import io.smallrye.mutiny.Uni; import io.smallrye.reactive.messaging.kafka.api.IncomingKafkaRecordMetadata; import jakarta.enterprise.context.ApplicationScoped; Loading Loading @@ -77,6 +75,8 @@ public class RegistryService { // Vault key for fetching Kubernetes configuration data. public static final String KUBE_CONFIG_KEY = "kubeConfig"; private static final String SCHEDULER_NAMESPACE_KEY = "schedulerNamespace"; static final String MISSING_SERVICE_ID_MESSAGE = "Invalid request: missing required top-level field 'serviceId'"; public static final String S_WITH_ERROR_MESSAGE_S = " %s with error message: %s"; private final VaultService vaultService; Loading Loading @@ -122,7 +122,7 @@ public class RegistryService { public PackageRegistrySecretResponseMessage getPackageRegistrySecretResponseMessage( RegistryURLRequest request, String keycloakTokenStr) { String serviceID = serviceIdOf(request); String serviceID = requireServiceId(request); logger.infof("Processing package registry secret request for ServiceID: %s", serviceID); String rawUrl = request.getUrl(); Loading Loading @@ -169,7 +169,7 @@ public class RegistryService { public KubeConfigResponseMessage getDeploymentKubeConfigResponseMessage( KubeConfigRequest request, String keycloakTokenStr) { String serviceID = serviceIdOf(request); String serviceID = requireServiceId(request); logger.infof("Processing deployment kubeconfig request for ServiceID: %s", serviceID); String group = tokenService.getGroup(keycloakTokenStr); Loading Loading @@ -217,7 +217,7 @@ public class RegistryService { private KubeConfigResponseMessage activationOrTermination( KubeConfigRequest request, String vaultToken, String group) { String serviceID = serviceIdOf(request); String serviceID = requireServiceId(request); logger.infof( "Processing activation/termination kubeconfig request for ServiceID: %s", serviceID); Loading Loading @@ -1044,6 +1044,8 @@ public class RegistryService { String type = payload.getType(); logger.debugf("Dispatching payload type '%s' to RegistryService routing", type); // Fail before any auth or Vault work when the request cannot be tied to a service. requireServiceId(payload); switch (type) { case "parsing": Loading Loading @@ -1108,15 +1110,18 @@ public class RegistryService { return serviceId; } private static String requireServiceId(KafkaRequestPayload payload) { String serviceId = serviceIdOf(payload); if (serviceId == null) { throw new IllegalArgumentException(MISSING_SERVICE_ID_MESSAGE); } return serviceId; } private static String serviceIdOf(KafkaRequestPayload payload) { JsonNode serviceId = MissingNode.getInstance(); if (payload instanceof RegistryURLRequest request && request.getServiceOrderRequest() != null) { serviceId = request.getServiceOrderRequest().at("/serviceOrder/serviceId"); } else if (payload instanceof KubeConfigRequest request && request.getServiceOperationRequest() != null) { serviceId = request.getServiceOperationRequest().at("/serviceId"); } return serviceId.isValueNode() && !serviceId.isNull() ? serviceId.asText() : null; return payload != null && StringUtils.isNotBlank(payload.getServiceId()) ? payload.getServiceId() : null; } private Headers extractKafkaHeaders(Message<?> message) { Loading
src/test/java/org/etsi/osl/hypo/registry/kafka/incoming/RegistrySecretsKafkaListenerTest.java +2 −1 Changes for src/test/java/org/etsi/osl/hypo/registry/kafka/incoming/RegistrySecretsKafkaListenerTest.java: 2 added lines, 1 removed line. Original line number Diff line number Diff line Loading @@ -282,10 +282,11 @@ public class RegistrySecretsKafkaListenerTest { void shouldDeserializeRegistryURLRequestFromJson() throws Exception { ObjectMapper mapper = new ObjectMapper(); String json = "{\"type\":\"parsing\",\"serviceOrderRequest\":{\"serviceOrder\":{\"serviceId\":\"123\"}},\"url\":\"myrepo\"}"; "{\"type\":\"parsing\",\"serviceId\":\"123\",\"serviceOrderRequest\":{\"serviceOrder\":{\"serviceId\":\"123\"}},\"url\":\"myrepo\"}"; KafkaRequestPayload payload = mapper.readValue(json, KafkaRequestPayload.class); assertThat(payload).isInstanceOf(RegistryURLRequest.class); assertThat(payload.getType()).isNotBlank().isEqualTo("parsing"); assertThat(payload.getServiceId()).isEqualTo("123"); } @Test Loading