diff options
author | Christof Rabensteiner <christof.rabensteiner@iaik.tugraz.at> | 2019-07-09 14:11:47 +0200 |
---|---|---|
committer | Christof Rabensteiner <christof.rabensteiner@iaik.tugraz.at> | 2019-07-09 14:11:47 +0200 |
commit | 8aba1b4f18f5fbfebdf239b4b4945b628e439905 (patch) | |
tree | 0004115e44b8d6ddf48542b7413d4f54fa76dc27 /src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java | |
parent | 65163646205b6e05139485fe957bceabe531f447 (diff) | |
download | moa-zs-8aba1b4f18f5fbfebdf239b4b4945b628e439905.tar.gz moa-zs-8aba1b4f18f5fbfebdf239b4b4945b628e439905.tar.bz2 moa-zs-8aba1b4f18f5fbfebdf239b4b4945b628e439905.zip |
Refactor Needles Interfaces and Rename "process" to "backend"
Reason:
- Interfaces with a single method can be replaced with
interfaces from java.util.function.
- Less interfaces = less code = less maintenance!
- Spring can inject beans by name so we name dependencies correctly
to prevent ambiguity.
Others:
- Rename process to backend since backend gives a better description
of its components.
Diffstat (limited to 'src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java')
-rw-r--r-- | src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java b/src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java new file mode 100644 index 0000000..414c2dc --- /dev/null +++ b/src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java @@ -0,0 +1,75 @@ +package at.gv.egiz.moazs.backend; + +import at.gv.egiz.moazs.MoaZSException; +import at.gv.egiz.moazs.repository.DeliveryRepository; +import at.gv.egiz.moazs.scheme.MsgResponse; +import at.gv.egiz.moazs.service.MsgService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.concurrent.CompletableFuture; +import java.util.function.Consumer; +import java.util.function.Function; + +import static at.gv.egiz.moazs.MoaZSException.moaZSExceptionBuilder; +import static java.lang.String.format; +import static java.util.concurrent.CompletableFuture.supplyAsync; + +@Component +public class MsgResponseBackend implements Consumer<String> { + + private static final Logger log = LoggerFactory.getLogger(MsgService.class); + + public static final String MOASP_SIGNATURE_INVALID_ERROR_MSG = "Signature of Msg Response " + + "with AppDeliveryID=%s is not valid."; + + private final DeliveryRepository repository; + private final Consumer<byte[]> signatureVerifier; + private final Function<MsgResponse, CompletableFuture<Void>> sink; + + @Autowired + public MsgResponseBackend(DeliveryRepository repository, + Consumer<byte[]> signatureVerifier, + Function<MsgResponse, CompletableFuture<Void>> sink) { + this.repository = repository; + this.signatureVerifier = signatureVerifier; + this.sink = sink; + } + + /** + * Performs all {@code MsgResponse}'s Back-End Tasks, such as verifying + * its signature and archiving the response. + * + * @param responseID refers to MsgResponse Object. + */ + @Override + public void accept(String responseID) { + supplyAsync(() -> verify(responseID)).thenAcceptAsync(sink::apply); + } + + public MsgResponse verify(String responseID) { + + var response = repository.retrieveResponse(responseID).get(); + var builder = moaZSExceptionBuilder().withAllParametersInAnswer(response.getAnswer()); + + var binaryResponse = repository.retrieveBinaryResponse(responseID).get(); + + try { + signatureVerifier.accept(binaryResponse); + return response; + } catch (MoaZSException ex) { + log.error(ex.getMessage(), ex); + var wrappingEx = builder + .withMessage(format(MOASP_SIGNATURE_INVALID_ERROR_MSG, response.getAppDeliveryID())) + .withErrorCode(MoaZSException.ERROR_MOASP_SIGNATURE_INVALID) + .withCause(ex) + .build(); + + return response.generateError(wrappingEx); + } + + } + +} |