/** * Create a copy of this object with error message set. * * @param enforcement the enforcement options * @return a copy of this object. */ public static Enforcement newEnforcement(final Enforcement enforcement) { return ImmutableEnforcement.of(enforcement.getInput(), enforcement.getFilters()); }
@Override default JsonObject toJson() { return toJson(FieldType.notHidden()); }
@Override public EnforcementFilter<M> getFilter(final I input) { final String inputResolved = PlaceholderFilter.apply(enforcement.getInput(), input, inputPlaceholder); return new ImmutableEnforcementFilter<>(enforcement, filterPlaceholder, inputResolved); }
@Override public void match(final M filterInput, final DittoHeaders dittoHeaders) { final boolean match = enforcement.getFilters() .stream() .map(filter -> PlaceholderFilter.apply(filter, filterInput, filterPlaceholder)) .anyMatch(resolved -> resolved.equals(inputValue)); if (!match) { throw getEnforcementFailedException(dittoHeaders); } }
private static void validateEnforcementInput(final Enforcement enforcement, final Supplier<String> sourceDescription, final DittoHeaders dittoHeaders) { final SourceAddressPlaceholder sourceAddressPlaceholder = PlaceholderFactory.newSourceAddressPlaceholder(); try { EnforcementFactoryFactory .newEnforcementFilterFactory(enforcement, sourceAddressPlaceholder) .getFilter("dummyTopic"); } catch (final DittoRuntimeException e) { throw invalidValueForConfig(enforcement.getInput(), "input", sourceDescription.get()) .cause(e) .description(MessageFormat.format(ERROR_DESCRIPTION, enforcement.getInput(), sourceAddressPlaceholder.getSupportedNames())) .dittoHeaders(dittoHeaders) .build(); } }
private static void validateSourceEnforcement(@Nullable final Enforcement enforcement, final DittoHeaders dittoHeaders, final Supplier<String> sourceDescription) { if (enforcement != null) { validateEnforcementInput(enforcement, sourceDescription, dittoHeaders); final String dummyThingId = "namespace:name"; final Map<String, String> filtersMap = PlaceholderFilter.filterAddressesAsMap(enforcement.getFilters(), dummyThingId, filter -> { throw invalidValueForConfig(filter, "filters", sourceDescription.get()) .description("Placeholder substitution failed. " + "Please check the placeholder variables against the documentation.") .dittoHeaders(dittoHeaders) .build(); }); filtersMap.forEach((filter, mqttTopic) -> validateMqttTopic(mqttTopic, true, errorMessage -> invalidValueForConfig(filter, "filters", sourceDescription.get()) .description( "The filter is not a valid MQTT topic after placeholder substitution. " + "Wildcard characters are allowed.") .dittoHeaders(dittoHeaders) .build())); } }
/** * Create a copy of this object with error message set. * * @param enforcement the enforcement options * @return a copy of this object. */ public static Enforcement newEnforcement(final Enforcement enforcement) { return ImmutableEnforcement.of(enforcement.getInput(), enforcement.getFilters()); }
private static void validateEnforcementInput(final Enforcement enforcement, final Supplier<String> sourceDescription, final DittoHeaders dittoHeaders) { final SourceAddressPlaceholder sourceAddressPlaceholder = PlaceholderFactory.newSourceAddressPlaceholder(); try { EnforcementFactoryFactory .newEnforcementFilterFactory(enforcement, sourceAddressPlaceholder) .getFilter("dummyTopic"); } catch (final DittoRuntimeException e) { throw invalidValueForConfig(enforcement.getInput(), "input", sourceDescription.get()) .cause(e) .description(MessageFormat.format(ERROR_DESCRIPTION, enforcement.getInput(), sourceAddressPlaceholder.getSupportedNames())) .dittoHeaders(dittoHeaders) .build(); } }
private static void validateSourceEnforcement(@Nullable final Enforcement enforcement, final DittoHeaders dittoHeaders, final Supplier<String> sourceDescription) { if (enforcement != null) { validateEnforcementInput(enforcement, sourceDescription, dittoHeaders); final String dummyThingId = "namespace:name"; final Map<String, String> filtersMap = PlaceholderFilter.filterAddressesAsMap(enforcement.getFilters(), dummyThingId, filter -> { throw invalidValueForConfig(filter, "filters", sourceDescription.get()) .description("Placeholder substitution failed. " + "Please check the placeholder variables against the documentation.") .dittoHeaders(dittoHeaders) .build(); }); filtersMap.forEach((filter, mqttTopic) -> validateMqttTopic(mqttTopic, true, errorMessage -> invalidValueForConfig(filter, "filters", sourceDescription.get()) .description( "The filter is not a valid MQTT topic after placeholder substitution. " + "Wildcard characters are allowed.") .dittoHeaders(dittoHeaders) .build())); } }
@Override default JsonObject toJson() { return toJson(FieldType.notHidden()); }
@Override protected void validateSource(final Source source, final DittoHeaders dittoHeaders, final Supplier<String> sourceDescription) { source.getEnforcement().ifPresent(enforcement -> { validateTemplate(enforcement.getInput(), PlaceholderFactory.newHeadersPlaceholder(), dittoHeaders); enforcement.getFilters().forEach(filterTemplate -> validateTemplate(filterTemplate, PlaceholderFactory.newThingPlaceholder(), dittoHeaders)); }); source.getHeaderMapping().ifPresent(mapping -> validateHeaderMapping(mapping, dittoHeaders)); }
@Override default JsonObject toJson(final JsonSchemaVersion schemaVersion, final JsonFieldSelector fieldSelector) { return toJson(schemaVersion, FieldType.notHidden()).get(fieldSelector); }
@Override protected void validateSource(final Source source, final DittoHeaders dittoHeaders, final Supplier<String> sourceDescription) { source.getEnforcement().ifPresent(enforcement -> { validateTemplate(enforcement.getInput(), PlaceholderFactory.newHeadersPlaceholder(), dittoHeaders); enforcement.getFilters().forEach(filterTemplate -> validateTemplate(filterTemplate, PlaceholderFactory.newThingPlaceholder(), dittoHeaders)); }); source.getHeaderMapping().ifPresent(mapping -> validateHeaderMapping(mapping, dittoHeaders)); }
@Override default JsonObject toJson(final JsonSchemaVersion schemaVersion, final JsonFieldSelector fieldSelector) { return toJson(schemaVersion, FieldType.notHidden()).get(fieldSelector); }
@Override protected void validateSource(final Source source, final DittoHeaders dittoHeaders, final Supplier<String> sourceDescription) { source.getEnforcement().ifPresent(enforcement -> { validateTemplate(enforcement.getInput(), PlaceholderFactory.newHeadersPlaceholder(), dittoHeaders); enforcement.getFilters().forEach(filterTemplate -> validateTemplate(filterTemplate, PlaceholderFactory.newThingPlaceholder(), dittoHeaders)); }); source.getHeaderMapping().ifPresent(mapping -> validateHeaderMapping(mapping, dittoHeaders)); }
@Override public JsonObject toJson(final JsonSchemaVersion schemaVersion, final Predicate<JsonField> thePredicate) { final Predicate<JsonField> predicate = schemaVersion.and(thePredicate); final JsonObjectBuilder jsonObjectBuilder = JsonFactory.newObjectBuilder(); jsonObjectBuilder.set(JsonFields.SCHEMA_VERSION, schemaVersion.toInt(), predicate); jsonObjectBuilder.set(JsonFields.ADDRESSES, addresses.stream() .map(JsonFactory::newValue) .collect(JsonCollectors.valuesToArray()), predicate.and(Objects::nonNull)); jsonObjectBuilder.set(JsonFields.CONSUMER_COUNT, consumerCount, predicate); if (!authorizationContext.isEmpty()) { jsonObjectBuilder.set(JsonFields.AUTHORIZATION_CONTEXT, authorizationContext.stream() .map(AuthorizationSubject::getId) .map(JsonFactory::newValue) .collect(JsonCollectors.valuesToArray()), predicate); } if (enforcement != null) { jsonObjectBuilder.set(JsonFields.ENFORCEMENT, enforcement.toJson(schemaVersion, thePredicate), predicate); } if (headerMapping != null) { jsonObjectBuilder.set(JsonFields.HEADER_MAPPING, headerMapping.toJson(schemaVersion, thePredicate), predicate); } return jsonObjectBuilder.build(); }
@Override protected void validateSource(final Source source, final DittoHeaders dittoHeaders, final Supplier<String> sourceDescription) { source.getEnforcement().ifPresent(enforcement -> { validateTemplate(enforcement.getInput(), PlaceholderFactory.newHeadersPlaceholder(), dittoHeaders); enforcement.getFilters().forEach(filterTemplate -> validateTemplate(filterTemplate, PlaceholderFactory.newThingPlaceholder(), dittoHeaders)); }); source.getHeaderMapping().ifPresent(mapping -> validateHeaderMapping(mapping, dittoHeaders)); }
@Override public JsonObject toJson(final JsonSchemaVersion schemaVersion, final Predicate<JsonField> thePredicate) { final Predicate<JsonField> predicate = schemaVersion.and(thePredicate); final JsonObjectBuilder jsonObjectBuilder = JsonFactory.newObjectBuilder(); jsonObjectBuilder.set(JsonFields.SCHEMA_VERSION, schemaVersion.toInt(), predicate); jsonObjectBuilder.set(JsonFields.ADDRESSES, addresses.stream() .map(JsonFactory::newValue) .collect(JsonCollectors.valuesToArray()), predicate.and(Objects::nonNull)); jsonObjectBuilder.set(JsonFields.CONSUMER_COUNT, consumerCount, predicate); if (!authorizationContext.isEmpty()) { jsonObjectBuilder.set(JsonFields.AUTHORIZATION_CONTEXT, authorizationContext.stream() .map(AuthorizationSubject::getId) .map(JsonFactory::newValue) .collect(JsonCollectors.valuesToArray()), predicate); } if (enforcement != null) { jsonObjectBuilder.set(JsonFields.ENFORCEMENT, enforcement.toJson(schemaVersion, thePredicate), predicate); } if (headerMapping != null) { jsonObjectBuilder.set(JsonFields.HEADER_MAPPING, headerMapping.toJson(schemaVersion, thePredicate), predicate); } return jsonObjectBuilder.build(); }