[java-identity-provider] branch main updated: IDP-1727 - Support directionality in AttributeTranscoders
Scott Cantor
cantor.2 at osu.edu
Mon Dec 21 16:58:53 UTC 2020
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch main
in repository java-identity-provider.
View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=d67210d317637d24fee94d8a33dc283c5eca9b4b
The following commit(s) were added to refs/heads/main by this push:
new d67210d31 IDP-1727 - Support directionality in AttributeTranscoders
d67210d31 is described below
commit d67210d317637d24fee94d8a33dc283c5eca9b4b
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Mon Dec 21 11:58:45 2020 -0500
IDP-1727 - Support directionality in AttributeTranscoders
https://issues.shibboleth.net/jira/browse/IDP-1727
---
.../transcoding/AttributeTranscoderRegistry.java | 8 +++-
.../impl/AttributeTranscoderRegistryImpl.java | 44 ++++++++++++++--------
.../impl/AttributeTranscoderRegistryImplTest.java | 12 +++++-
3 files changed, 45 insertions(+), 19 deletions(-)
diff --git a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/transcoding/AttributeTranscoderRegistry.java b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/transcoding/AttributeTranscoderRegistry.java
index b9b25ed8b..598db2616 100644
--- a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/transcoding/AttributeTranscoderRegistry.java
+++ b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/transcoding/AttributeTranscoderRegistry.java
@@ -58,7 +58,13 @@ public interface AttributeTranscoderRegistry extends IdentifiedComponent {
/** Property prefix for language-specific description of attribute. */
@Nonnull @NotEmpty static final String PROP_DESCRIPTION = "description";
-
+
+ /** Property prefix for indicating whether a rule applies to encoding. */
+ @Nonnull @NotEmpty static final String PROP_ENCODER = "encoder";
+
+ /** Property prefix for indicating whether a rule applies to decoding. */
+ @Nonnull @NotEmpty static final String PROP_DECODER = "decoder";
+
/**
* Get the localized display names for an {@link IdPAttribute}.
*
diff --git a/idp-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImpl.java b/idp-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImpl.java
index 2f1483dff..d29b924e2 100644
--- a/idp-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImpl.java
+++ b/idp-attribute-impl/src/main/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImpl.java
@@ -265,6 +265,7 @@ public class AttributeTranscoderRegistryImpl extends AbstractServiceableComponen
return transcoders;
}
+// Checkstyle: CyclomaticComplexity OFF
/**
* Add a mapping between an {@link IdPAttribute} name and a set of transcoding rules.
*
@@ -274,7 +275,6 @@ public class AttributeTranscoderRegistryImpl extends AbstractServiceableComponen
*/
private void addMapping(@Nonnull @NotEmpty final String id, @Nonnull final AttributeTranscoder<?> transcoder,
@Nonnull final Map<String,Object> ruleset) {
-
final TranscodingRule copy = new TranscodingRule(ruleset);
copy.getMap().put(PROP_TRANSCODER, transcoder);
@@ -283,26 +283,37 @@ public class AttributeTranscoderRegistryImpl extends AbstractServiceableComponen
final String targetName = transcoder.getEncodedName(copy);
if (targetName != null) {
- log.debug("Attribute mapping: {} <-> {} via {}", id, targetName, transcoder.getClass().getSimpleName());
+ final boolean encoder = copy.getOrDefault(PROP_ENCODER, Boolean.class, true);
+ final boolean decoder = copy.getOrDefault(PROP_DECODER, Boolean.class, true);
+ if (!encoder && !decoder) {
+ log.warn("Transcoding rule for {} and type {} was disabled in both directions, ignoring",
+ id, type.getName());
+ return;
+ }
+
+ log.debug("Attribute mapping: {} {}-{} {} via {}", id, targetName,
+ decoder ? "<" : "", encoder ? ">" : "", transcoder.getClass().getSimpleName());
// Install mapping back to IdPAttribute's trimmed name.
copy.getMap().put(PROP_ID, id);
-
- Multimap<Class<?>,TranscodingRule> rulesetsForIdPName = transcodingRegistry.get(id);
- if (rulesetsForIdPName == null) {
- rulesetsForIdPName = ArrayListMultimap.create();
- transcodingRegistry.put(id, rulesetsForIdPName);
- }
-
- rulesetsForIdPName.put(type, copy);
- Multimap<Class<?>,TranscodingRule> rulesetsForEncodedName = transcodingRegistry.get(targetName);
- if (rulesetsForEncodedName == null) {
- rulesetsForEncodedName = ArrayListMultimap.create();
- transcodingRegistry.put(targetName, rulesetsForEncodedName);
+ if (encoder) {
+ Multimap<Class<?>,TranscodingRule> rulesetsForIdPName = transcodingRegistry.get(id);
+ if (rulesetsForIdPName == null) {
+ rulesetsForIdPName = ArrayListMultimap.create();
+ transcodingRegistry.put(id, rulesetsForIdPName);
+ }
+ rulesetsForIdPName.put(type, copy);
}
- rulesetsForEncodedName.put(type, copy);
+ if (decoder) {
+ Multimap<Class<?>,TranscodingRule> rulesetsForEncodedName = transcodingRegistry.get(targetName);
+ if (rulesetsForEncodedName == null) {
+ rulesetsForEncodedName = ArrayListMultimap.create();
+ transcodingRegistry.put(targetName, rulesetsForEncodedName);
+ }
+ rulesetsForEncodedName.put(type, copy);
+ }
if (displayNameRegistry.containsKey(id)) {
displayNameRegistry.get(id).putAll(copy.getDisplayNames());
@@ -317,9 +328,10 @@ public class AttributeTranscoderRegistryImpl extends AbstractServiceableComponen
}
} else {
- log.warn("Transcoding rule for {} into type {} did not produce an encoded name", id, type.getName());
+ log.warn("Transcoding rule for {} and type {} did not produce an encoded name", id, type.getName());
}
}
+// Checkstyle: CyclomaticComplexity ON
/**
* Build an appropriate {@link Predicate} to use as an activation condition within the ruleset.
diff --git a/idp-attribute-impl/src/test/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImplTest.java b/idp-attribute-impl/src/test/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImplTest.java
index a86b7a2f9..f231bd45e 100644
--- a/idp-attribute-impl/src/test/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImplTest.java
+++ b/idp-attribute-impl/src/test/java/net/shibboleth/idp/attribute/transcoding/impl/AttributeTranscoderRegistryImplTest.java
@@ -102,13 +102,21 @@ public class AttributeTranscoderRegistryImplTest {
ruleset5.put(AttributeTranscoderRegistry.PROP_ID, "foo bar");
ruleset5.put(AttributeTranscoderRegistry.PROP_TRANSCODER, transcoder);
ruleset5.put("name", "baz");
-
+
+ final Map<String,Object> ruleset6 = new HashMap<>();
+ ruleset6.put(AttributeTranscoderRegistry.PROP_ID, "frobnitz");
+ ruleset6.put(AttributeTranscoderRegistry.PROP_TRANSCODER, transcoder);
+ ruleset6.put(AttributeTranscoderRegistry.PROP_ENCODER, "false");
+ ruleset6.put(AttributeTranscoderRegistry.PROP_DECODER, "false");
+ ruleset6.put("name", "foo");
+
registry.setTranscoderRegistry(List.of(
new TranscodingRule(ruleset1),
new TranscodingRule(ruleset2),
new TranscodingRule(ruleset3),
new TranscodingRule(ruleset4),
- new TranscodingRule(ruleset5)));
+ new TranscodingRule(ruleset5),
+ new TranscodingRule(ruleset6)));
registry.setApplicationContext(new MockApplicationContext());
registry.initialize();
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list