Skip to content

Commit

Permalink
Use pre enforced signal for further processing
Browse files Browse the repository at this point in the history
Signed-off-by: Yannic Klem <yannic.klem@bosch.io>
  • Loading branch information
Yannic92 committed Jul 15, 2022
1 parent 1636e7a commit 23557d3
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -657,7 +657,13 @@ protected CompletionStage<Object> enforceSignalAndForwardToTargetActor(final S s
.thenCompose(enforcedCommand -> {
final StartedTimer processingTimer =
rootTimer.startNewSegment(ENFORCEMENT_TIMER_SEGMENT_PROCESSING);
return enforcerResponseToTargetActor(tracedSignal.getDittoHeaders(), enforcedCommand, sender)
final DittoHeaders dittoHeaders;
if (enforcedCommand instanceof WithDittoHeaders withDittoHeaders) {
dittoHeaders = withDittoHeaders.getDittoHeaders();
} else {
dittoHeaders = tracedSignal.getDittoHeaders();
}
return enforcerResponseToTargetActor(dittoHeaders, enforcedCommand, sender)
.whenComplete((result, error) -> {
trace.mark("processed");
stopTimer(processingTimer).accept(result, error);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ private void enforceSignal(final S signal) {
doEnforceSignal(signal, getSender());
}

@SuppressWarnings("unchecked")
private void doEnforceSignal(final S signal, final ActorRef sender) {

final StartedTrace trace = DittoTracing
Expand All @@ -132,18 +133,20 @@ private void doEnforceSignal(final S signal, final ActorRef sender) {
final ActorRef self = getSelf();

try {
preEnforcer.apply(signal)
preEnforcer.apply(tracedSignal)
.thenApply(preEnforcedSignal -> (S) preEnforcedSignal)
.thenCompose(preEnforcedSignal -> {
trace.mark("pre_enforced");
return loadPolicyEnforcer(tracedSignal);
return loadPolicyEnforcer(preEnforcedSignal).thenCompose(optionalPolicyEnforcer -> {
trace.mark("enforcer_loaded");
return optionalPolicyEnforcer
.map(policyEnforcer -> enforcement.authorizeSignal(preEnforcedSignal,
policyEnforcer))
.orElseGet(() -> enforcement.authorizeSignalWithMissingEnforcer(
preEnforcedSignal));
}
);
})
.thenCompose(optionalPolicyEnforcer -> {
trace.mark("enforcer_loaded");
return optionalPolicyEnforcer
.map(policyEnforcer -> enforcement.authorizeSignal(tracedSignal, policyEnforcer))
.orElseGet(() -> enforcement.authorizeSignalWithMissingEnforcer(tracedSignal));
}
)
.whenComplete((authorizedSignal, throwable) -> {
if (null != authorizedSignal) {
trace.mark("enforce_success").finish();
Expand Down

0 comments on commit 23557d3

Please sign in to comment.