Loading .gitignore +3 −0 Original line number Diff line number Diff line application-prod.properties application-dev.properties HELP.md target/ .mvn/wrapper/maven-wrapper.jar Loading src/main/java/org/etsi/osl/secretcontroller/ServiceListenerBean.java +41 −21 Original line number Diff line number Diff line package org.etsi.osl.secretcontroller; import org.etsi.osl.tmf.sim638.model.Service; import org.etsi.osl.tmf.sim638.model.ServiceAttributeValueChangeNotification; import org.etsi.osl.tmf.sim638.model.ServiceCreateNotification; import org.etsi.osl.tmf.sim638.model.ServiceUpdate; import org.etsi.osl.tmf.sim638.model.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.jms.annotation.JmsListener; Loading @@ -15,12 +12,12 @@ import org.springframework.web.util.UriUtils; import tools.jackson.databind.ObjectMapper; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; @Component public class ServiceListenerBean { private final String vaultBaseURI; private final String vaultKVPath; private final String vaultBaseSecretUri; private final VaultKeyValueOperations vaultKV; private final CatalogClient catalogClient; Loading @@ -39,11 +36,23 @@ public class ServiceListenerBean { this.objectMapper = objectMapper; this.vaultKV = vaultTemplate.opsForKeyValue(kvPath, VaultKeyValueOperationsSupport.KeyValueBackend.KV_2); this.vaultKVPath = kvPath; if (vaultUri.endsWith("/")) this.vaultBaseURI = vaultUri.substring(0, vaultUri.length() - 1); else this.vaultBaseURI = vaultUri; vaultUri = vaultUri.substring(0, vaultUri.length() - 1); this.vaultBaseSecretUri = String.format("%s/v1/%s", vaultUri, kvPath); } protected final String getVaultServiceKey(String serviceId) { return String.format("service::%s", serviceId); } protected final String getVaultUri(String secretUri) { return String.format( "%s/data/%s", vaultBaseSecretUri, UriUtils.encodePathSegment(secretUri, StandardCharsets.US_ASCII) ); } @JmsListener(destination = "${topics.EVENT_SERVICE_CREATE}", containerFactory = "topicJmsListenerContainerFactory") Loading @@ -61,29 +70,40 @@ public class ServiceListenerBean { protected void processService(Service svc) { final var serviceUpdate = new ServiceUpdate(); final var secretData = new HashMap<String, String>(); final var vaultKey = getVaultServiceKey(svc.getId()); final var secretURI = getVaultUri(vaultKey); for (final var characteristic : svc.getServiceCharacteristic()) { if (!characteristic.getName().equals("SecretCharacheteristic")) continue; if (characteristic.getValue().getValue().startsWith(this.vaultBaseURI)) if (characteristic.getValue().getValue().startsWith(this.vaultBaseSecretUri)) continue; final var vaultKey = String.format("service::%s::%s", svc.getId(), characteristic.getName()); final var secretData = Map.of("value", characteristic.getValue().getValue()); this.vaultKV.put(vaultKey, Map.of("data", secretData)); final var secretURI = String.format( "%s/v1/%s/data%s", vaultBaseURI, vaultKVPath, UriUtils.encodePathSegment(vaultKey, StandardCharsets.US_ASCII) ); secretData.put(characteristic.getName(), characteristic.getValue().getValue()); characteristic.getValue().setValue(secretURI); serviceUpdate.addServiceCharacteristicItem(characteristic); } if (secretData.isEmpty()) return; this.vaultKV.put(vaultKey, Map.of("data", secretData)); catalogClient.updateService(svc.getId(), serviceUpdate); } @JmsListener(destination = "${topics.EVENT_SERVICE_DELETE}", containerFactory = "topicJmsListenerContainerFactory") public void processServiceDelete(String content) { final var res = this.objectMapper.readValue(content, ServiceDeleteNotification.class); final var svc = res.getEvent().getService(); final var vaultKey = getVaultServiceKey(svc.getId()); final var secretURI = getVaultUri(vaultKey); this.vaultKV.delete(secretURI); } } src/main/resources/application.properties 0 → 100644 +13 −0 Original line number Diff line number Diff line spring.application.name=org.etsi.osl.secret-controller spring.profiles.active=dev app.kvPath=openslice # Broker configuration spring.artemis.mode=native spring.artemis.broker-url=tcp://localhost:61616?jms.watchTopicAdvisories=false # Broker topics topics.CATALOG_UPD_SERVICE=CATALOG.UPD.SERVICE topics.EVENT_SERVICE_CREATE=EVENT.SERVICE.CREATE topics.EVENT_SERVICE_ATTRIBUTE_VALUE_CHANGED=EVENT.SERVICE.ATTRCHANGED topics.EVENT_SERVICE_DELETE=EVENT.SERVICE.DELETE # Vault configuration vault.uri=http://localhost:8200 Loading
.gitignore +3 −0 Original line number Diff line number Diff line application-prod.properties application-dev.properties HELP.md target/ .mvn/wrapper/maven-wrapper.jar Loading
src/main/java/org/etsi/osl/secretcontroller/ServiceListenerBean.java +41 −21 Original line number Diff line number Diff line package org.etsi.osl.secretcontroller; import org.etsi.osl.tmf.sim638.model.Service; import org.etsi.osl.tmf.sim638.model.ServiceAttributeValueChangeNotification; import org.etsi.osl.tmf.sim638.model.ServiceCreateNotification; import org.etsi.osl.tmf.sim638.model.ServiceUpdate; import org.etsi.osl.tmf.sim638.model.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.jms.annotation.JmsListener; Loading @@ -15,12 +12,12 @@ import org.springframework.web.util.UriUtils; import tools.jackson.databind.ObjectMapper; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; @Component public class ServiceListenerBean { private final String vaultBaseURI; private final String vaultKVPath; private final String vaultBaseSecretUri; private final VaultKeyValueOperations vaultKV; private final CatalogClient catalogClient; Loading @@ -39,11 +36,23 @@ public class ServiceListenerBean { this.objectMapper = objectMapper; this.vaultKV = vaultTemplate.opsForKeyValue(kvPath, VaultKeyValueOperationsSupport.KeyValueBackend.KV_2); this.vaultKVPath = kvPath; if (vaultUri.endsWith("/")) this.vaultBaseURI = vaultUri.substring(0, vaultUri.length() - 1); else this.vaultBaseURI = vaultUri; vaultUri = vaultUri.substring(0, vaultUri.length() - 1); this.vaultBaseSecretUri = String.format("%s/v1/%s", vaultUri, kvPath); } protected final String getVaultServiceKey(String serviceId) { return String.format("service::%s", serviceId); } protected final String getVaultUri(String secretUri) { return String.format( "%s/data/%s", vaultBaseSecretUri, UriUtils.encodePathSegment(secretUri, StandardCharsets.US_ASCII) ); } @JmsListener(destination = "${topics.EVENT_SERVICE_CREATE}", containerFactory = "topicJmsListenerContainerFactory") Loading @@ -61,29 +70,40 @@ public class ServiceListenerBean { protected void processService(Service svc) { final var serviceUpdate = new ServiceUpdate(); final var secretData = new HashMap<String, String>(); final var vaultKey = getVaultServiceKey(svc.getId()); final var secretURI = getVaultUri(vaultKey); for (final var characteristic : svc.getServiceCharacteristic()) { if (!characteristic.getName().equals("SecretCharacheteristic")) continue; if (characteristic.getValue().getValue().startsWith(this.vaultBaseURI)) if (characteristic.getValue().getValue().startsWith(this.vaultBaseSecretUri)) continue; final var vaultKey = String.format("service::%s::%s", svc.getId(), characteristic.getName()); final var secretData = Map.of("value", characteristic.getValue().getValue()); this.vaultKV.put(vaultKey, Map.of("data", secretData)); final var secretURI = String.format( "%s/v1/%s/data%s", vaultBaseURI, vaultKVPath, UriUtils.encodePathSegment(vaultKey, StandardCharsets.US_ASCII) ); secretData.put(characteristic.getName(), characteristic.getValue().getValue()); characteristic.getValue().setValue(secretURI); serviceUpdate.addServiceCharacteristicItem(characteristic); } if (secretData.isEmpty()) return; this.vaultKV.put(vaultKey, Map.of("data", secretData)); catalogClient.updateService(svc.getId(), serviceUpdate); } @JmsListener(destination = "${topics.EVENT_SERVICE_DELETE}", containerFactory = "topicJmsListenerContainerFactory") public void processServiceDelete(String content) { final var res = this.objectMapper.readValue(content, ServiceDeleteNotification.class); final var svc = res.getEvent().getService(); final var vaultKey = getVaultServiceKey(svc.getId()); final var secretURI = getVaultUri(vaultKey); this.vaultKV.delete(secretURI); } }
src/main/resources/application.properties 0 → 100644 +13 −0 Original line number Diff line number Diff line spring.application.name=org.etsi.osl.secret-controller spring.profiles.active=dev app.kvPath=openslice # Broker configuration spring.artemis.mode=native spring.artemis.broker-url=tcp://localhost:61616?jms.watchTopicAdvisories=false # Broker topics topics.CATALOG_UPD_SERVICE=CATALOG.UPD.SERVICE topics.EVENT_SERVICE_CREATE=EVENT.SERVICE.CREATE topics.EVENT_SERVICE_ATTRIBUTE_VALUE_CHANGED=EVENT.SERVICE.ATTRCHANGED topics.EVENT_SERVICE_DELETE=EVENT.SERVICE.DELETE # Vault configuration vault.uri=http://localhost:8200