[java-identity-provider] branch maint-3.3 updated: Fix config files checked in with DOS line endings.
Scott Cantor
cantor.2 at osu.edu
Mon May 1 20:58:11 EDT 2017
This is an automated email from the git hooks/post-receive script.
scantor pushed a commit to branch maint-3.3
in repository java-identity-provider.
View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=a31b1a16f2220444a43158f2a8431ffb2bfdc70c
The following commit(s) were added to refs/heads/maint-3.3 by this push:
new a31b1a1 Fix config files checked in with DOS line endings.
a31b1a1 is described below
commit a31b1a16f2220444a43158f2a8431ffb2bfdc70c
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Mon May 1 20:58:02 2017 -0400
Fix config files checked in with DOS line endings.
---
.../main/resources/conf/admin/general-admin.xml | 106 +++++-----
.../main/resources/conf/authn/mfa-authn-config.xml | 198 +++++++++----------
.../resources/system/conf/general-admin-system.xml | 214 ++++++++++-----------
.../resources/system/flows/admin/storage-beans.xml | 84 ++++----
.../resources/system/flows/admin/storage-flow.xml | 88 ++++-----
.../test/resources/conf/relying-party-legacy.xml | 162 ++++++++--------
6 files changed, 426 insertions(+), 426 deletions(-)
diff --git a/idp-conf/src/main/resources/conf/admin/general-admin.xml b/idp-conf/src/main/resources/conf/admin/general-admin.xml
index 6e9fc19..9b3b180 100644
--- a/idp-conf/src/main/resources/conf/admin/general-admin.xml
+++ b/idp-conf/src/main/resources/conf/admin/general-admin.xml
@@ -1,53 +1,53 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p"
- xmlns:c="http://www.springframework.org/schema/c" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-
- default-init-method="initialize"
- default-destroy-method="destroy">
-
- <util:list id="shibboleth.AvailableAdminFlows">
-
- <!-- Status Page -->
- <bean parent="shibboleth.AdminFlow"
- c:id="http://shibboleth.net/ns/profiles/status"
- p:loggingId="%{idp.service.logging.status:Status}"
- p:policyName="%{idp.status.accessPolicy:AccessByIPAddress}" />
-
- <!-- Service Reload -->
- <bean parent="shibboleth.AdminFlow"
- c:id="http://shibboleth.net/ns/profiles/reload-service-configuration"
- p:loggingId="%{idp.service.logging.serviceReload:Reload}"
- p:policyName="%{idp.reload.accessPolicy:AccessByIPAddress}" />
-
- <!-- MetadataResolver Reload -->
- <bean parent="shibboleth.AdminFlow"
- c:id="http://shibboleth.net/ns/profiles/reload-metadata"
- p:loggingId="%{idp.service.logging.serviceReload:Reload}"
- p:policyName="%{idp.reload.accessPolicy:AccessByIPAddress}" />
-
- <!-- AttributeResolver Debugging -->
- <bean parent="shibboleth.AdminFlow"
- c:id="http://shibboleth.net/ns/profiles/resolvertest"
- p:loggingId="%{idp.service.logging.resolvertest:ResolverTest}"
- p:policyName="%{idp.resolvertest.accessPolicy:AccessByIPAddress}" />
-
- <!-- REST StorageService Access -->
- <bean parent="shibboleth.AdminFlow"
- c:id="http://shibboleth.net/ns/profiles/storage"
- p:loggingId="Storage"
- p:policyName="AccessByIPAddress" />
-
- <!-- REST Interface to Metrics -->
- <bean parent="shibboleth.AdminFlow"
- c:id="http://shibboleth.net/ns/profiles/metrics"
- p:loggingId="Metrics"
- p:policyNameLookupStrategy-ref="shibboleth.metrics.AccessPolicyStrategy" />
-
- </util:list>
-
-</beans>
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p"
+ xmlns:c="http://www.springframework.org/schema/c" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
+ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
+
+ default-init-method="initialize"
+ default-destroy-method="destroy">
+
+ <util:list id="shibboleth.AvailableAdminFlows">
+
+ <!-- Status Page -->
+ <bean parent="shibboleth.AdminFlow"
+ c:id="http://shibboleth.net/ns/profiles/status"
+ p:loggingId="%{idp.service.logging.status:Status}"
+ p:policyName="%{idp.status.accessPolicy:AccessByIPAddress}" />
+
+ <!-- Service Reload -->
+ <bean parent="shibboleth.AdminFlow"
+ c:id="http://shibboleth.net/ns/profiles/reload-service-configuration"
+ p:loggingId="%{idp.service.logging.serviceReload:Reload}"
+ p:policyName="%{idp.reload.accessPolicy:AccessByIPAddress}" />
+
+ <!-- MetadataResolver Reload -->
+ <bean parent="shibboleth.AdminFlow"
+ c:id="http://shibboleth.net/ns/profiles/reload-metadata"
+ p:loggingId="%{idp.service.logging.serviceReload:Reload}"
+ p:policyName="%{idp.reload.accessPolicy:AccessByIPAddress}" />
+
+ <!-- AttributeResolver Debugging -->
+ <bean parent="shibboleth.AdminFlow"
+ c:id="http://shibboleth.net/ns/profiles/resolvertest"
+ p:loggingId="%{idp.service.logging.resolvertest:ResolverTest}"
+ p:policyName="%{idp.resolvertest.accessPolicy:AccessByIPAddress}" />
+
+ <!-- REST StorageService Access -->
+ <bean parent="shibboleth.AdminFlow"
+ c:id="http://shibboleth.net/ns/profiles/storage"
+ p:loggingId="Storage"
+ p:policyName="AccessByIPAddress" />
+
+ <!-- REST Interface to Metrics -->
+ <bean parent="shibboleth.AdminFlow"
+ c:id="http://shibboleth.net/ns/profiles/metrics"
+ p:loggingId="Metrics"
+ p:policyNameLookupStrategy-ref="shibboleth.metrics.AccessPolicyStrategy" />
+
+ </util:list>
+
+</beans>
diff --git a/idp-conf/src/main/resources/conf/authn/mfa-authn-config.xml b/idp-conf/src/main/resources/conf/authn/mfa-authn-config.xml
index 6c6a306..88b59b1 100644
--- a/idp-conf/src/main/resources/conf/authn/mfa-authn-config.xml
+++ b/idp-conf/src/main/resources/conf/authn/mfa-authn-config.xml
@@ -1,99 +1,99 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:util="http://www.springframework.org/schema/util"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:c="http://www.springframework.org/schema/c"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-
- default-init-method="initialize"
- default-destroy-method="destroy">
-
- <!--
- This is a map of transition rules that guide the behavior of the MFA flow
- and controls how factors are sequenced, skipped, etc. The key of each entry
- is the name of the step/flow out of which control is passing. The starting
- rule has an empty key.
-
- Each entry is a bean inherited from "shibboleth.authn.MFA.Transition". Per
- the Javadoc for net.shibboleth.idp.authn.MultiFactorAuthenticationTransition:
-
- p:nextFlow (String)
- - A flow to run if the previous step signaled a "proceed" event, for simple
- transitions.
-
- p:nextFlowStrategy (Function<ProfileRequestContext,String>)
- - A function to run if the previous step signaled a "proceed" event, for dynamic
- transitions. Returning null ends the MFA process.
-
- p:nextFlowStrategyMap (Map<String,Object> where Object is String or Function<ProfileRequestContext,String>)
- - Fully dynamic way of expressing control paths. Map is keyed by a previously
- signaled event and the value is a flow to run or a function to
- return the flow to run. Returning null ends the MFA process.
-
- When no rule is provided, there's an implicit "null" that ends the MFA flow
- with whatever event was last signaled. If the "proceed" event from a step is
- the final event, then the MFA process attempts to complete itself successfully.
- -->
- <util:map id="shibboleth.authn.MFA.TransitionMap">
- <!-- First rule runs the IPAddress login flow. -->
- <entry key="">
- <bean parent="shibboleth.authn.MFA.Transition" p:nextFlow="authn/IPAddress" />
- </entry>
-
- <!--
- Second rule runs a function if IPAddress succeeds, to determine whether an additional
- factor is required.
- -->
- <entry key="authn/IPAddress">
- <bean parent="shibboleth.authn.MFA.Transition" p:nextFlowStrategy-ref="checkSecondFactor" />
- </entry>
-
- <!-- An implicit final rule will return whatever the final flow returns. -->
- </util:map>
-
- <!-- Example script to see if second factor is required. -->
- <bean id="checkSecondFactor" parent="shibboleth.ContextFunctions.Scripted" factory-method="inlineScript"
- p:customObject-ref="shibboleth.AttributeResolverService">
- <constructor-arg>
- <value>
- <![CDATA[
- nextFlow = "authn/Password";
-
- // Go straight to second factor if we have to, or set up for an attribute lookup first.
- authCtx = input.getSubcontext("net.shibboleth.idp.authn.context.AuthenticationContext");
- mfaCtx = authCtx.getSubcontext("net.shibboleth.idp.authn.context.MultiFactorAuthenticationContext");
- if (mfaCtx.isAcceptable()) {
- // Attribute check is required to decide if first factor alone is enough.
- resCtx = input.getSubcontext(
- "net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext", true);
-
- // Look up the username using a standard function.
- usernameLookupStrategyClass
- = Java.type("net.shibboleth.idp.session.context.navigate.CanonicalUsernameLookupStrategy");
- usernameLookupStrategy = new usernameLookupStrategyClass();
- resCtx.setPrincipal(usernameLookupStrategy.apply(input));
-
- resCtx.getRequestedIdPAttributeNames().add("allowedLoginMethods");
- resCtx.resolveAttributes(custom);
-
- // Check for an attribute that authorizes use of first factor.
- attribute = resCtx.getResolvedIdPAttributes().get("allowedLoginMethods");
- valueType = Java.type("net.shibboleth.idp.attribute.StringAttributeValue");
- if (attribute != null && attribute.getValues().contains(new valueType("IPAddress"))) {
- nextFlow = null;
- }
-
- input.removeSubcontext(resCtx); // cleanup
- }
-
- nextFlow; // pass control to second factor or end with the first
- ]]>
- </value>
- </constructor-arg>
- </bean>
-
-</beans>
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:util="http://www.springframework.org/schema/util"
+ xmlns:p="http://www.springframework.org/schema/p"
+ xmlns:c="http://www.springframework.org/schema/c"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
+ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
+
+ default-init-method="initialize"
+ default-destroy-method="destroy">
+
+ <!--
+ This is a map of transition rules that guide the behavior of the MFA flow
+ and controls how factors are sequenced, skipped, etc. The key of each entry
+ is the name of the step/flow out of which control is passing. The starting
+ rule has an empty key.
+
+ Each entry is a bean inherited from "shibboleth.authn.MFA.Transition". Per
+ the Javadoc for net.shibboleth.idp.authn.MultiFactorAuthenticationTransition:
+
+ p:nextFlow (String)
+ - A flow to run if the previous step signaled a "proceed" event, for simple
+ transitions.
+
+ p:nextFlowStrategy (Function<ProfileRequestContext,String>)
+ - A function to run if the previous step signaled a "proceed" event, for dynamic
+ transitions. Returning null ends the MFA process.
+
+ p:nextFlowStrategyMap (Map<String,Object> where Object is String or Function<ProfileRequestContext,String>)
+ - Fully dynamic way of expressing control paths. Map is keyed by a previously
+ signaled event and the value is a flow to run or a function to
+ return the flow to run. Returning null ends the MFA process.
+
+ When no rule is provided, there's an implicit "null" that ends the MFA flow
+ with whatever event was last signaled. If the "proceed" event from a step is
+ the final event, then the MFA process attempts to complete itself successfully.
+ -->
+ <util:map id="shibboleth.authn.MFA.TransitionMap">
+ <!-- First rule runs the IPAddress login flow. -->
+ <entry key="">
+ <bean parent="shibboleth.authn.MFA.Transition" p:nextFlow="authn/IPAddress" />
+ </entry>
+
+ <!--
+ Second rule runs a function if IPAddress succeeds, to determine whether an additional
+ factor is required.
+ -->
+ <entry key="authn/IPAddress">
+ <bean parent="shibboleth.authn.MFA.Transition" p:nextFlowStrategy-ref="checkSecondFactor" />
+ </entry>
+
+ <!-- An implicit final rule will return whatever the final flow returns. -->
+ </util:map>
+
+ <!-- Example script to see if second factor is required. -->
+ <bean id="checkSecondFactor" parent="shibboleth.ContextFunctions.Scripted" factory-method="inlineScript"
+ p:customObject-ref="shibboleth.AttributeResolverService">
+ <constructor-arg>
+ <value>
+ <![CDATA[
+ nextFlow = "authn/Password";
+
+ // Go straight to second factor if we have to, or set up for an attribute lookup first.
+ authCtx = input.getSubcontext("net.shibboleth.idp.authn.context.AuthenticationContext");
+ mfaCtx = authCtx.getSubcontext("net.shibboleth.idp.authn.context.MultiFactorAuthenticationContext");
+ if (mfaCtx.isAcceptable()) {
+ // Attribute check is required to decide if first factor alone is enough.
+ resCtx = input.getSubcontext(
+ "net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext", true);
+
+ // Look up the username using a standard function.
+ usernameLookupStrategyClass
+ = Java.type("net.shibboleth.idp.session.context.navigate.CanonicalUsernameLookupStrategy");
+ usernameLookupStrategy = new usernameLookupStrategyClass();
+ resCtx.setPrincipal(usernameLookupStrategy.apply(input));
+
+ resCtx.getRequestedIdPAttributeNames().add("allowedLoginMethods");
+ resCtx.resolveAttributes(custom);
+
+ // Check for an attribute that authorizes use of first factor.
+ attribute = resCtx.getResolvedIdPAttributes().get("allowedLoginMethods");
+ valueType = Java.type("net.shibboleth.idp.attribute.StringAttributeValue");
+ if (attribute != null && attribute.getValues().contains(new valueType("IPAddress"))) {
+ nextFlow = null;
+ }
+
+ input.removeSubcontext(resCtx); // cleanup
+ }
+
+ nextFlow; // pass control to second factor or end with the first
+ ]]>
+ </value>
+ </constructor-arg>
+ </bean>
+
+</beans>
diff --git a/idp-conf/src/main/resources/system/conf/general-admin-system.xml b/idp-conf/src/main/resources/system/conf/general-admin-system.xml
index 628ca49..32d1066 100644
--- a/idp-conf/src/main/resources/system/conf/general-admin-system.xml
+++ b/idp-conf/src/main/resources/system/conf/general-admin-system.xml
@@ -1,107 +1,107 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:util="http://www.springframework.org/schema/util"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:c="http://www.springframework.org/schema/c"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
-
- default-init-method="initialize"
- default-destroy-method="destroy">
-
- <import resource="../../conf/admin/general-admin.xml" />
- <import resource="../../conf/admin/metrics.xml" />
-
- <!-- A parent bean to default some of the flow boilerplate. -->
-
- <bean id="shibboleth.AdminFlow" abstract="true"
- class="net.shibboleth.idp.admin.BasicAdministrativeFlowDescriptor"
- p:servletRequest-ref="shibboleth.HttpServletRequest"
- p:nonBrowserSupported="false" />
-
- <!-- Function for returning custom access control policies for access to metrics. -->
-
- <bean id="shibboleth.metrics.AccessPolicyStrategy" parent="shibboleth.ContextFunctions.Expression"
- c:expression="#custom.get('policyMap').get(#input.getSubcontext(T(net.shibboleth.idp.profile.context.SpringRequestContext)).getRequestContext().getFlowScope().get('metricId')) ?: #custom.get('defaultPolicy')"
- c:outputType="#{T(java.lang.String)}">
- <property name="customObject">
- <map>
- <entry key="policyMap" value-ref="shibboleth.metrics.AccessPolicyMap" />
- <entry key="defaultPolicy" value-ref="shibboleth.metrics.DefaultAccessPolicy" />
- </map>
- </property>
- </bean>
-
- <!-- MetricRegistry we can control with logging categories. -->
- <bean id="shibboleth.metrics.MetricRegistry"
- class="org.opensaml.core.metrics.FilteredMetricRegistry"
- p:metricFilter-ref="shibboleth.metrics.LoggerDrivenMetricFilter" />
-
- <bean id="shibboleth.metrics.LoggerDrivenMetricFilter"
- class="org.opensaml.core.metrics.LoggerDrivenMetricFilter"
- c:_0="metrics."
- c:_1="#{getObject('shibboleth.metrics.MetricLevelMap')}" />
-
- <!-- Parent beans for registering MetricSets and Metrics. -->
-
- <bean id="shibboleth.metrics.RegisterMetricSets" abstract="true"
- class="org.springframework.beans.factory.config.MethodInvokingBean"
- p:targetObject-ref="shibboleth.metrics.MetricRegistry"
- p:targetMethod="registerMultiple" />
-
- <bean id="shibboleth.metrics.RegisterMetric" abstract="true"
- class="org.springframework.beans.factory.config.MethodInvokingBean"
- p:targetObject-ref="shibboleth.metrics.MetricRegistry"
- p:targetMethod="register" />
-
- <bean id="shibboleth.metrics.HTTPReporter" abstract="true" destroy-method="stop"
- class="net.shibboleth.idp.metrics.impl.HTTPReporter"
- c:registry-ref="shibboleth.metrics.MetricRegistry"
- c:filter="#{null}"
- p:httpClient-ref="shibboleth.NonCachingHttpClient" />
-
- <!-- Some predefined metric sets, only created if installed by user. -->
-
- <bean id="shibboleth.metrics.CoreGaugeSet" class="net.shibboleth.idp.metrics.impl.CoreGaugeSet" lazy-init="true" />
-
- <bean id="shibboleth.metrics.IdPGaugeSet" class="net.shibboleth.idp.metrics.impl.IdPGaugeSet" lazy-init="true" />
-
- <bean id="shibboleth.metrics.LoggingGaugeSet"
- class="net.shibboleth.idp.metrics.ReloadableServiceGaugeSet" lazy-init="true"
- c:metricName="logging"
- p:service-ref="shibboleth.LoggingService" />
-
- <bean id="shibboleth.metrics.AccessControlGaugeSet"
- class="net.shibboleth.idp.metrics.ReloadableServiceGaugeSet" lazy-init="true"
- c:metricName="accesscontrol"
- p:service-ref="shibboleth.ReloadableAccessControlService" />
-
- <bean id="shibboleth.metrics.MetadataGaugeSet"
- class="net.shibboleth.idp.saml.metadata.impl.MetadataResolverServiceGaugeSet" lazy-init="true"
- c:metricName="metadata"
- p:service-ref="shibboleth.MetadataResolverService" />
-
- <bean id="shibboleth.metrics.RelyingPartyGaugeSet"
- class="net.shibboleth.idp.metrics.ReloadableServiceGaugeSet" lazy-init="true"
- c:metricName="relyingparty"
- p:service-ref="shibboleth.RelyingPartyResolverService" />
-
- <bean id="shibboleth.metrics.NameIdentifierGaugeSet"
- class="net.shibboleth.idp.metrics.ReloadableServiceGaugeSet" lazy-init="true"
- c:metricName="nameid"
- p:service-ref="shibboleth.NameIdentifierGenerationService" />
-
- <bean id="shibboleth.metrics.AttributeResolverGaugeSet"
- class="net.shibboleth.idp.attribute.resolver.impl.AttributeResolverServiceGaugeSet" lazy-init="true"
- c:metricName="attribute.resolver"
- p:service-ref="shibboleth.AttributeResolverService" />
-
- <bean id="shibboleth.metrics.AttributeFilterGaugeSet"
- class="net.shibboleth.idp.metrics.ReloadableServiceGaugeSet" lazy-init="true"
- c:metricName="attribute.filter"
- p:service-ref="shibboleth.AttributeFilterService" />
-
-</beans>
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:util="http://www.springframework.org/schema/util"
+ xmlns:p="http://www.springframework.org/schema/p"
+ xmlns:c="http://www.springframework.org/schema/c"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
+ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
+
+ default-init-method="initialize"
+ default-destroy-method="destroy">
+
+ <import resource="../../conf/admin/general-admin.xml" />
+ <import resource="../../conf/admin/metrics.xml" />
+
+ <!-- A parent bean to default some of the flow boilerplate. -->
+
+ <bean id="shibboleth.AdminFlow" abstract="true"
+ class="net.shibboleth.idp.admin.BasicAdministrativeFlowDescriptor"
+ p:servletRequest-ref="shibboleth.HttpServletRequest"
+ p:nonBrowserSupported="false" />
+
+ <!-- Function for returning custom access control policies for access to metrics. -->
+
+ <bean id="shibboleth.metrics.AccessPolicyStrategy" parent="shibboleth.ContextFunctions.Expression"
+ c:expression="#custom.get('policyMap').get(#input.getSubcontext(T(net.shibboleth.idp.profile.context.SpringRequestContext)).getRequestContext().getFlowScope().get('metricId')) ?: #custom.get('defaultPolicy')"
+ c:outputType="#{T(java.lang.String)}">
+ <property name="customObject">
+ <map>
+ <entry key="policyMap" value-ref="shibboleth.metrics.AccessPolicyMap" />
+ <entry key="defaultPolicy" value-ref="shibboleth.metrics.DefaultAccessPolicy" />
+ </map>
+ </property>
+ </bean>
+
+ <!-- MetricRegistry we can control with logging categories. -->
+ <bean id="shibboleth.metrics.MetricRegistry"
+ class="org.opensaml.core.metrics.FilteredMetricRegistry"
+ p:metricFilter-ref="shibboleth.metrics.LoggerDrivenMetricFilter" />
+
+ <bean id="shibboleth.metrics.LoggerDrivenMetricFilter"
+ class="org.opensaml.core.metrics.LoggerDrivenMetricFilter"
+ c:_0="metrics."
+ c:_1="#{getObject('shibboleth.metrics.MetricLevelMap')}" />
+
+ <!-- Parent beans for registering MetricSets and Metrics. -->
+
+ <bean id="shibboleth.metrics.RegisterMetricSets" abstract="true"
+ class="org.springframework.beans.factory.config.MethodInvokingBean"
+ p:targetObject-ref="shibboleth.metrics.MetricRegistry"
+ p:targetMethod="registerMultiple" />
+
+ <bean id="shibboleth.metrics.RegisterMetric" abstract="true"
+ class="org.springframework.beans.factory.config.MethodInvokingBean"
+ p:targetObject-ref="shibboleth.metrics.MetricRegistry"
+ p:targetMethod="register" />
+
+ <bean id="shibboleth.metrics.HTTPReporter" abstract="true" destroy-method="stop"
+ class="net.shibboleth.idp.metrics.impl.HTTPReporter"
+ c:registry-ref="shibboleth.metrics.MetricRegistry"
+ c:filter="#{null}"
+ p:httpClient-ref="shibboleth.NonCachingHttpClient" />
+
+ <!-- Some predefined metric sets, only created if installed by user. -->
+
+ <bean id="shibboleth.metrics.CoreGaugeSet" class="net.shibboleth.idp.metrics.impl.CoreGaugeSet" lazy-init="true" />
+
+ <bean id="shibboleth.metrics.IdPGaugeSet" class="net.shibboleth.idp.metrics.impl.IdPGaugeSet" lazy-init="true" />
+
+ <bean id="shibboleth.metrics.LoggingGaugeSet"
+ class="net.shibboleth.idp.metrics.ReloadableServiceGaugeSet" lazy-init="true"
+ c:metricName="logging"
+ p:service-ref="shibboleth.LoggingService" />
+
+ <bean id="shibboleth.metrics.AccessControlGaugeSet"
+ class="net.shibboleth.idp.metrics.ReloadableServiceGaugeSet" lazy-init="true"
+ c:metricName="accesscontrol"
+ p:service-ref="shibboleth.ReloadableAccessControlService" />
+
+ <bean id="shibboleth.metrics.MetadataGaugeSet"
+ class="net.shibboleth.idp.saml.metadata.impl.MetadataResolverServiceGaugeSet" lazy-init="true"
+ c:metricName="metadata"
+ p:service-ref="shibboleth.MetadataResolverService" />
+
+ <bean id="shibboleth.metrics.RelyingPartyGaugeSet"
+ class="net.shibboleth.idp.metrics.ReloadableServiceGaugeSet" lazy-init="true"
+ c:metricName="relyingparty"
+ p:service-ref="shibboleth.RelyingPartyResolverService" />
+
+ <bean id="shibboleth.metrics.NameIdentifierGaugeSet"
+ class="net.shibboleth.idp.metrics.ReloadableServiceGaugeSet" lazy-init="true"
+ c:metricName="nameid"
+ p:service-ref="shibboleth.NameIdentifierGenerationService" />
+
+ <bean id="shibboleth.metrics.AttributeResolverGaugeSet"
+ class="net.shibboleth.idp.attribute.resolver.impl.AttributeResolverServiceGaugeSet" lazy-init="true"
+ c:metricName="attribute.resolver"
+ p:service-ref="shibboleth.AttributeResolverService" />
+
+ <bean id="shibboleth.metrics.AttributeFilterGaugeSet"
+ class="net.shibboleth.idp.metrics.ReloadableServiceGaugeSet" lazy-init="true"
+ c:metricName="attribute.filter"
+ p:service-ref="shibboleth.AttributeFilterService" />
+
+</beans>
diff --git a/idp-conf/src/main/resources/system/flows/admin/storage-beans.xml b/idp-conf/src/main/resources/system/flows/admin/storage-beans.xml
index e01f090..a3415fa 100644
--- a/idp-conf/src/main/resources/system/flows/admin/storage-beans.xml
+++ b/idp-conf/src/main/resources/system/flows/admin/storage-beans.xml
@@ -1,42 +1,42 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans
- xmlns="http://www.springframework.org/schema/beans"
- xmlns:c="http://www.springframework.org/schema/c"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:util="http://www.springframework.org/schema/util"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
- default-init-method="initialize"
- default-destroy-method="destroy">
-
- <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"
- p:placeholderPrefix="%{" p:placeholderSuffix="}" />
-
- <!-- Profile ID for flow. -->
- <bean id="shibboleth.AdminProfileId" class="java.lang.String" c:_0="http://shibboleth.net/ns/profiles/storage" />
-
- <!-- Default operation/resource suppliers for access checks. -->
-
- <bean id="shibboleth.AdminOperationLookupStrategy" parent="shibboleth.ContextFunctions.Expression"
- c:outputType="#{T(java.lang.String)}"
- c:expression="#custom.getMethod()"
- p:customObject-ref="shibboleth.HttpServletRequest" />
-
- <bean id="shibboleth.AdminResourceLookupStrategy" parent="shibboleth.ContextFunctions.Expression"
- c:outputType="#{T(java.lang.String)}"
- c:expression="#input.getSubcontext(T(net.shibboleth.idp.profile.context.SpringRequestContext)).getRequestContext().getFlowScope().get('context')" />
-
- <!-- Work beans. -->
-
- <bean id="DoStorageOperation" class="net.shibboleth.idp.admin.impl.DoStorageOperation" scope="prototype"
- p:httpServletRequest-ref="shibboleth.HttpServletRequest"
- p:httpServletResponse-ref="shibboleth.HttpServletResponse"
- p:objectMapper-ref="shibboleth.JSONObjectMapper" />
-
- <bean id="RecordResponseComplete" class="net.shibboleth.idp.profile.impl.RecordResponseComplete" scope="prototype" />
-
-
-</beans>
+<?xml version="1.0" encoding="UTF-8"?>
+<beans
+ xmlns="http://www.springframework.org/schema/beans"
+ xmlns:c="http://www.springframework.org/schema/c"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:p="http://www.springframework.org/schema/p"
+ xmlns:util="http://www.springframework.org/schema/util"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
+ http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
+ default-init-method="initialize"
+ default-destroy-method="destroy">
+
+ <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"
+ p:placeholderPrefix="%{" p:placeholderSuffix="}" />
+
+ <!-- Profile ID for flow. -->
+ <bean id="shibboleth.AdminProfileId" class="java.lang.String" c:_0="http://shibboleth.net/ns/profiles/storage" />
+
+ <!-- Default operation/resource suppliers for access checks. -->
+
+ <bean id="shibboleth.AdminOperationLookupStrategy" parent="shibboleth.ContextFunctions.Expression"
+ c:outputType="#{T(java.lang.String)}"
+ c:expression="#custom.getMethod()"
+ p:customObject-ref="shibboleth.HttpServletRequest" />
+
+ <bean id="shibboleth.AdminResourceLookupStrategy" parent="shibboleth.ContextFunctions.Expression"
+ c:outputType="#{T(java.lang.String)}"
+ c:expression="#input.getSubcontext(T(net.shibboleth.idp.profile.context.SpringRequestContext)).getRequestContext().getFlowScope().get('context')" />
+
+ <!-- Work beans. -->
+
+ <bean id="DoStorageOperation" class="net.shibboleth.idp.admin.impl.DoStorageOperation" scope="prototype"
+ p:httpServletRequest-ref="shibboleth.HttpServletRequest"
+ p:httpServletResponse-ref="shibboleth.HttpServletResponse"
+ p:objectMapper-ref="shibboleth.JSONObjectMapper" />
+
+ <bean id="RecordResponseComplete" class="net.shibboleth.idp.profile.impl.RecordResponseComplete" scope="prototype" />
+
+
+</beans>
diff --git a/idp-conf/src/main/resources/system/flows/admin/storage-flow.xml b/idp-conf/src/main/resources/system/flows/admin/storage-flow.xml
index c5451f8..9a179aa 100644
--- a/idp-conf/src/main/resources/system/flows/admin/storage-flow.xml
+++ b/idp-conf/src/main/resources/system/flows/admin/storage-flow.xml
@@ -1,44 +1,44 @@
-<flow xmlns="http://www.springframework.org/schema/webflow"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/webflow http://www.springframework.org/schema/webflow/spring-webflow.xsd"
- parent="admin.abstract">
-
- <on-start>
- <!-- Extract PATH_INFO containing account key and operation. -->
- <evaluate expression="flowRequestContext.getActiveFlow().getId()" result="flowScope.flowId" />
- <evaluate expression="externalContext.getNativeRequest().getPathInfo().length() gt flowId.length() + 2 ? externalContext.getNativeRequest().getPathInfo().substring(flowId.length() + 2) : 'all'" result="flowScope.pathInfo" />
- <evaluate expression="pathInfo.split('/')" result="flowScope.pathInfoArray" />
- <evaluate expression="pathInfoArray.length gt 0 ? T(net.shibboleth.utilities.java.support.net.URISupport).doURLDecode(pathInfoArray[0]) : null" result="flowScope.storageServiceId" />
- <evaluate expression="pathInfoArray.length gt 1 ? T(net.shibboleth.utilities.java.support.net.URISupport).doURLDecode(pathInfoArray[1]) : null" result="flowScope.context" />
- <evaluate expression="pathInfoArray.length gt 2 ? T(net.shibboleth.utilities.java.support.net.URISupport).doURLDecode(pathInfoArray[2]) : null" result="flowScope.key" />
- </on-start>
-
- <!-- Start action. -->
-
- <action-state id="InitializeProfileRequestContext">
- <evaluate expression="InitializeProfileRequestContext" />
- <evaluate expression="'proceed'" />
-
- <!-- Branch to determine if authentication is required. -->
- <transition on="proceed" to="DoAdminPreamble" />
- </action-state>
-
- <!-- Resume actual flow processing. -->
-
- <action-state id="DoProfileWork">
- <evaluate expression="CheckAccess" />
- <evaluate expression="WriteAuditLog" />
- <evaluate expression="DoStorageOperation" />
- <evaluate expression="RecordResponseComplete" />
- <evaluate expression="'proceed'" />
-
- <transition on="proceed" to="end" />
- </action-state>
-
- <!-- Terminus -->
-
- <end-state id="end" />
-
- <bean-import resource="storage-beans.xml" />
-
-</flow>
+<flow xmlns="http://www.springframework.org/schema/webflow"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/webflow http://www.springframework.org/schema/webflow/spring-webflow.xsd"
+ parent="admin.abstract">
+
+ <on-start>
+ <!-- Extract PATH_INFO containing account key and operation. -->
+ <evaluate expression="flowRequestContext.getActiveFlow().getId()" result="flowScope.flowId" />
+ <evaluate expression="externalContext.getNativeRequest().getPathInfo().length() gt flowId.length() + 2 ? externalContext.getNativeRequest().getPathInfo().substring(flowId.length() + 2) : 'all'" result="flowScope.pathInfo" />
+ <evaluate expression="pathInfo.split('/')" result="flowScope.pathInfoArray" />
+ <evaluate expression="pathInfoArray.length gt 0 ? T(net.shibboleth.utilities.java.support.net.URISupport).doURLDecode(pathInfoArray[0]) : null" result="flowScope.storageServiceId" />
+ <evaluate expression="pathInfoArray.length gt 1 ? T(net.shibboleth.utilities.java.support.net.URISupport).doURLDecode(pathInfoArray[1]) : null" result="flowScope.context" />
+ <evaluate expression="pathInfoArray.length gt 2 ? T(net.shibboleth.utilities.java.support.net.URISupport).doURLDecode(pathInfoArray[2]) : null" result="flowScope.key" />
+ </on-start>
+
+ <!-- Start action. -->
+
+ <action-state id="InitializeProfileRequestContext">
+ <evaluate expression="InitializeProfileRequestContext" />
+ <evaluate expression="'proceed'" />
+
+ <!-- Branch to determine if authentication is required. -->
+ <transition on="proceed" to="DoAdminPreamble" />
+ </action-state>
+
+ <!-- Resume actual flow processing. -->
+
+ <action-state id="DoProfileWork">
+ <evaluate expression="CheckAccess" />
+ <evaluate expression="WriteAuditLog" />
+ <evaluate expression="DoStorageOperation" />
+ <evaluate expression="RecordResponseComplete" />
+ <evaluate expression="'proceed'" />
+
+ <transition on="proceed" to="end" />
+ </action-state>
+
+ <!-- Terminus -->
+
+ <end-state id="end" />
+
+ <bean-import resource="storage-beans.xml" />
+
+</flow>
diff --git a/idp-conf/src/test/resources/conf/relying-party-legacy.xml b/idp-conf/src/test/resources/conf/relying-party-legacy.xml
index f497042..9cd5f01 100644
--- a/idp-conf/src/test/resources/conf/relying-party-legacy.xml
+++ b/idp-conf/src/test/resources/conf/relying-party-legacy.xml
@@ -1,81 +1,81 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- This file is an EXAMPLE configuration file.
-
- This file specifies relying party dependent configurations for the IdP, for example, whether SAML assertions to a
- particular relying party should be signed. It also includes metadata provider and credential definitions used
- when answering requests to a relying party.
--->
-<rp:RelyingPartyGroup xmlns:rp="urn:mace:shibboleth:2.0:relying-party" xmlns:saml="urn:mace:shibboleth:2.0:relying-party:saml"
- xmlns:metadata="urn:mace:shibboleth:2.0:metadata" xmlns:resource="urn:mace:shibboleth:2.0:resource"
- xmlns:security="urn:mace:shibboleth:2.0:security" xmlns:samlsec="urn:mace:shibboleth:2.0:security:saml"
- xmlns:samlmd="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="urn:mace:shibboleth:2.0:relying-party http://shibboleth.net/schema/idp/shibboleth-relying-party.xsd
- urn:mace:shibboleth:2.0:relying-party:saml http://shibboleth.net/schema/idp/shibboleth-relying-party-saml.xsd
- urn:mace:shibboleth:2.0:metadata http://shibboleth.net/schema/idp/shibboleth-metadata.xsd
- urn:mace:shibboleth:2.0:resource http://shibboleth.net/schema/idp/shibboleth-resource.xsd
- urn:mace:shibboleth:2.0:security http://shibboleth.net/schema/idp/shibboleth-security.xsd
- urn:oasis:names:tc:SAML:2.0:metadata http://docs.oasis-open.org/security/saml/v2.0/saml-schema-metadata-2.0.xsd">
-
- <!-- ========================================== -->
- <!-- Relying Party Configurations -->
- <!-- ========================================== -->
- <rp:AnonymousRelyingParty provider="%{idp.entityID}" defaultSigningCredentialRef="IdPCredential"/>
-
- <rp:DefaultRelyingParty provider="%{idp.entityID}" defaultSigningCredentialRef="IdPCredential">
- <!--
- Each attribute in these profiles configuration is set to its default value,
- that is, the values that would be in effect if those attributes were not present.
- We list them here so that people are aware of them (since they seem reluctant to
- read the documentation).
- -->
- <rp:ProfileConfiguration xsi:type="saml:ShibbolethSSOProfile" includeAttributeStatement="false"
- assertionLifetime="PT5M" signResponses="always" signAssertions="never"
- includeConditionsNotBefore="true"/>
-
- <rp:ProfileConfiguration xsi:type="saml:SAML1AttributeQueryProfile" assertionLifetime="PT5M"
- signResponses="conditional" signAssertions="never"
- includeConditionsNotBefore="true"/>
-
- <rp:ProfileConfiguration xsi:type="saml:SAML1ArtifactResolutionProfile" signResponses="conditional"
- signAssertions="never"/>
-
- <rp:ProfileConfiguration xsi:type="saml:SAML2SSOProfile" includeAttributeStatement="true"
- assertionLifetime="PT5M" assertionProxyCount="0"
- signResponses="always" signAssertions="never"
- encryptAssertions="conditional" encryptNameIds="never"
- includeConditionsNotBefore="true"/>
-
- <rp:ProfileConfiguration xsi:type="saml:SAML2ECPProfile" includeAttributeStatement="true"
- assertionLifetime="PT5M" assertionProxyCount="0"
- signResponses="always" signAssertions="never"
- encryptAssertions="conditional" encryptNameIds="never"
- includeConditionsNotBefore="true"/>
-
- <rp:ProfileConfiguration xsi:type="saml:SAML2AttributeQueryProfile"
- assertionLifetime="PT5M" assertionProxyCount="0"
- signResponses="conditional" signAssertions="never"
- encryptAssertions="conditional" encryptNameIds="never"
- includeConditionsNotBefore="true"/>
-
- <rp:ProfileConfiguration xsi:type="saml:SAML2ArtifactResolutionProfile"
- signResponses="conditional" signAssertions="never"
- encryptAssertions="conditional" encryptNameIds="never"/>
-
- <rp:ProfileConfiguration xsi:type="saml:SAML2LogoutRequestProfile"
- signResponses="conditional"/>
-
- </rp:DefaultRelyingParty>
-
- <!-- ========================================== -->
- <!-- Security Configurations -->
- <!-- ========================================== -->
-
- <!-- TODO -->
-
- <security:Credential id="IdPCredential" xsi:type="security:X509Filesystem">
- <security:PrivateKey>%{idp.signing.key}</security:PrivateKey>
- <security:Certificate>%{idp.signing.cert}</security:Certificate>
- </security:Credential>
-
-</rp:RelyingPartyGroup>
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ This file is an EXAMPLE configuration file.
+
+ This file specifies relying party dependent configurations for the IdP, for example, whether SAML assertions to a
+ particular relying party should be signed. It also includes metadata provider and credential definitions used
+ when answering requests to a relying party.
+-->
+<rp:RelyingPartyGroup xmlns:rp="urn:mace:shibboleth:2.0:relying-party" xmlns:saml="urn:mace:shibboleth:2.0:relying-party:saml"
+ xmlns:metadata="urn:mace:shibboleth:2.0:metadata" xmlns:resource="urn:mace:shibboleth:2.0:resource"
+ xmlns:security="urn:mace:shibboleth:2.0:security" xmlns:samlsec="urn:mace:shibboleth:2.0:security:saml"
+ xmlns:samlmd="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="urn:mace:shibboleth:2.0:relying-party http://shibboleth.net/schema/idp/shibboleth-relying-party.xsd
+ urn:mace:shibboleth:2.0:relying-party:saml http://shibboleth.net/schema/idp/shibboleth-relying-party-saml.xsd
+ urn:mace:shibboleth:2.0:metadata http://shibboleth.net/schema/idp/shibboleth-metadata.xsd
+ urn:mace:shibboleth:2.0:resource http://shibboleth.net/schema/idp/shibboleth-resource.xsd
+ urn:mace:shibboleth:2.0:security http://shibboleth.net/schema/idp/shibboleth-security.xsd
+ urn:oasis:names:tc:SAML:2.0:metadata http://docs.oasis-open.org/security/saml/v2.0/saml-schema-metadata-2.0.xsd">
+
+ <!-- ========================================== -->
+ <!-- Relying Party Configurations -->
+ <!-- ========================================== -->
+ <rp:AnonymousRelyingParty provider="%{idp.entityID}" defaultSigningCredentialRef="IdPCredential"/>
+
+ <rp:DefaultRelyingParty provider="%{idp.entityID}" defaultSigningCredentialRef="IdPCredential">
+ <!--
+ Each attribute in these profiles configuration is set to its default value,
+ that is, the values that would be in effect if those attributes were not present.
+ We list them here so that people are aware of them (since they seem reluctant to
+ read the documentation).
+ -->
+ <rp:ProfileConfiguration xsi:type="saml:ShibbolethSSOProfile" includeAttributeStatement="false"
+ assertionLifetime="PT5M" signResponses="always" signAssertions="never"
+ includeConditionsNotBefore="true"/>
+
+ <rp:ProfileConfiguration xsi:type="saml:SAML1AttributeQueryProfile" assertionLifetime="PT5M"
+ signResponses="conditional" signAssertions="never"
+ includeConditionsNotBefore="true"/>
+
+ <rp:ProfileConfiguration xsi:type="saml:SAML1ArtifactResolutionProfile" signResponses="conditional"
+ signAssertions="never"/>
+
+ <rp:ProfileConfiguration xsi:type="saml:SAML2SSOProfile" includeAttributeStatement="true"
+ assertionLifetime="PT5M" assertionProxyCount="0"
+ signResponses="always" signAssertions="never"
+ encryptAssertions="conditional" encryptNameIds="never"
+ includeConditionsNotBefore="true"/>
+
+ <rp:ProfileConfiguration xsi:type="saml:SAML2ECPProfile" includeAttributeStatement="true"
+ assertionLifetime="PT5M" assertionProxyCount="0"
+ signResponses="always" signAssertions="never"
+ encryptAssertions="conditional" encryptNameIds="never"
+ includeConditionsNotBefore="true"/>
+
+ <rp:ProfileConfiguration xsi:type="saml:SAML2AttributeQueryProfile"
+ assertionLifetime="PT5M" assertionProxyCount="0"
+ signResponses="conditional" signAssertions="never"
+ encryptAssertions="conditional" encryptNameIds="never"
+ includeConditionsNotBefore="true"/>
+
+ <rp:ProfileConfiguration xsi:type="saml:SAML2ArtifactResolutionProfile"
+ signResponses="conditional" signAssertions="never"
+ encryptAssertions="conditional" encryptNameIds="never"/>
+
+ <rp:ProfileConfiguration xsi:type="saml:SAML2LogoutRequestProfile"
+ signResponses="conditional"/>
+
+ </rp:DefaultRelyingParty>
+
+ <!-- ========================================== -->
+ <!-- Security Configurations -->
+ <!-- ========================================== -->
+
+ <!-- TODO -->
+
+ <security:Credential id="IdPCredential" xsi:type="security:X509Filesystem">
+ <security:PrivateKey>%{idp.signing.key}</security:PrivateKey>
+ <security:Certificate>%{idp.signing.cert}</security:Certificate>
+ </security:Credential>
+
+</rp:RelyingPartyGroup>
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list