@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()); }); } }
/** * Wrap a signal in a sharded message envelope addressed to the correct {@code EnforcerActor}. * * @param signal the signal to wrap. * @return the sharded message envelope. */ public static ShardedMessageEnvelope wrapForEnforcer(final Signal<?> signal) { final EntityId entityId; if (MessageCommand.RESOURCE_TYPE.equals(signal.getResourceType())) { entityId = EntityId.of(ThingCommand.RESOURCE_TYPE, signal.getId()); } else { entityId = EntityId.of(signal.getResourceType(), signal.getId()); } return createEnvelope(entityId, signal); }
@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 DittoHeaders apply(final InboundExternalMessage inboundExternalMessage) { final Signal<?> signal = inboundExternalMessage.getSignal(); final ExternalMessage externalMessage = inboundExternalMessage.getSource(); return externalMessage.getHeaderMapping().map(mapping -> { final DittoHeaders dittoHeaders = signal.getDittoHeaders(); final String thingId = signal.getId(); final DittoHeadersBuilder dittoHeadersBuilder = dittoHeaders.toBuilder(); mapping.getMapping().entrySet().stream() .map(e -> newEntry(e.getKey(), PlaceholderFilter.apply(e.getValue(), dittoHeaders, HEADERS_PLACEHOLDER, true)) ) .map(e -> newEntry(e.getKey(), PlaceholderFilter.apply(e.getValue(), thingId, THING_PLACEHOLDER, true)) ) .map(e -> newEntry(e.getKey(), PlaceholderFilter.apply(e.getValue(), inboundExternalMessage.getTopicPath(), TOPIC_PLACEHOLDER, true)) ) .forEach(e -> dittoHeadersBuilder.putHeader(e.getKey(), e.getValue())); LogUtil.enhanceLogWithCorrelationId(log, signal); final DittoHeaders newHeaders = dittoHeadersBuilder.build(); log.debug("Result of header mapping <{}> are these headers: {}", mapping, newHeaders); return newHeaders; }).orElse(signal.getDittoHeaders()); }
@Override public DittoHeaders apply(final InboundExternalMessage inboundExternalMessage) { final Signal<?> signal = inboundExternalMessage.getSignal(); final ExternalMessage externalMessage = inboundExternalMessage.getSource(); return externalMessage.getHeaderMapping().map(mapping -> { final DittoHeaders dittoHeaders = signal.getDittoHeaders(); final String thingId = signal.getId(); final DittoHeadersBuilder dittoHeadersBuilder = dittoHeaders.toBuilder(); mapping.getMapping().entrySet().stream() .map(e -> newEntry(e.getKey(), PlaceholderFilter.apply(e.getValue(), dittoHeaders, HEADERS_PLACEHOLDER, true)) ) .map(e -> newEntry(e.getKey(), PlaceholderFilter.apply(e.getValue(), thingId, THING_PLACEHOLDER, true)) ) .map(e -> newEntry(e.getKey(), PlaceholderFilter.apply(e.getValue(), inboundExternalMessage.getTopicPath(), TOPIC_PLACEHOLDER, true)) ) .forEach(e -> dittoHeadersBuilder.putHeader(e.getKey(), e.getValue())); LogUtil.enhanceLogWithCorrelationId(log, signal); final DittoHeaders newHeaders = dittoHeadersBuilder.build(); log.debug("Result of header mapping <{}> are these headers: {}", mapping, newHeaders); return newHeaders; }).orElse(signal.getDittoHeaders()); }
PlaceholderFilter.apply(e.getValue(), sourceSignal.getId(), THING_PLACEHOLDER, true))
PlaceholderFilter.apply(e.getValue(), sourceSignal.getId(), THING_PLACEHOLDER, true))
PlaceholderFilter.filterTargets(subscribedAndAuthorizedTargets, signal.getId(), unresolvedPlaceholder -> log.info(UNRESOLVED_PLACEHOLDERS_MESSAGE, unresolvedPlaceholder));
PlaceholderFilter.filterTargets(subscribedAndAuthorizedTargets, signal.getId(), unresolvedPlaceholder -> log.info(UNRESOLVED_PLACEHOLDERS_MESSAGE, unresolvedPlaceholder));
final String signalId = transformedSignal.getId(); final String signalType = transformedSignal.getType(); if (signalId.isEmpty()) {
signal.getId()); final ThingNotAccessibleException error = ThingNotAccessibleException.newBuilder(entityId().getId()) .dittoHeaders(signal.getDittoHeaders())