private BiConsumer<Void, Throwable> handleEnforcementCompletion(final T signal, final ActorRef sender) { return (_void, throwable) -> { if (throwable != null) { final Throwable error = throwable instanceof CompletionException ? throwable.getCause() : throwable; reportError("Error thrown during enforcement", sender, error, signal.getDittoHeaders()); } }; }
private boolean isResponseExpected(final Signal<?> signal) { return signal instanceof Command && signal.getDittoHeaders().isResponseRequired(); }
/** * Tests whether a signal is applicable for live signal enforcement. * * @param signal the signal to test. * @return whether the signal belongs to the live channel. */ static boolean isLiveSignal(final Signal signal) { return signal.getDittoHeaders().getChannel().filter(TopicPath.Channel.LIVE.getName()::equals).isPresent(); }
private static boolean isLiveSignal(final Signal<?> signal) { return signal.getDittoHeaders().getChannel().filter(TopicPath.Channel.LIVE.getName()::equals).isPresent(); }
private boolean matchesFilter(final String filter, final Signal<?> signal) { if (signal instanceof ThingEvent) { // currently only ThingEvents may be filtered return ThingEventToThingConverter.thingEventToThing((ThingEvent) signal) .filter(thing -> ThingPredicateVisitor.apply(parseCriteria(filter, signal.getDittoHeaders())) .test(thing) ) .isPresent(); } else { return true; } }
private static boolean isLiveSignal(final Signal<?> signal) { return signal.getDittoHeaders().getChannel().filter(TopicPath.Channel.LIVE.getName()::equals).isPresent(); }
static boolean isLiveSignal(final Signal<?> signal) { return signal.getDittoHeaders().getChannel().filter(TopicPath.Channel.LIVE.getName()::equals).isPresent(); }
private static boolean isLiveSignal(final Signal<?> signal) { return signal.getDittoHeaders().getChannel().filter(TopicPath.Channel.LIVE.getName()::equals).isPresent(); }
private boolean matchesFilter(final String filter, final Signal<?> signal) { if (signal instanceof ThingEvent) { // currently only ThingEvents may be filtered return ThingEventToThingConverter.thingEventToThing((ThingEvent) signal) .filter(thing -> ThingPredicateVisitor.apply(parseCriteria(filter, signal.getDittoHeaders())) .test(thing) ) .isPresent(); } else { return true; } }
private void startTrace(final Signal<?> command) { command.getDittoHeaders().getCorrelationId().ifPresent(correlationId -> { final StartedTimer timer = TraceUtils .newAmqpRoundTripTimer(command) .expirationHandling(startedTimer -> timers.remove(correlationId)) .build(); timers.put(correlationId, timer); }); }
private void startTrace(final Signal<?> command) { command.getDittoHeaders().getCorrelationId().ifPresent(correlationId -> { final StartedTimer timer = TraceUtils .newAmqpRoundTripTimer(command) .expirationHandling(startedTimer -> timers.remove(correlationId)) .build(); timers.put(correlationId, timer); }); }
private static StreamingType determineStreamingType(final Signal<?> signal) { final String channel = signal.getDittoHeaders().getChannel().orElse(TopicPath.Channel.TWIN.getName()); final StreamingType streamingType; if (signal instanceof Event) { streamingType = channel.equals(TopicPath.Channel.TWIN.getName()) ? StreamingType.EVENTS : StreamingType.LIVE_EVENTS; } else if (signal instanceof MessageCommand) { streamingType = StreamingType.MESSAGES; } else { streamingType = StreamingType.LIVE_COMMANDS; } return streamingType; }
private static boolean isTargetAuthorized(final Target target, final Signal<?> signal) { final Set<String> authorizedReadSubjects = signal.getDittoHeaders().getReadSubjects(); final AuthorizationContext authorizationContext = target.getAuthorizationContext(); final List<String> connectionSubjects = authorizationContext.getAuthorizationSubjectIds(); return !Collections.disjoint(authorizedReadSubjects, connectionSubjects); }
private static boolean isTargetAuthorized(final Target target, final Signal<?> signal) { final Set<String> authorizedReadSubjects = signal.getDittoHeaders().getReadSubjects(); final AuthorizationContext authorizationContext = target.getAuthorizationContext(); final List<String> connectionSubjects = authorizationContext.getAuthorizationSubjectIds(); return !Collections.disjoint(authorizedReadSubjects, connectionSubjects); }
@Override public void accept(final ExternalMessage externalMessage, final Signal<?> signal) { externalMessage.getEnforcementFilter().ifPresent(enforcementFilter -> { log.debug("Connection Signal ID Enforcement enabled: {}", enforcementFilter); enforcementFilter.match(signal.getId(), signal.getDittoHeaders()); }); } }
@Override public void accept(final ExternalMessage externalMessage, final Signal<?> signal) { externalMessage.getEnforcementFilter().ifPresent(enforcementFilter -> { log.debug("Connection Signal ID Enforcement enabled - matching Signal ID <{}> with filter: {}", signal.getId(), enforcementFilter); enforcementFilter.match(signal.getId(), signal.getDittoHeaders()); }); } }
/** * Extend a signal by read-subjects header given explicitly. * * @param <T> type of the signal. * @param signal the signal to extend. * @param readSubjects explicitly-given read subjects. * @return the extended signal. */ protected static <T extends Signal> T addReadSubjectsToSignal(final Signal<T> signal, final Set<String> readSubjects) { final DittoHeaders newHeaders = signal.getDittoHeaders() .toBuilder() .readSubjects(readSubjects) .build(); return signal.setDittoHeaders(newHeaders); }
private static ShardedMessageEnvelope createEnvelope(final EntityId entityId, final Signal<?> signal) { return ShardedMessageEnvelope.of( entityId.toString(), signal.getType(), signal.toJson(signal.getImplementedSchemaVersion(), FieldType.regularOrSpecial()), signal.getDittoHeaders()); } }
@Override public Adaptable toAdaptable(final Signal<?> signal) { final boolean isLive = isLiveSignal(signal); final TopicPath.Channel channel = isLive ? TopicPath.Channel.LIVE : TopicPath.Channel.TWIN; if (signal instanceof MessageCommand) { return toAdaptable((MessageCommand<?, ?>) signal); } else if (signal instanceof MessageCommandResponse) { return toAdaptable((MessageCommandResponse<?, ?>) signal); } else if (signal instanceof Command) { return toAdaptable((Command<?>) signal, channel); } else if (signal instanceof CommandResponse) { return toAdaptable((CommandResponse<?>) signal, channel); } else if (signal instanceof Event) { return toAdaptable((Event<?>) signal, channel); } throw UnknownSignalException.newBuilder(signal.getName()).dittoHeaders(signal.getDittoHeaders()).build(); }
@Override public Adaptable toAdaptable(final Signal<?> signal) { final boolean isLive = isLiveSignal(signal); final TopicPath.Channel channel = isLive ? TopicPath.Channel.LIVE : TopicPath.Channel.TWIN; if (signal instanceof MessageCommand) { return toAdaptable((MessageCommand<?, ?>) signal); } else if (signal instanceof MessageCommandResponse) { return toAdaptable((MessageCommandResponse<?, ?>) signal); } else if (signal instanceof Command) { return toAdaptable((Command<?>) signal, channel); } else if (signal instanceof CommandResponse) { return toAdaptable((CommandResponse<?>) signal, channel); } else if (signal instanceof Event) { return toAdaptable((Event<?>) signal, channel); } throw UnknownSignalException.newBuilder(signal.getName()).dittoHeaders(signal.getDittoHeaders()).build(); }