From 465cda9718342a33a7cba9acede5845236cbf9fd Mon Sep 17 00:00:00 2001 From: Roy Clarkson Date: Wed, 9 Jan 2019 15:46:44 -0500 Subject: [PATCH] Wrap imperative calls in reactive code --- .../CredHubCredentialsGenerator.java | 42 ++++++++++--------- ...eateServiceInstanceAppBindingWorkflow.java | 35 +++++++--------- 2 files changed, 39 insertions(+), 38 deletions(-) diff --git a/spring-cloud-app-broker-security-credhub/src/main/java/org/springframework/cloud/appbroker/extensions/credentials/CredHubCredentialsGenerator.java b/spring-cloud-app-broker-security-credhub/src/main/java/org/springframework/cloud/appbroker/extensions/credentials/CredHubCredentialsGenerator.java index f4eb2cf..340cf71 100644 --- a/spring-cloud-app-broker-security-credhub/src/main/java/org/springframework/cloud/appbroker/extensions/credentials/CredHubCredentialsGenerator.java +++ b/spring-cloud-app-broker-security-credhub/src/main/java/org/springframework/cloud/appbroker/extensions/credentials/CredHubCredentialsGenerator.java @@ -16,11 +16,11 @@ package org.springframework.cloud.appbroker.extensions.credentials; -import org.springframework.credhub.core.CredHubOperations; import reactor.core.publisher.Mono; import reactor.util.function.Tuple2; import reactor.util.function.Tuples; +import org.springframework.credhub.core.CredHubOperations; import org.springframework.credhub.support.CredentialDetails; import org.springframework.credhub.support.SimpleCredentialName; import org.springframework.credhub.support.password.PasswordCredential; @@ -41,38 +41,42 @@ public class CredHubCredentialsGenerator implements CredentialGenerator { public Mono> generateUser(String applicationId, String serviceInstanceId, String descriptor, int length, boolean includeUppercaseAlpha, boolean includeLowercaseAlpha, boolean includeNumeric, boolean includeSpecial) { - CredentialDetails user = this.credHubOperations.credentials() - .generate(UserParametersRequest.builder() - .name(new SimpleCredentialName(applicationId, serviceInstanceId, descriptor)) - .parameters(passwordParameters(length, includeUppercaseAlpha, includeLowercaseAlpha, includeNumeric, includeSpecial)) - .build()); - - return Mono.just(Tuples.of(user.getValue().getUsername(), user.getValue().getPassword())); + return Mono.fromCallable(() -> this.credHubOperations.credentials().generate(UserParametersRequest.builder() + .name(new SimpleCredentialName(applicationId, serviceInstanceId, descriptor)) + .parameters(passwordParameters(length, includeUppercaseAlpha, includeLowercaseAlpha, includeNumeric, includeSpecial)) + .build())) + .map(CredentialDetails::getValue) + .cast(UserCredential.class) + .map(userCredential -> Tuples.of(userCredential.getUsername(), userCredential.getPassword())); } @Override public Mono generateString(String applicationId, String serviceInstanceId, String descriptor, int length, boolean includeUppercaseAlpha, boolean includeLowercaseAlpha, boolean includeNumeric, boolean includeSpecial) { - CredentialDetails password = this.credHubOperations.credentials() - .generate(PasswordParametersRequest.builder() - .name(new SimpleCredentialName(applicationId, serviceInstanceId, descriptor)) - .parameters(passwordParameters(length, includeUppercaseAlpha, includeLowercaseAlpha, includeNumeric, includeSpecial)) - .build()); - return Mono.just(password.getValue().getPassword()); + return Mono.fromCallable(() -> credHubOperations.credentials().generate(PasswordParametersRequest.builder() + .name(new SimpleCredentialName(applicationId, serviceInstanceId, descriptor)) + .parameters(passwordParameters(length, includeUppercaseAlpha, includeLowercaseAlpha, includeNumeric, includeSpecial)) + .build())) + .map(CredentialDetails::getValue) + .cast(PasswordCredential.class) + .map(PasswordCredential::getPassword); } @Override public Mono deleteUser(String applicationId, String serviceInstanceId, String descriptor) { - this.credHubOperations.credentials() - .deleteByName(new SimpleCredentialName(applicationId, serviceInstanceId, descriptor)); - return Mono.empty(); + return Mono.fromCallable(() -> { + this.credHubOperations.credentials().deleteByName(new SimpleCredentialName(applicationId, serviceInstanceId, descriptor)); + return null; + }); } @Override public Mono deleteString(String applicationId, String serviceInstanceId, String descriptor) { - this.credHubOperations.credentials().deleteByName(new SimpleCredentialName(applicationId, serviceInstanceId, descriptor)); - return Mono.empty(); + return Mono.fromCallable(() -> { + this.credHubOperations.credentials().deleteByName(new SimpleCredentialName(applicationId, serviceInstanceId, descriptor)); + return null; + }); } private PasswordParameters passwordParameters(int length, boolean includeUppercaseAlpha, diff --git a/spring-cloud-app-broker-security-credhub/src/main/java/org/springframework/cloud/appbroker/workflow/binding/CredHubPersistingCreateServiceInstanceAppBindingWorkflow.java b/spring-cloud-app-broker-security-credhub/src/main/java/org/springframework/cloud/appbroker/workflow/binding/CredHubPersistingCreateServiceInstanceAppBindingWorkflow.java index 5dd9fa0..af5def9 100644 --- a/spring-cloud-app-broker-security-credhub/src/main/java/org/springframework/cloud/appbroker/workflow/binding/CredHubPersistingCreateServiceInstanceAppBindingWorkflow.java +++ b/spring-cloud-app-broker-security-credhub/src/main/java/org/springframework/cloud/appbroker/workflow/binding/CredHubPersistingCreateServiceInstanceAppBindingWorkflow.java @@ -65,29 +65,26 @@ public class CredHubPersistingCreateServiceInstanceAppBindingWorkflow implements private Mono persistBindingCredentials(CreateServiceInstanceBindingRequest request, CreateServiceInstanceAppBindingResponse response) { - ServiceInstanceCredentialName name = ServiceInstanceCredentialName - .builder() + return Mono.just(ServiceInstanceCredentialName.builder() .serviceBrokerName(this.appName) .serviceOfferingName(request.getServiceDefinitionId()) .serviceBindingId(request.getBindingId()) .credentialName(CREDENTIALS_NAME) - .build(); - - credHubOperations.credentials() - .write(JsonCredentialRequest - .builder() - .name(name) - .value(response.getCredentials()) - .build()); - - return Mono.just(CreateServiceInstanceAppBindingResponse - .builder() - .async(response.isAsync()) - .bindingExisted(response.isBindingExisted()) - .credentials(CREDENTIALS_KEY, name.getName()) - .operation(response.getOperation()) - .syslogDrainUrl(response.getSyslogDrainUrl()) - .volumeMounts(response.getVolumeMounts())); + .build()) + .flatMap(credentialName -> Mono.fromCallable(() -> credHubOperations + .credentials() + .write(JsonCredentialRequest.builder() + .name(credentialName) + .value(response.getCredentials()) + .build())) + .thenReturn(CreateServiceInstanceAppBindingResponse + .builder() + .async(response.isAsync()) + .bindingExisted(response.isBindingExisted()) + .credentials(CREDENTIALS_KEY, credentialName.getName()) + .operation(response.getOperation()) + .syslogDrainUrl(response.getSyslogDrainUrl()) + .volumeMounts(response.getVolumeMounts()))); } }