From c2d6fbd70a2a79396286eb3c3fc7101ff9bfd040 Mon Sep 17 00:00:00 2001 From: Thomas Lenz Date: Wed, 10 Jun 2020 13:39:57 +0200 Subject: Add new AttributeBuilder registration --- .../idp/builder/AttributeBuilderRegistration.java | 88 ++++++++++++++++++++++ .../pvp2/impl/builder/PvpAttributeBuilder.java | 73 ++++-------------- 2 files changed, 102 insertions(+), 59 deletions(-) create mode 100644 eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/AttributeBuilderRegistration.java diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/AttributeBuilderRegistration.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/AttributeBuilderRegistration.java new file mode 100644 index 00000000..135bd789 --- /dev/null +++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/AttributeBuilderRegistration.java @@ -0,0 +1,88 @@ +package at.gv.egiz.eaaf.core.impl.idp.builder; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.ServiceLoader; + +import at.gv.egiz.eaaf.core.api.idp.IAttributeBuilder; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class AttributeBuilderRegistration { + + private static HashMap builders; + + private static ServiceLoader attributBuilderLoader = + ServiceLoader.load(IAttributeBuilder.class); + + private static void addBuilder(final IAttributeBuilder builder) { + builders.put(builder.getName(), builder); + } + + static { + builders = new HashMap<>(); + + log.info("Loading protocol attribut-builder modules:"); + if (attributBuilderLoader != null) { + final Iterator moduleLoaderInterator = attributBuilderLoader.iterator(); + while (moduleLoaderInterator.hasNext()) { + try { + final IAttributeBuilder modul = moduleLoaderInterator.next(); + log.info("Loading attribut-builder Modul Information: " + modul.getName()); + addBuilder(modul); + + } catch (final Throwable e) { + log.error("Check configuration! " + "Some attribute-builder modul" + + " is not a valid IAttributeBuilder", e); + } + } + } + + log.info("Loading attribute-builder modules done"); + + } + + /** + * Get a specific attribute builder. + * + * @param name Attribute-builder friendly name + * + * @return Attribute-builder with this name or null if builder does not exists + */ + public static IAttributeBuilder getAttributeBuilder(final String name) { + return builders.get(name); + + } + + /** + * Check if a specific attribute-builder is available. + * + * @param name Attribute-builder friendly name + * @return true if the builder is registered, otherwise false + */ + public static boolean containsBuilder(final String name) { + return builders.containsKey(name); + + } + + /** + * Get all registered attribute-builder. + * + * @return {@link Iterator} of all available builders + */ + public static Iterator getAllRegistratedBuilder() { + return builders.values().iterator(); + + } + + /** + * Get the number of currently register attribute builders. + * + * @return number of attribute builders + */ + public static int getNumberOfRegisteredBuilders() { + return builders.size(); + + } + +} diff --git a/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/builder/PvpAttributeBuilder.java b/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/builder/PvpAttributeBuilder.java index 92e75e17..e8c06dd6 100644 --- a/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/builder/PvpAttributeBuilder.java +++ b/eaaf_modules/eaaf_module_pvp2_core/src/main/java/at/gv/egiz/eaaf/modules/pvp2/impl/builder/PvpAttributeBuilder.java @@ -21,10 +21,11 @@ package at.gv.egiz.eaaf.modules.pvp2.impl.builder; import java.util.ArrayList; import java.util.Collection; -import java.util.HashMap; import java.util.Iterator; import java.util.List; -import java.util.ServiceLoader; + +import org.opensaml.saml.saml2.core.Attribute; +import org.opensaml.saml.saml2.metadata.RequestedAttribute; import at.gv.egiz.eaaf.core.api.idp.IAttributeBuilder; import at.gv.egiz.eaaf.core.api.idp.IAttributeGenerator; @@ -33,64 +34,17 @@ import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration; import at.gv.egiz.eaaf.core.exceptions.AttributeBuilderException; import at.gv.egiz.eaaf.core.exceptions.InvalidDateFormatAttributeException; import at.gv.egiz.eaaf.core.exceptions.UnavailableAttributeException; +import at.gv.egiz.eaaf.core.impl.idp.builder.AttributeBuilderRegistration; import at.gv.egiz.eaaf.core.impl.idp.builder.attributes.PvpMetadata; import at.gv.egiz.eaaf.modules.pvp2.exception.InvalidDateFormatException; import at.gv.egiz.eaaf.modules.pvp2.exception.Pvp2Exception; import at.gv.egiz.eaaf.modules.pvp2.impl.utils.Saml2Utils; +import lombok.extern.slf4j.Slf4j; -import org.opensaml.saml.saml2.core.Attribute; -import org.opensaml.saml.saml2.metadata.RequestedAttribute; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - +@Slf4j public class PvpAttributeBuilder { - private static final Logger log = LoggerFactory.getLogger(PvpAttributeBuilder.class); - private static IAttributeGenerator generator = new SamlAttributeGenerator(); - private static HashMap builders; - - private static ServiceLoader attributBuilderLoader = - ServiceLoader.load(IAttributeBuilder.class); - - private static void addBuilder(final IAttributeBuilder builder) { - builders.put(builder.getName(), builder); - } - - static { - builders = new HashMap<>(); - - log.info("Loading protocol attribut-builder modules:"); - if (attributBuilderLoader != null) { - final Iterator moduleLoaderInterator = attributBuilderLoader.iterator(); - while (moduleLoaderInterator.hasNext()) { - try { - final IAttributeBuilder modul = moduleLoaderInterator.next(); - log.info("Loading attribut-builder Modul Information: " + modul.getName()); - addBuilder(modul); - - } catch (final Throwable e) { - log.error("Check configuration! " + "Some attribute-builder modul" - + " is not a valid IAttributeBuilder", e); - } - } - } - - log.info("Loading attribute-builder modules done"); - - } - - /** - * Get a specific attribute builder. - * - * @param name Attribute-builder friendly name - * - * @return Attribute-builder with this name or null if builder does not exists - */ - public static IAttributeBuilder getAttributeBuilder(final String name) { - return builders.get(name); - - } /** * Build an SAML2 attribute. @@ -102,8 +56,9 @@ public class PvpAttributeBuilder { public static Attribute buildAttribute(final String name, final String value) { log.warn("Attribute value: {} is NOT injected", value); - if (builders.containsKey(name)) { - return builders.get(name).buildEmpty(generator); + if (AttributeBuilderRegistration.containsBuilder(name)) { + return AttributeBuilderRegistration.getAttributeBuilder(name).buildEmpty(generator); + } return null; } @@ -120,9 +75,9 @@ public class PvpAttributeBuilder { */ public static Attribute buildAttribute(final String name, final ISpConfiguration oaParam, final IAuthData authData) throws Pvp2Exception, AttributeBuilderException { - if (builders.containsKey(name)) { + if (AttributeBuilderRegistration.containsBuilder(name)) { try { - return builders.get(name).build(oaParam, authData, generator); + return AttributeBuilderRegistration.getAttributeBuilder(name).build(oaParam, authData, generator); } catch (final AttributeBuilderException e) { if (e instanceof UnavailableAttributeException) { throw e; @@ -146,8 +101,8 @@ public class PvpAttributeBuilder { * @return SAML2 attribute */ public static Attribute buildEmptyAttribute(final String name) { - if (builders.containsKey(name)) { - return builders.get(name).buildEmpty(generator); + if (AttributeBuilderRegistration.containsBuilder(name)) { + return AttributeBuilderRegistration.getAttributeBuilder(name).buildEmpty(generator); } return null; } @@ -159,7 +114,7 @@ public class PvpAttributeBuilder { */ public static List buildSupportedEmptyAttributes() { final List attributes = new ArrayList<>(); - final Iterator builderIt = builders.values().iterator(); + final Iterator builderIt = AttributeBuilderRegistration.getAllRegistratedBuilder(); while (builderIt.hasNext()) { final IAttributeBuilder builder = builderIt.next(); if (builder.getClass().isAnnotationPresent(PvpMetadata.class)) { -- cgit v1.2.3