static Iterable<PolicyEntry> substitutePolicyEntries(final Iterable<PolicyEntry> policyEntries, final HeaderBasedPlaceholderSubstitutionAlgorithm substitutionAlgorithm, final DittoHeaders dittoHeaders) { final Iterator<PolicyEntry> existingEntriesIterator = policyEntries.iterator(); Iterable<PolicyEntry> currentEntries = policyEntries; for (int i = 0; existingEntriesIterator.hasNext(); i++) { final PolicyEntry existingEntry = existingEntriesIterator.next(); final PolicyEntry substitutedEntry = substitutePolicyEntry(existingEntry, substitutionAlgorithm, dittoHeaders); if (!existingEntry.equals(substitutedEntry)) { currentEntries = replace(currentEntries, substitutedEntry, i); } } return currentEntries; }
static AccessControlList substituteAcl(final AccessControlList acl, final HeaderBasedPlaceholderSubstitutionAlgorithm substitutionAlgorithm, final DittoHeaders dittoHeaders) { AccessControlList newAcl = acl; for (final AclEntry aclEntry : acl) { final AclEntry substitutedEntry = substituteAclEntry(aclEntry, substitutionAlgorithm, dittoHeaders); if (!aclEntry.equals(substitutedEntry)) { newAcl = newAcl.removeEntry(aclEntry).setEntry(substitutedEntry); } } return newAcl; }
static PolicyEntry substitutePolicyEntry(final PolicyEntry existingPolicyEntry, final HeaderBasedPlaceholderSubstitutionAlgorithm substitutionAlgorithm, final DittoHeaders dittoHeaders) { final Subjects existingSubjects = existingPolicyEntry.getSubjects(); final Subjects substitutedSubjects = substituteSubjects(existingSubjects, substitutionAlgorithm, dittoHeaders); final PolicyEntry resultEntry; if (existingSubjects.equals(substitutedSubjects)) { resultEntry = existingPolicyEntry; } else { resultEntry = PolicyEntry.newInstance(existingPolicyEntry.getLabel(), substitutedSubjects, existingPolicyEntry.getResources()); } return resultEntry; }
static Policy substitutePolicy(final Policy policy, final HeaderBasedPlaceholderSubstitutionAlgorithm substitutionAlgorithm, final DittoHeaders dittoHeaders) { final Iterable<PolicyEntry> existingEntries = policy.getEntriesSet(); final Iterable<PolicyEntry> substitutedEntries = substitutePolicyEntries(existingEntries, substitutionAlgorithm, dittoHeaders); final Policy resultPolicy; if (existingEntries.equals(substitutedEntries)) { resultPolicy = policy; } else { resultPolicy = PoliciesModelFactory.newPolicyBuilder(policy).setAll(substitutedEntries).build(); } return resultPolicy; }
static Thing substituteThing(final Thing existingThing, final HeaderBasedPlaceholderSubstitutionAlgorithm substitutionAlgorithm, final DittoHeaders dittoHeaders) { final AccessControlList existingAcl = existingThing.getAccessControlList().orElse(null); if (existingAcl == null) { return existingThing; } final AccessControlList substitutedAcl = substituteAcl(existingAcl, substitutionAlgorithm, dittoHeaders); if (existingAcl.equals(substitutedAcl)) { return existingThing; } else { return ThingsModelFactory.newThingBuilder(existingThing) .removeAllPermissions() .setPermissions(substitutedAcl).build(); } }