[java-identity-provider] branch main updated: Fix null checking issues and eliminate use of outdated constructs.
Scott Cantor
cantor.2 at osu.edu
Thu Jan 19 21:53:12 UTC 2023
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=8a7b6547752a0ffb9551e70d88172583386aba18
The following commit(s) were added to refs/heads/main by this push:
new 8a7b65477 Fix null checking issues and eliminate use of outdated constructs.
8a7b65477 is described below
commit 8a7b6547752a0ffb9551e70d88172583386aba18
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Thu Jan 19 16:53:09 2023 -0500
Fix null checking issues and eliminate use of outdated constructs.
---
.../idp/profile/AbstractProfileAction.java | 37 +++++++++++++---------
.../net/shibboleth/idp/profile/ActionSupport.java | 2 +-
.../net/shibboleth/idp/profile/ScriptedAction.java | 14 ++++----
.../AbstractConditionalProfileConfiguration.java | 5 ++-
.../config/AbstractProfileConfiguration.java | 5 ---
.../profile/config/BasicSecurityConfiguration.java | 3 +-
.../config/BasicXMLSecurityConfiguration.java | 3 +-
.../config/logic/DetailedErrorsPredicate.java | 8 +++--
.../config/logic/ResolveAttributesPredicate.java | 8 +++--
...IdentifierGenerationStrategyLookupFunction.java | 6 ++--
...ignatureSigningConfigurationLookupFunction.java | 3 +-
...pClientSecurityConfigurationLookupFunction.java | 12 ++++---
...ignatureSigningConfigurationLookupFunction.java | 14 ++++----
...atureValidationConfigurationLookupFunction.java | 14 ++++----
.../profile/context/MultiRelyingPartyContext.java | 8 +----
.../navigate/RelyingPartyContextLookupById.java | 19 +++++------
.../navigate/RelyingPartyContextLookupByLabel.java | 2 +-
.../navigate/ResponderIdLookupFunction.java | 14 ++++----
.../navigate/ScriptedContextLookupFunction.java | 4 +--
.../navigate/SpringEventToViewLookupFunction.java | 2 +-
.../SpringStatusMessageLookupFunction.java | 6 ++--
.../WebFlowCurrentEventLookupFunction.java | 18 +++++------
...wRequestContextProfileRequestContextLookup.java | 8 +++--
.../AbstractProfileInterceptorAction.java | 4 ++-
.../profile/interceptor/ExternalInterceptor.java | 1 +
.../ProfileInterceptorFlowDescriptor.java | 4 +--
.../idp/profile/logic/DateAttributePredicate.java | 10 +++---
.../idp/profile/logic/LoopDetectionPredicate.java | 7 +++-
.../idp/profile/logic/RegexAttributePredicate.java | 1 +
.../idp/profile/logic/ScriptedPredicate.java | 5 +--
.../profile/logic/SimpleAttributePredicate.java | 5 +--
.../profile/logic/SpringExpressionPredicate.java | 2 +-
.../relyingparty/RelyingPartyConfiguration.java | 17 ++++------
.../AbstractProfileInterceptorResultTest.java | 23 +++-----------
34 files changed, 155 insertions(+), 139 deletions(-)
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/AbstractProfileAction.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/AbstractProfileAction.java
index d242857f2..22fb80229 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/AbstractProfileAction.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/AbstractProfileAction.java
@@ -28,7 +28,6 @@ import javax.annotation.concurrent.ThreadSafe;
import net.shibboleth.idp.profile.context.SpringRequestContext;
import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileRequestContextLookup;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
-import net.shibboleth.shared.component.ComponentSupport;
import net.shibboleth.shared.logic.Constraint;
import org.opensaml.profile.action.AbstractConditionalProfileAction;
@@ -77,7 +76,7 @@ public abstract class AbstractProfileAction
@Nonnull private Function<RequestContext,ProfileRequestContext> profileContextLookupStrategy;
/** MessageSource injected by Spring, typically the parent ApplicationContext itself. */
- @Nonnull private MessageSource messageSource;
+ @Nullable private MessageSource messageSource;
/**
* Constructor.
@@ -113,9 +112,15 @@ public abstract class AbstractProfileAction
/** {@inheritDoc} */
@Override
- @Nonnull public Event execute(@Nonnull final RequestContext springRequestContext) {
+ @Nullable public Event execute(@Nullable final RequestContext springRequestContext) {
checkComponentActive();
+ if (springRequestContext == null) {
+ // Suspect this is impossible but SWF is not annotated as such.
+ log.error("{} Spring request context is not available", getLogPrefix());
+ return ActionSupport.buildEvent(this, EventIds.INVALID_PROFILE_CTX);
+ }
+
final ProfileRequestContext profileRequestContext =
profileContextLookupStrategy.apply(springRequestContext);
if (profileRequestContext == null) {
@@ -142,12 +147,13 @@ public abstract class AbstractProfileAction
* @param profileRequestContext a profile request context
* @return a Web Flow event produced by the action
*/
- @Nonnull protected Event doExecute(@Nonnull final RequestContext springRequestContext,
+ @Nullable protected Event doExecute(@Nonnull final RequestContext springRequestContext,
@Nonnull final ProfileRequestContext profileRequestContext) {
// Attach the Spring context to the context tree.
final SpringRequestContext springSubcontext =
- profileRequestContext.getSubcontext(SpringRequestContext.class, true);
+ profileRequestContext.getOrCreateSubcontext(SpringRequestContext.class);
+ assert springSubcontext != null;
springSubcontext.setRequestContext(springRequestContext);
try {
@@ -171,7 +177,7 @@ public abstract class AbstractProfileAction
* @param profileRequestContext the profile request context to examine
* @return an event based on the profile request context, or "proceed"
*/
- @Nonnull protected Event getResult(@Nonnull final ProfileAction action,
+ @Nullable protected Event getResult(@Nonnull final ProfileAction action,
@Nonnull final ProfileRequestContext profileRequestContext) {
// Check for an EventContext on output.
@@ -180,13 +186,12 @@ public abstract class AbstractProfileAction
final Object event = eventCtx.getEvent();
if (event instanceof Event) {
- return (Event) eventCtx.getEvent();
+ return (Event) event;
} else if (event instanceof String) {
- return ActionSupport.buildEvent(action, (String) eventCtx.getEvent());
+ return ActionSupport.buildEvent(action, (String) event);
} else if (event instanceof AttributeMap) {
- @SuppressWarnings("unchecked")
- final AttributeMap<Object> map = (AttributeMap<Object>) eventCtx.getEvent();
- return ActionSupport.buildEvent(action, map.getString("eventId", EventIds.PROCEED_EVENT_ID), map);
+ final AttributeMap<Object> map = (AttributeMap<Object>) event;
+ return ActionSupport.buildEvent(action, map.getString("eventId", EventIds.PROCEED_EVENT_ID), map);
}
}
@@ -316,13 +321,14 @@ public abstract class AbstractProfileAction
/** {@inheritDoc} */
@Override
- public void setMessageSource(final MessageSource source) {
+ public void setMessageSource(@Nullable final MessageSource source) {
messageSource = source;
}
/** {@inheritDoc} */
@Override
- public String getMessage(final String code, final Object[] args, final String defaultMessage, final Locale locale) {
+ @Nullable public String getMessage(@Nonnull final String code, @Nullable final Object[] args,
+ @Nullable final String defaultMessage, @Nonnull final Locale locale) {
if (messageSource != null) {
return messageSource.getMessage(code, args, defaultMessage, locale);
}
@@ -331,7 +337,8 @@ public abstract class AbstractProfileAction
/** {@inheritDoc} */
@Override
- public String getMessage(final String code, final Object[] args, final Locale locale) {
+ @Nonnull public String getMessage(@Nonnull final String code, @Nullable final Object[] args,
+ @Nonnull final Locale locale) {
if (messageSource != null) {
return messageSource.getMessage(code, args, locale);
}
@@ -340,7 +347,7 @@ public abstract class AbstractProfileAction
/** {@inheritDoc} */
@Override
- public String getMessage(final MessageSourceResolvable resolvable, final Locale locale) {
+ @Nonnull public String getMessage(@Nonnull final MessageSourceResolvable resolvable, @Nonnull final Locale locale) {
if (messageSource != null) {
return messageSource.getMessage(resolvable, locale);
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/ActionSupport.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/ActionSupport.java
index ec7bff5a1..d02254f6d 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/ActionSupport.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/ActionSupport.java
@@ -69,7 +69,7 @@ public final class ActionSupport {
* @return the constructed {@link Event}
*/
@Nonnull public static Event buildEvent(@Nonnull final Object source, @Nonnull final String eventId,
- @Nonnull final AttributeMap<Object> eventAttributes) {
+ @Nullable final AttributeMap<Object> eventAttributes) {
Constraint.isNotNull(source, "Component cannot be null");
final String trimmedEventId =
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/ScriptedAction.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/ScriptedAction.java
index a7ddc3113..372dd4e9f 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/ScriptedAction.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/ScriptedAction.java
@@ -119,7 +119,7 @@ public class ScriptedAction extends AbstractProfileAction {
}
/** {@inheritDoc} */
- @Override public void doExecute(@Nullable final ProfileRequestContext profileContext) {
+ @Override public void doExecute(@Nonnull final ProfileRequestContext profileContext) {
final String result = scriptEvaluator.execute(profileContext);
if (result == null) {
@@ -141,7 +141,8 @@ public class ScriptedAction extends AbstractProfileAction {
* @throws IOException if the file doesn't exist.
*/
@SuppressWarnings("removal")
- static public ScriptedAction resourceScript(@Nonnull @NotEmpty final String engineName, @Nonnull final Resource resource)
+ public static ScriptedAction resourceScript(@Nonnull @NotEmpty final String engineName,
+ @Nonnull final Resource resource)
throws ScriptException, IOException {
try (final InputStream is = resource.getInputStream()) {
final EvaluableScript script = new EvaluableScript();
@@ -160,7 +161,8 @@ public class ScriptedAction extends AbstractProfileAction {
* @throws ScriptException if the compile fails
* @throws IOException if the file doesn't exist.
*/
- static public ScriptedAction resourceScript(@Nonnull final Resource resource) throws ScriptException, IOException {
+ public static ScriptedAction resourceScript(@Nonnull final Resource resource)
+ throws ScriptException, IOException {
return resourceScript(DEFAULT_ENGINE, resource);
}
@@ -173,7 +175,7 @@ public class ScriptedAction extends AbstractProfileAction {
* @throws ScriptException if the compile fails
*/
@SuppressWarnings("removal")
- static public ScriptedAction inlineScript(@Nonnull @NotEmpty final String engineName,
+ public static ScriptedAction inlineScript(@Nonnull @NotEmpty final String engineName,
@Nonnull @NotEmpty final String scriptSource) throws ScriptException {
final EvaluableScript script = new EvaluableScript();
script.setEngineName(engineName);
@@ -189,7 +191,7 @@ public class ScriptedAction extends AbstractProfileAction {
* @return the predicate
* @throws ScriptException if the compile fails
*/
- static public ScriptedAction inlineScript(@Nonnull @NotEmpty final String scriptSource) throws ScriptException {
+ public static ScriptedAction inlineScript(@Nonnull @NotEmpty final String scriptSource) throws ScriptException {
return inlineScript(DEFAULT_ENGINE, scriptSource);
}
@@ -229,7 +231,7 @@ public class ScriptedAction extends AbstractProfileAction {
/** {@inheritDoc} */
@Override
protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
- scriptContext.setAttribute("profileContext", input[0], ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute("profileContext", input != null ? input[0] : null, ScriptContext.ENGINE_SCOPE);
}
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/AbstractConditionalProfileConfiguration.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/AbstractConditionalProfileConfiguration.java
index 32f7b47b2..068b9bed4 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/AbstractConditionalProfileConfiguration.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/AbstractConditionalProfileConfiguration.java
@@ -21,11 +21,10 @@ import java.util.function.Predicate;
import javax.annotation.Nonnull;
-import com.google.common.base.Predicates;
-
import net.shibboleth.shared.annotation.ParameterName;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.logic.PredicateSupport;
import org.opensaml.profile.context.ProfileRequestContext;
@@ -48,7 +47,7 @@ public abstract class AbstractConditionalProfileConfiguration extends AbstractPr
public AbstractConditionalProfileConfiguration(@Nonnull @NotEmpty @ParameterName(name="id") final String id) {
super(id);
- activationCondition = Predicates.alwaysTrue();
+ activationCondition = PredicateSupport.alwaysTrue();
}
/** {@inheritDoc} */
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/AbstractProfileConfiguration.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/AbstractProfileConfiguration.java
index 7c3eceab2..b99bf6cce 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/AbstractProfileConfiguration.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/AbstractProfileConfiguration.java
@@ -37,8 +37,6 @@ import net.shibboleth.shared.logic.FunctionSupport;
import net.shibboleth.shared.primitive.StringSupport;
import org.opensaml.profile.context.ProfileRequestContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/** Base class for {@link ProfileConfiguration} implementations. */
public abstract class AbstractProfileConfiguration extends AbstractIdentifiableInitializableComponent
@@ -47,9 +45,6 @@ public abstract class AbstractProfileConfiguration extends AbstractIdentifiableI
/** Default value for disallowedFeatures property. */
@Nonnull public static final Integer DEFAULT_DISALLOWED_FEATURES = 0;
- /** Class logger. */
- @Nonnull private final Logger log = LoggerFactory.getLogger(AbstractProfileConfiguration.class);
-
/** Lookup function to supply inboundFlows property. */
@Nonnull private Function<ProfileRequestContext,List<String>> inboundFlowsLookupStrategy;
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/BasicSecurityConfiguration.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/BasicSecurityConfiguration.java
index 453bdd29c..74fd7e47c 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/BasicSecurityConfiguration.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/BasicSecurityConfiguration.java
@@ -64,7 +64,8 @@ public class BasicSecurityConfiguration implements SecurityConfiguration {
* @param skew the clock skew, must be greater than 0
* @param generator the identifier generator, must not be null
*/
- public BasicSecurityConfiguration(@Nonnull final Duration skew, @Nonnull final IdentifierGenerationStrategy generator) {
+ public BasicSecurityConfiguration(@Nonnull final Duration skew,
+ @Nonnull final IdentifierGenerationStrategy generator) {
Constraint.isNotNull(skew, "Clock skew cannot be null");
Constraint.isFalse(skew.isNegative() || skew.isZero(), "Clock skew must be greater than 0");
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/BasicXMLSecurityConfiguration.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/BasicXMLSecurityConfiguration.java
index 1f0261342..5de8ff089 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/BasicXMLSecurityConfiguration.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/BasicXMLSecurityConfiguration.java
@@ -61,7 +61,8 @@ public class BasicXMLSecurityConfiguration extends BasicSecurityConfiguration im
* @param skew the clock skew, must be greater than 0
* @param generator the identifier generator, must not be null
*/
- public BasicXMLSecurityConfiguration(@Nonnull final Duration skew, @Nonnull final IdentifierGenerationStrategy generator) {
+ public BasicXMLSecurityConfiguration(@Nonnull final Duration skew,
+ @Nonnull final IdentifierGenerationStrategy generator) {
super(skew, generator);
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/logic/DetailedErrorsPredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/logic/DetailedErrorsPredicate.java
index ba3260010..f729c8b82 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/logic/DetailedErrorsPredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/logic/DetailedErrorsPredicate.java
@@ -21,6 +21,7 @@ import javax.annotation.Nullable;
import net.shibboleth.idp.profile.context.RelyingPartyContext;
import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
+import net.shibboleth.idp.relyingparty.RelyingPartyConfiguration;
import org.opensaml.profile.context.ProfileRequestContext;
@@ -33,8 +34,11 @@ public class DetailedErrorsPredicate extends AbstractRelyingPartyPredicate {
public boolean test(@Nullable final ProfileRequestContext input) {
if (input != null) {
final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
- if (rpc != null && rpc.getConfiguration() != null) {
- return rpc.getConfiguration().isDetailedErrors(input);
+ if (rpc != null) {
+ final RelyingPartyConfiguration config = rpc.getConfiguration();
+ if (config != null) {
+ return config.isDetailedErrors(input);
+ }
}
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/logic/ResolveAttributesPredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/logic/ResolveAttributesPredicate.java
index edfa3e6d7..1ce488de7 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/logic/ResolveAttributesPredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/logic/ResolveAttributesPredicate.java
@@ -20,6 +20,7 @@ package net.shibboleth.idp.profile.config.logic;
import javax.annotation.Nullable;
import net.shibboleth.idp.profile.config.AttributeResolvingProfileConfiguration;
+import net.shibboleth.idp.profile.config.ProfileConfiguration;
import net.shibboleth.idp.profile.context.RelyingPartyContext;
import net.shibboleth.idp.profile.logic.AbstractRelyingPartyPredicate;
@@ -36,8 +37,11 @@ public class ResolveAttributesPredicate extends AbstractRelyingPartyPredicate {
public boolean test(@Nullable final ProfileRequestContext input) {
if (input != null) {
final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
- if (rpc != null && rpc.getProfileConfig() instanceof AttributeResolvingProfileConfiguration) {
- return ((AttributeResolvingProfileConfiguration) rpc.getProfileConfig()).isResolveAttributes(input);
+ if (rpc != null) {
+ final ProfileConfiguration pc = rpc.getProfileConfig();
+ if (pc instanceof AttributeResolvingProfileConfiguration) {
+ return ((AttributeResolvingProfileConfiguration) pc).isResolveAttributes(input);
+ }
}
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/IdentifierGenerationStrategyLookupFunction.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/IdentifierGenerationStrategyLookupFunction.java
index 82c00b137..74eea7820 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/IdentifierGenerationStrategyLookupFunction.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/IdentifierGenerationStrategyLookupFunction.java
@@ -40,6 +40,9 @@ public class IdentifierGenerationStrategyLookupFunction
/** A resolver for default security configurations. */
@Nullable private RelyingPartyConfigurationResolver rpResolver;
+ /** Default strategy to return. */
+ @Nullable private IdentifierGenerationStrategy defaultGenerator;
+
/**
* Set the resolver for default security configurations.
*
@@ -48,9 +51,6 @@ public class IdentifierGenerationStrategyLookupFunction
public void setRelyingPartyConfigurationResolver(@Nullable final RelyingPartyConfigurationResolver resolver) {
rpResolver = resolver;
}
-
- /** Default strategy to return. */
- @Nullable private IdentifierGenerationStrategy defaultGenerator;
/**
* Set the default {@link IdentifierGenerationStrategy} to return.
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/SignatureSigningConfigurationLookupFunction.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/SignatureSigningConfigurationLookupFunction.java
index a28ff8651..f4efbe9b3 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/SignatureSigningConfigurationLookupFunction.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/SignatureSigningConfigurationLookupFunction.java
@@ -74,7 +74,8 @@ public class SignatureSigningConfigurationLookupFunction
if (input != null && rpResolver != null) {
final SecurityConfiguration defaultConfig =
rpResolver.getDefaultSecurityConfiguration(input.getProfileId());
- if (defaultConfig instanceof XMLSecurityConfiguration xsc && xsc.getSignatureSigningConfiguration() != null) {
+ if (defaultConfig instanceof XMLSecurityConfiguration xsc &&
+ xsc.getSignatureSigningConfiguration() != null) {
configs.add(xsc.getSignatureSigningConfiguration());
}
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/messaging/HttpClientSecurityConfigurationLookupFunction.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/messaging/HttpClientSecurityConfigurationLookupFunction.java
index e80f1e8f4..fa3e4dce7 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/messaging/HttpClientSecurityConfigurationLookupFunction.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/messaging/HttpClientSecurityConfigurationLookupFunction.java
@@ -71,11 +71,13 @@ public class HttpClientSecurityConfigurationLookupFunction
}
// Check for a per-profile default (relying party independent) config.
- if (pc != null && rpResolver != null) {
- final SecurityConfiguration defaultConfig =
- rpResolver.getDefaultSecurityConfiguration(pc.getId());
- if (defaultConfig != null && defaultConfig.getHttpClientSecurityConfiguration() != null) {
- configs.add(defaultConfig.getHttpClientSecurityConfiguration());
+ if (pc != null) {
+ final String id = pc.getId();
+ if (id != null && rpResolver != null) {
+ final SecurityConfiguration defaultConfig = rpResolver.getDefaultSecurityConfiguration(id);
+ if (defaultConfig != null && defaultConfig.getHttpClientSecurityConfiguration() != null) {
+ configs.add(defaultConfig.getHttpClientSecurityConfiguration());
+ }
}
}
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/messaging/SignatureSigningConfigurationLookupFunction.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/messaging/SignatureSigningConfigurationLookupFunction.java
index 054cb4548..b61bb3e70 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/messaging/SignatureSigningConfigurationLookupFunction.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/messaging/SignatureSigningConfigurationLookupFunction.java
@@ -72,12 +72,14 @@ public class SignatureSigningConfigurationLookupFunction
}
// Check for a per-profile default (relying party independent) config.
- if (pc != null && rpResolver != null) {
- final SecurityConfiguration defaultConfig =
- rpResolver.getDefaultSecurityConfiguration(pc.getId());
- if (defaultConfig instanceof XMLSecurityConfiguration xsc &&
- xsc.getSignatureSigningConfiguration() != null) {
- configs.add(xsc.getSignatureSigningConfiguration());
+ if (pc != null) {
+ final String id = pc.getId();
+ if (id != null && rpResolver != null) {
+ final SecurityConfiguration defaultConfig = rpResolver.getDefaultSecurityConfiguration(id);
+ if (defaultConfig instanceof XMLSecurityConfiguration xsc &&
+ xsc.getSignatureSigningConfiguration() != null) {
+ configs.add(xsc.getSignatureSigningConfiguration());
+ }
}
}
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/messaging/SignatureValidationConfigurationLookupFunction.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/messaging/SignatureValidationConfigurationLookupFunction.java
index 7d971f7f1..e6953964c 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/messaging/SignatureValidationConfigurationLookupFunction.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/config/navigate/messaging/SignatureValidationConfigurationLookupFunction.java
@@ -72,12 +72,14 @@ public class SignatureValidationConfigurationLookupFunction
}
// Check for a per-profile default (relying party independent) config.
- if (pc != null && rpResolver != null) {
- final SecurityConfiguration defaultConfig =
- rpResolver.getDefaultSecurityConfiguration(pc.getId());
- if (defaultConfig instanceof XMLSecurityConfiguration xsc &&
- xsc.getSignatureValidationConfiguration() != null) {
- configs.add(xsc.getSignatureValidationConfiguration());
+ if (pc != null) {
+ final String id = pc.getId();
+ if (id != null && rpResolver != null) {
+ final SecurityConfiguration defaultConfig = rpResolver.getDefaultSecurityConfiguration(id);
+ if (defaultConfig instanceof XMLSecurityConfiguration xsc &&
+ xsc.getSignatureValidationConfiguration() != null) {
+ configs.add(xsc.getSignatureValidationConfiguration());
+ }
}
}
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/MultiRelyingPartyContext.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/MultiRelyingPartyContext.java
index 9d9440390..43d188c31 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/MultiRelyingPartyContext.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/MultiRelyingPartyContext.java
@@ -60,9 +60,6 @@ public final class MultiRelyingPartyContext extends BaseContext {
/** An iterator to track progress through the set of relying parties. */
@Nullable private Iterator<RelyingPartyContext> relyingPartyIterator;
- /** Tracks the context being operated on. */
- @Nullable private RelyingPartyContext relyingPartyCtx;
-
/** Constructor. */
public MultiRelyingPartyContext() {
relyingPartyIdMap = new HashMap<>();
@@ -118,6 +115,7 @@ public final class MultiRelyingPartyContext extends BaseContext {
if (fresh || relyingPartyIterator == null) {
relyingPartyIterator = new RelyingPartyContextIterator(this);
}
+ assert relyingPartyIterator != null;
return relyingPartyIterator;
}
@@ -179,9 +177,6 @@ public final class MultiRelyingPartyContext extends BaseContext {
* Wrapper for an iterator that tracks the current object.
*/
private class RelyingPartyContextIterator implements Iterator<RelyingPartyContext> {
-
- /** Outer ctx. */
- @Nonnull private final MultiRelyingPartyContext multiCtx;
/** Embedded iterator. */
@Nonnull private final Iterator<RelyingPartyContext> iterator;
@@ -195,7 +190,6 @@ public final class MultiRelyingPartyContext extends BaseContext {
* @param ctx outer context
*/
public RelyingPartyContextIterator(@Nonnull final MultiRelyingPartyContext ctx) {
- multiCtx = ctx;
iterator = ctx.relyingPartyIdMap.values().iterator();
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/RelyingPartyContextLookupById.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/RelyingPartyContextLookupById.java
index 38796309c..4b36589d4 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/RelyingPartyContextLookupById.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/RelyingPartyContextLookupById.java
@@ -17,7 +17,7 @@
package net.shibboleth.idp.profile.context.navigate;
-import java.util.function.Function;
+import java.util.function.BiFunction;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -26,17 +26,16 @@ import net.shibboleth.idp.profile.context.MultiRelyingPartyContext;
import net.shibboleth.idp.profile.context.RelyingPartyContext;
import net.shibboleth.shared.annotation.ParameterName;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
-import net.shibboleth.shared.collection.Pair;
import net.shibboleth.shared.logic.Constraint;
import net.shibboleth.shared.primitive.StringSupport;
/**
- * A function that returns a {@link RelyingPartyContext} based on ID.
+ * A {@link BiFunction} that returns a {@link RelyingPartyContext} based on ID.
*
* <p>If a label is provided, the context will be auto-created if it doesn't already exist.</p>
*/
public class RelyingPartyContextLookupById
- implements Function<Pair<MultiRelyingPartyContext,String>, RelyingPartyContext> {
+ implements BiFunction<MultiRelyingPartyContext,String,RelyingPartyContext> {
/** Label to use for auto-creation. */
@Nullable private final String label;
@@ -56,21 +55,23 @@ public class RelyingPartyContextLookupById
}
/** {@inheritDoc} */
- @Nullable public RelyingPartyContext apply(@Nullable final Pair<MultiRelyingPartyContext,String> input) {
- if (input == null || input.getFirst() == null) {
+ @Nullable public RelyingPartyContext apply(@Nullable final MultiRelyingPartyContext input1,
+ @Nullable final String input2) {
+ if (input1 == null) {
return null;
}
- final String id = StringSupport.trimOrNull(input.getSecond());
+ final String id = StringSupport.trimOrNull(input2);
if (id == null) {
return null;
}
- RelyingPartyContext rpCtx = input.getFirst().getRelyingPartyContextById(id);
+ RelyingPartyContext rpCtx = input1.getRelyingPartyContextById(id);
if (rpCtx == null && label != null) {
rpCtx = new RelyingPartyContext();
rpCtx.setRelyingPartyId(id);
- input.getFirst().addRelyingPartyContext(label, rpCtx);
+ assert label != null;
+ input1.addRelyingPartyContext(label, rpCtx);
}
return rpCtx;
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/RelyingPartyContextLookupByLabel.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/RelyingPartyContextLookupByLabel.java
index 8456614c6..770e7d072 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/RelyingPartyContextLookupByLabel.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/RelyingPartyContextLookupByLabel.java
@@ -37,7 +37,7 @@ public class RelyingPartyContextLookupByLabel
implements Function<MultiRelyingPartyContext, Collection<RelyingPartyContext>> {
/** Label to use for auto-creation. */
- @Nullable private final String label;
+ @Nonnull private final String label;
/**
* Constructor.
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/ResponderIdLookupFunction.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/ResponderIdLookupFunction.java
index fc0d505ad..c308ea44f 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/ResponderIdLookupFunction.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/ResponderIdLookupFunction.java
@@ -20,7 +20,9 @@ package net.shibboleth.idp.profile.context.navigate;
import javax.annotation.Nullable;
import net.shibboleth.idp.profile.config.OverriddenIssuerProfileConfiguration;
+import net.shibboleth.idp.profile.config.ProfileConfiguration;
import net.shibboleth.idp.profile.context.RelyingPartyContext;
+import net.shibboleth.idp.relyingparty.RelyingPartyConfiguration;
import org.opensaml.profile.context.ProfileRequestContext;
@@ -41,17 +43,17 @@ public class ResponderIdLookupFunction extends AbstractRelyingPartyLookupFunctio
if (input != null) {
final RelyingPartyContext rpc = getRelyingPartyContextLookupStrategy().apply(input);
if (rpc != null) {
-
- if (rpc.getProfileConfig() instanceof OverriddenIssuerProfileConfiguration) {
- final String issuer =
- ((OverriddenIssuerProfileConfiguration) rpc.getProfileConfig()).getIssuer(input);
+ final ProfileConfiguration pc = rpc.getProfileConfig();
+ if (pc instanceof OverriddenIssuerProfileConfiguration) {
+ final String issuer = ((OverriddenIssuerProfileConfiguration) pc).getIssuer(input);
if (issuer != null) {
return issuer;
}
}
- if (rpc.getConfiguration() != null) {
- return rpc.getConfiguration().getResponderId(input);
+ final RelyingPartyConfiguration rpConfig = rpc.getConfiguration();
+ if (rpConfig != null) {
+ return rpConfig.getResponderId(input);
}
}
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/ScriptedContextLookupFunction.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/ScriptedContextLookupFunction.java
index bb8c89c0a..9de586bf0 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/ScriptedContextLookupFunction.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/ScriptedContextLookupFunction.java
@@ -111,8 +111,8 @@ public class ScriptedContextLookupFunction<T extends BaseContext> extends Abstra
protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
// We don't actually know that the context is a PRC, but we'll keep this for compatibility.
// We can't use the variable name "context" because Rhino appears to reserve that name.
- scriptContext.setAttribute("profileContext", input[0], ScriptContext.ENGINE_SCOPE);
- scriptContext.setAttribute("input", input[0], ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute("profileContext", input != null ? input[0] : null, ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute("input", input != null ? input[0] : null, ScriptContext.ENGINE_SCOPE);
}
/**
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/SpringEventToViewLookupFunction.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/SpringEventToViewLookupFunction.java
index 79db5e7f1..100e41972 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/SpringEventToViewLookupFunction.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/SpringEventToViewLookupFunction.java
@@ -60,7 +60,7 @@ public class SpringEventToViewLookupFunction implements Function<Event,String> {
*
* @param map map to use
*/
- public void setEventMap(@Nonnull @NonnullElements final Map<String,String> map) {
+ public void setEventMap(@Nullable @NonnullElements final Map<String,String> map) {
if (map == null) {
eventMap = Collections.emptyMap();
} else {
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/SpringStatusMessageLookupFunction.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/SpringStatusMessageLookupFunction.java
index 4a705f688..15baf8888 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/SpringStatusMessageLookupFunction.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/SpringStatusMessageLookupFunction.java
@@ -38,7 +38,7 @@ import org.springframework.webflow.execution.RequestContext;
public class SpringStatusMessageLookupFunction implements Function<ProfileRequestContext, String>, MessageSourceAware {
/** MessageSource injected by Spring, typically the parent ApplicationContext itself. */
- @Nonnull private MessageSource messageSource;
+ @Nullable private MessageSource messageSource;
/** {@inheritDoc} */
@Nullable public String apply(@Nullable final ProfileRequestContext input) {
@@ -50,6 +50,8 @@ public class SpringStatusMessageLookupFunction implements Function<ProfileReques
? springRequestContext.getCurrentEvent() : null;
if (previousEvent != null) {
try {
+ assert messageSource != null;
+ assert springRequestContext != null;
return messageSource.getMessage(previousEvent.getId(), null,
springRequestContext.getExternalContext().getLocale());
} catch (final NoSuchMessageException e) {
@@ -64,7 +66,7 @@ public class SpringStatusMessageLookupFunction implements Function<ProfileReques
/** {@inheritDoc} */
@Override
- public void setMessageSource(final MessageSource source) {
+ public void setMessageSource(@Nonnull final MessageSource source) {
messageSource = source;
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/WebFlowCurrentEventLookupFunction.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/WebFlowCurrentEventLookupFunction.java
index bfc17869d..a69d1926a 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/WebFlowCurrentEventLookupFunction.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/WebFlowCurrentEventLookupFunction.java
@@ -46,18 +46,18 @@ public class WebFlowCurrentEventLookupFunction implements Function<ProfileReques
eventCtx = input.getSubcontext(PreviousEventContext.class);
}
- // If nothing in the Spring layer, just return what we have.
final SpringRequestContext springContext = input.getSubcontext(SpringRequestContext.class);
- if (springContext == null || springContext.getRequestContext() == null
- || springContext.getRequestContext().getCurrentEvent() == null) {
+ final RequestContext springRequest = springContext != null ? springContext.getRequestContext() : null;
+
+
+ // If nothing in the Spring layer, just return what we have.
+ if (springRequest == null || springRequest.getCurrentEvent() == null) {
return eventCtx;
}
-
- final RequestContext springRequest = springContext.getRequestContext();
-
- if (eventCtx == null || eventCtx.getEvent() == null
- || !Objects.equals(eventCtx.getEvent().toString(), springRequest.getCurrentEvent().getId())) {
- eventCtx = input.getSubcontext(EventContext.class, true);
+
+ final Object current = eventCtx != null ? eventCtx.getEvent() : null;
+ if (current == null || !Objects.equals(current.toString(), springRequest.getCurrentEvent().getId())) {
+ eventCtx = input.getOrCreateSubcontext(EventContext.class);
eventCtx.setEvent(springRequest.getCurrentEvent());
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/WebflowRequestContextProfileRequestContextLookup.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/WebflowRequestContextProfileRequestContextLookup.java
index 72c168191..6eb58818a 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/WebflowRequestContextProfileRequestContextLookup.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/context/navigate/WebflowRequestContextProfileRequestContextLookup.java
@@ -34,9 +34,11 @@ public class WebflowRequestContextProfileRequestContextLookup implements
/** {@inheritDoc} */
@Nullable public ProfileRequestContext apply(@Nullable final RequestContext requestContext) {
- final Object ctx = requestContext.getConversationScope().get(ProfileRequestContext.BINDING_KEY);
- if (ctx instanceof ProfileRequestContext) {
- return (ProfileRequestContext) ctx;
+ if (requestContext != null) {
+ final Object ctx = requestContext.getConversationScope().get(ProfileRequestContext.BINDING_KEY);
+ if (ctx instanceof ProfileRequestContext) {
+ return (ProfileRequestContext) ctx;
+ }
}
return null;
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/interceptor/AbstractProfileInterceptorAction.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/interceptor/AbstractProfileInterceptorAction.java
index e7ca0b1a6..d5f806cc2 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/interceptor/AbstractProfileInterceptorAction.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/interceptor/AbstractProfileInterceptorAction.java
@@ -78,6 +78,7 @@ public abstract class AbstractProfileInterceptorAction extends
return false;
}
+ assert profileInterceptorContext != null;
return doPreExecute(profileRequestContext, profileInterceptorContext)
&& super.doPreExecute(profileRequestContext);
}
@@ -98,6 +99,7 @@ public abstract class AbstractProfileInterceptorAction extends
/** {@inheritDoc} */
@Override protected final void doExecute(@Nonnull final ProfileRequestContext profileRequestContext) {
+ assert profileInterceptorContext != null;
doExecute(profileRequestContext, profileInterceptorContext);
}
@@ -112,4 +114,4 @@ public abstract class AbstractProfileInterceptorAction extends
}
-}
+}
\ No newline at end of file
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/interceptor/ExternalInterceptor.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/interceptor/ExternalInterceptor.java
index 438a2d249..a1a1e4918 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/interceptor/ExternalInterceptor.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/interceptor/ExternalInterceptor.java
@@ -99,6 +99,7 @@ public abstract class ExternalInterceptor {
throw new ExternalInterceptorException("No conversation key found in request");
}
+ assert key != null;
final ProfileRequestContext profileRequestContext = getProfileRequestContext(key, request);
final ExternalInterceptorContext extContext = getExternalInterceptorContext(profileRequestContext);
extContext.getExternalInterceptor().doStart(request, profileRequestContext, extContext);
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/interceptor/ProfileInterceptorFlowDescriptor.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/interceptor/ProfileInterceptorFlowDescriptor.java
index 0cb17cd4e..a942ed00b 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/interceptor/ProfileInterceptorFlowDescriptor.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/interceptor/ProfileInterceptorFlowDescriptor.java
@@ -26,12 +26,12 @@ import org.opensaml.profile.context.ProfileRequestContext;
import org.opensaml.storage.StorageService;
import com.google.common.base.MoreObjects;
-import com.google.common.base.Predicates;
import net.shibboleth.idp.profile.FlowDescriptor;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
import net.shibboleth.shared.logic.Constraint;
+import net.shibboleth.shared.logic.PredicateSupport;
/**
* A descriptor for a profile interceptor flow.
@@ -59,7 +59,7 @@ public class ProfileInterceptorFlowDescriptor extends AbstractIdentifiableInitia
/** Constructor. */
public ProfileInterceptorFlowDescriptor() {
- activationCondition = Predicates.alwaysTrue();
+ activationCondition = PredicateSupport.alwaysTrue();
supportsNonBrowser = true;
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DateAttributePredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DateAttributePredicate.java
index 06a02b58b..53d03b465 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DateAttributePredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/DateAttributePredicate.java
@@ -30,6 +30,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import java.time.DateTimeException;
import java.time.Duration;
@@ -54,7 +55,7 @@ public class DateAttributePredicate extends AbstractAttributePredicate {
@Nonnull @NotEmpty private final String attributeName;
/** Formatter used to parse string-based date attribute values. */
- @Nonnull private final DateTimeFormatter dateTimeFormatter;
+ @Nullable private final DateTimeFormatter dateTimeFormatter;
/** Offset from system time used for date comparisons. */
@Nonnull private Duration systemTimeOffset;
@@ -70,7 +71,7 @@ public class DateAttributePredicate extends AbstractAttributePredicate {
public DateAttributePredicate(@Nonnull @NotEmpty @ParameterName(name="attribute") final String attribute) {
attributeName = Constraint.isNotNull(attribute, "Attribute cannot be null");
dateTimeFormatter = null;
- systemTimeOffset = java.time.Duration.ZERO;
+ systemTimeOffset = Duration.ZERO;
}
/**
@@ -85,7 +86,7 @@ public class DateAttributePredicate extends AbstractAttributePredicate {
attributeName = Constraint.isNotNull(attribute, "Attribute cannot be null");
dateTimeFormatter = Constraint.isNotNull(formatter, "Formatter cannot be null");
- systemTimeOffset = java.time.Duration.ZERO;
+ systemTimeOffset = Duration.ZERO;
}
/**
@@ -100,7 +101,7 @@ public class DateAttributePredicate extends AbstractAttributePredicate {
attributeName = Constraint.isNotNull(attribute, "Attribute cannot be null");
dateTimeFormatter = DateTimeFormatter.ofPattern(
Constraint.isNotNull(formatString, "Format string cannot be null"));
- systemTimeOffset = java.time.Duration.ZERO;
+ systemTimeOffset = Duration.ZERO;
}
/**
@@ -157,6 +158,7 @@ public class DateAttributePredicate extends AbstractAttributePredicate {
}
dateString = ((StringAttributeValue) value).getValue();
try {
+ assert dateTimeFormatter != null;
if (Instant.from(dateTimeFormatter.parse(dateString)).plus(systemTimeOffset).isAfter(now)) {
return true;
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/LoopDetectionPredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/LoopDetectionPredicate.java
index dbe079f4b..44f97ccbb 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/LoopDetectionPredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/LoopDetectionPredicate.java
@@ -110,7 +110,12 @@ public class LoopDetectionPredicate extends AbstractRelyingPartyPredicate {
if (meterName != null) {
meterName = MetricRegistry.name("net.shibboleth.idp.loopDetection", meterName,
username.replace(".",""));
- final Meter meter = MetricsSupport.getMetricRegistry().meter(meterName,
+ final MetricRegistry registry = MetricsSupport.getMetricRegistry();
+ if (registry == null) {
+ log.error("MetricRegistry was unavailable");
+ return false;
+ }
+ final Meter meter = registry.meter(meterName,
new MetricSupplier<Meter>() {
public Meter newMetric() {
return new Meter(new SlidingTimeWindowMovingAverages());
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/RegexAttributePredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/RegexAttributePredicate.java
index 4709f9891..6caf2986a 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/RegexAttributePredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/RegexAttributePredicate.java
@@ -113,6 +113,7 @@ public class RegexAttributePredicate extends AbstractAttributePredicate {
for (final IdPAttributeValue value : attribute.getValues()) {
if (value instanceof StringAttributeValue) {
+ assert pattern != null;
final Matcher m = pattern.matcher(((StringAttributeValue)value).getValue());
if (m.matches()) {
log.debug("Found matching value '{}' in attribute '{}'", m.group(), attributeId);
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/ScriptedPredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/ScriptedPredicate.java
index 9b57633c2..c34814e80 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/ScriptedPredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/ScriptedPredicate.java
@@ -71,7 +71,7 @@ public class ScriptedPredicate
@Override
protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
super.prepareContext(scriptContext, input);
- scriptContext.setAttribute("profileContext", input[0], ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute("profileContext", input != null ? input[0] : null, ScriptContext.ENGINE_SCOPE);
}
/**
@@ -102,7 +102,8 @@ public class ScriptedPredicate
* @throws ScriptException if the compile fails
* @throws IOException if the file doesn't exist.
*/
- public static ScriptedPredicate resourceScript(final Resource resource) throws ScriptException, IOException {
+ public static ScriptedPredicate resourceScript(@Nonnull final Resource resource)
+ throws ScriptException, IOException {
return resourceScript(DEFAULT_ENGINE, resource);
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SimpleAttributePredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SimpleAttributePredicate.java
index 17f2abb25..778571f44 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SimpleAttributePredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SimpleAttributePredicate.java
@@ -149,9 +149,10 @@ public class SimpleAttributePredicate extends AbstractAttributePredicate {
for (final IdPAttributeValue value : attribute.getValues()) {
if (scope != null && value instanceof ScopedStringAttributeValue) {
+ final String scopeCopy = scope;
if ("*".equals(toMatch) || toMatch.equals(((ScopedStringAttributeValue) value).getValue())) {
- if ("*".equals(scope) || scope.equals(((ScopedStringAttributeValue) value).getScope())) {
- log.debug("Found matching value ({}) and scope ({}) in attribute {}", toMatch, scope,
+ if ("*".equals(scopeCopy) || scopeCopy.equals(((ScopedStringAttributeValue) value).getScope())) {
+ log.debug("Found matching value ({}) and scope ({}) in attribute {}", toMatch, scopeCopy,
attribute.getId());
return true;
}
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SpringExpressionPredicate.java b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SpringExpressionPredicate.java
index c30192c05..4ec918d15 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SpringExpressionPredicate.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/profile/logic/SpringExpressionPredicate.java
@@ -48,7 +48,7 @@ public class SpringExpressionPredicate
@Override
protected void prepareContext(@Nonnull final EvaluationContext context, @Nullable final Object... input) {
super.prepareContext(context, input);
- context.setVariable("profileContext", input[0]);
+ context.setVariable("profileContext", input != null ? input[0] : input);
}
}
\ No newline at end of file
diff --git a/idp-profile-api/src/main/java/net/shibboleth/idp/relyingparty/RelyingPartyConfiguration.java b/idp-profile-api/src/main/java/net/shibboleth/idp/relyingparty/RelyingPartyConfiguration.java
index 03d340790..63672d328 100644
--- a/idp-profile-api/src/main/java/net/shibboleth/idp/relyingparty/RelyingPartyConfiguration.java
+++ b/idp-profile-api/src/main/java/net/shibboleth/idp/relyingparty/RelyingPartyConfiguration.java
@@ -29,12 +29,9 @@ import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.opensaml.profile.context.ProfileRequestContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Predicates;
import net.shibboleth.idp.profile.config.ProfileConfiguration;
+import net.shibboleth.shared.annotation.constraint.NonnullAfterInit;
import net.shibboleth.shared.annotation.constraint.NonnullElements;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.annotation.constraint.NotLive;
@@ -44,17 +41,15 @@ import net.shibboleth.shared.component.ComponentInitializationException;
import net.shibboleth.shared.component.IdentifiedComponent;
import net.shibboleth.shared.logic.Constraint;
import net.shibboleth.shared.logic.FunctionSupport;
+import net.shibboleth.shared.logic.PredicateSupport;
import net.shibboleth.shared.primitive.StringSupport;
/** The configuration that applies to a given relying party. */
public class RelyingPartyConfiguration extends AbstractIdentifiableInitializableComponent implements
IdentifiedComponent, Predicate<ProfileRequestContext> {
- /** Class logger. */
- @Nonnull private final Logger log = LoggerFactory.getLogger(RelyingPartyConfiguration.class);
-
/** Lookup function to supply <code>responderId</code> property. */
- @Nonnull private Function<ProfileRequestContext,String> responderIdLookupStrategy;
+ @NonnullAfterInit private Function<ProfileRequestContext,String> responderIdLookupStrategy;
/** Controls whether detailed information about errors should be exposed. */
@Nonnull private Predicate<ProfileRequestContext> detailedErrorsPredicate;
@@ -68,8 +63,8 @@ public class RelyingPartyConfiguration extends AbstractIdentifiableInitializable
/** Constructor. */
public RelyingPartyConfiguration() {
- activationCondition = Predicates.alwaysTrue();
- detailedErrorsPredicate = Predicates.alwaysFalse();
+ activationCondition = PredicateSupport.alwaysTrue();
+ detailedErrorsPredicate = PredicateSupport.alwaysFalse();
profileConfigurationsLookupStrategy = FunctionSupport.constant(null);
}
@@ -127,7 +122,7 @@ public class RelyingPartyConfiguration extends AbstractIdentifiableInitializable
*/
public void setDetailedErrors(final boolean flag) {
checkSetterPreconditions();
- detailedErrorsPredicate = flag ? Predicates.alwaysTrue() : Predicates.alwaysFalse();
+ detailedErrorsPredicate = PredicateSupport.constant(flag);
}
/**
diff --git a/idp-profile-api/src/test/java/net/shibboleth/idp/profile/interceptor/AbstractProfileInterceptorResultTest.java b/idp-profile-api/src/test/java/net/shibboleth/idp/profile/interceptor/AbstractProfileInterceptorResultTest.java
index e01d2c0f4..2da9d1cc8 100644
--- a/idp-profile-api/src/test/java/net/shibboleth/idp/profile/interceptor/AbstractProfileInterceptorResultTest.java
+++ b/idp-profile-api/src/test/java/net/shibboleth/idp/profile/interceptor/AbstractProfileInterceptorResultTest.java
@@ -29,6 +29,7 @@ import org.testng.Assert;
import org.testng.annotations.Test;
/** {@link AbstractProfileInterceptorResult} unit test. */
+ at SuppressWarnings("javadoc")
public class AbstractProfileInterceptorResultTest {
@Test(expectedExceptions = ConstraintViolationException.class)
@@ -46,24 +47,9 @@ public class AbstractProfileInterceptorResultTest {
new MockAbstractProfileInterceptorResult("context", "key", "", Instant.ofEpochMilli(100));
}
- @Test(expectedExceptions = ConstraintViolationException.class)
- public void testNullContext() {
- new MockAbstractProfileInterceptorResult(null, "key", "value", Instant.ofEpochMilli(100));
- }
-
- @Test(expectedExceptions = ConstraintViolationException.class)
- public void testNullKey() {
- new MockAbstractProfileInterceptorResult("context", null, "value", Instant.ofEpochMilli(100));
- }
-
- @Test(expectedExceptions = ConstraintViolationException.class)
- public void testNullValue() {
- new MockAbstractProfileInterceptorResult("context", "key", null, Instant.ofEpochMilli(100));
- }
-
@Test(expectedExceptions = ConstraintViolationException.class)
public void testNegativeExpiration() {
- new MockAbstractProfileInterceptorResult("context", "key", null, Instant.ofEpochMilli(-100));
+ new MockAbstractProfileInterceptorResult("context", "key", "value", Instant.ofEpochMilli(-100));
}
@Test public void testNullExpiration() {
@@ -76,7 +62,7 @@ public class AbstractProfileInterceptorResultTest {
}
@Test(expectedExceptions = ConstraintViolationException.class) public void testZeroExpiration() {
- new MockAbstractProfileInterceptorResult("context", "key", null, Instant.ofEpochMilli(0));
+ new MockAbstractProfileInterceptorResult("context", "key", "value", Instant.ofEpochMilli(0));
}
@Test public void testResult() {
@@ -96,4 +82,5 @@ public class AbstractProfileInterceptorResultTest {
super(context, key, value, expiration);
}
}
-}
+
+}
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list