Wrap imperative calls in reactive code

This commit is contained in:
Roy Clarkson
2019-01-09 15:46:44 -05:00
committed by Scott Frederick
parent 608ecd40a0
commit 465cda9718
2 changed files with 39 additions and 38 deletions

View File

@@ -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<Tuple2<String, String>> generateUser(String applicationId, String serviceInstanceId, String descriptor,
int length, boolean includeUppercaseAlpha, boolean includeLowercaseAlpha,
boolean includeNumeric, boolean includeSpecial) {
CredentialDetails<UserCredential> 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<String> generateString(String applicationId, String serviceInstanceId, String descriptor, int length,
boolean includeUppercaseAlpha, boolean includeLowercaseAlpha, boolean includeNumeric,
boolean includeSpecial) {
CredentialDetails<PasswordCredential> 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<Void> 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<Void> 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,

View File

@@ -65,29 +65,26 @@ public class CredHubPersistingCreateServiceInstanceAppBindingWorkflow implements
private Mono<CreateServiceInstanceAppBindingResponseBuilder> 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())));
}
}