diff options
author | Johan Lundberg <lundberg@nordu.net> | 2015-04-28 17:09:01 +0200 |
---|---|---|
committer | Johan Lundberg <lundberg@nordu.net> | 2015-04-28 17:09:01 +0200 |
commit | 51a20d87200cd219409fce5b30d32cf38f616e73 (patch) | |
tree | a52fc13afd2d7db8e190b903d99871060b3949f8 | |
parent | b1d04634a031913e9e18cfe794143a7f3974ff19 (diff) |
Added default webapp files for customization.
-rw-r--r-- | edit-webapp/WEB-INF/idpui.tld | 257 | ||||
-rw-r--r-- | edit-webapp/WEB-INF/jsp/metadata.jsp | 23 | ||||
-rw-r--r-- | edit-webapp/WEB-INF/jsp/status.jsp | 99 | ||||
-rw-r--r-- | edit-webapp/WEB-INF/lib/README | 102 | ||||
-rw-r--r-- | edit-webapp/WEB-INF/spring.tld | 482 | ||||
-rw-r--r-- | edit-webapp/WEB-INF/web.xml | 230 |
6 files changed, 1193 insertions, 0 deletions
diff --git a/edit-webapp/WEB-INF/idpui.tld b/edit-webapp/WEB-INF/idpui.tld new file mode 100644 index 0000000..2c8abe6 --- /dev/null +++ b/edit-webapp/WEB-INF/idpui.tld @@ -0,0 +1,257 @@ +<?xml version="1.0" encoding="UTF-8" ?>
+<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
+ version="2.0">
+
+ <tlib-version>1.0</tlib-version>
+ <short-name>idpui</short-name>
+ <uri>urn:mace:shibboleth:2.0:idp:ui</uri>
+
+ <tag>
+ <description>Service Name - some user friendly description about the relying party</description>
+ <name>serviceName</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.ServiceNameTag</tag-class>
+ <body-content>empty</body-content>
+ <attribute>
+ <name>defaultValue</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Service Description - taken from the mdui statement</description>
+ <name>serviceDescription</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.ServiceDescriptionTag</tag-class>
+ <body-content>scriptless</body-content>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Service Contact - information about the contact at the SP</description>
+ <name>serviceContact</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.ServiceContactTag</tag-class>
+ <body-content>scriptless</body-content>
+ <attribute>
+ <name>contactType</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>name</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssId</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssClass</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Service Privacy URL - directly from the metadata if present</description>
+ <name>servicePrivacyURL</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.ServicePrivacyURLTag</tag-class>
+ <body-content>scriptless</body-content>
+ <attribute>
+ <name>linkText</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssId</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssClass</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Service Information URL - directly from the metadata if present</description>
+ <name>serviceInformationURL</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.ServiceInformationURLTag</tag-class>
+ <body-content>scriptless</body-content>
+ <attribute>
+ <name>linkText</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssId</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssClass</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Logo for the SP</description>
+ <name>serviceLogo</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.ServiceLogoTag</tag-class>
+ <body-content>scriptless</body-content>
+ <attribute>
+ <name>alt</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>minHeight</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>maxHeight</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>minWidth</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>maxWidth</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssId</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssClass</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Service Organization Name - directly from the metadata if present</description>
+ <name>organizationName</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.OrganizationNameTag</tag-class>
+ <body-content>scriptless</body-content>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Service Organization Display Name - directly from the metadata if present</description>
+ <name>organizationDisplayName</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.OrganizationDisplayNameTag</tag-class>
+ <body-content>scriptless</body-content>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Service Organization URL - directly from the metadata if present</description>
+ <name>organizationURL</name>
+ <tag-class>net.shibboleth.idp.ui.taglib.OrganizationURLTag</tag-class>
+ <body-content>scriptless</body-content>
+ <attribute>
+ <name>linkText</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssId</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssClass</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>cssStyle</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>uiContext</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ <type>net.shibboleth.idp.ui.context.RelyingPartyUIContext</type>
+ </attribute>
+ </tag>
+
+</taglib>
\ No newline at end of file diff --git a/edit-webapp/WEB-INF/jsp/metadata.jsp b/edit-webapp/WEB-INF/jsp/metadata.jsp new file mode 100644 index 0000000..09d721b --- /dev/null +++ b/edit-webapp/WEB-INF/jsp/metadata.jsp @@ -0,0 +1,23 @@ +<%@ page import="org.springframework.web.context.WebApplicationContext" %> +<%@ page import="org.springframework.web.context.support.WebApplicationContextUtils" %> +<% +final WebApplicationContext springContext = + WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext()); +final String path = springContext.getEnvironment().getProperty("idp.home") + "/metadata/idp-metadata.xml"; +try (final java.io.FileInputStream in = new java.io.FileInputStream(path)) { + int i; + while ((i = in.read()) != -1) { + out.write(i); + } +} catch (final java.io.IOException e) { + out.println(e.getMessage()); + return; +} + +final String acceptHeader = request.getHeader("Accept"); +if (acceptHeader != null && !acceptHeader.contains("application/samlmetadata+xml")) { + response.setContentType("application/xml"); +} else { + response.setContentType("application/samlmetadata+xml"); +} +%>
\ No newline at end of file diff --git a/edit-webapp/WEB-INF/jsp/status.jsp b/edit-webapp/WEB-INF/jsp/status.jsp new file mode 100644 index 0000000..7730901 --- /dev/null +++ b/edit-webapp/WEB-INF/jsp/status.jsp @@ -0,0 +1,99 @@ +<%@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ page trimDirectiveWhitespaces="true" %> +<%@ page import="java.util.ArrayList" %> +<%@ page import="java.util.Collection" %> +<%@ page import="java.util.Collections" %> +<%@ page import="org.joda.time.DateTime" %> +<%@ page import="org.joda.time.format.DateTimeFormatter" %> +<%@ page import="org.joda.time.format.ISODateTimeFormat" %> +<%@ page import="org.springframework.webflow.execution.RequestContext" %> +<%@ page import="org.opensaml.saml.metadata.resolver.ChainingMetadataResolver" %> +<%@ page import="org.opensaml.saml.metadata.resolver.MetadataResolver" %> +<%@ page import="org.opensaml.saml.metadata.resolver.RefreshableMetadataResolver" %> +<%@ page import="net.shibboleth.idp.Version" %> +<%@ page import="net.shibboleth.idp.saml.metadata.impl.RelyingPartyMetadataProvider" %> +<%@ page import="net.shibboleth.utilities.java.support.component.IdentifiedComponent" %> +<%@ page import="net.shibboleth.utilities.java.support.service.ReloadableService" %> +<%@ page import="net.shibboleth.utilities.java.support.service.ServiceableComponent" %> +<% +final RequestContext requestContext = (RequestContext) request.getAttribute("flowRequestContext"); +final DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTimeNoMillis(); +final DateTime now = DateTime.now(); +final DateTime startupTime = new DateTime(requestContext.getActiveFlow().getApplicationContext().getStartupDate()); +%>### Operating Environment Information +operating_system: <%= System.getProperty("os.name") %> +operating_system_version: <%= System.getProperty("os.version") %> +operating_system_architecture: <%= System.getProperty("os.arch") %> +jdk_version: <%= System.getProperty("java.version") %> +available_cores: <%= Runtime.getRuntime().availableProcessors() %> +used_memory: <%= Runtime.getRuntime().totalMemory() / 1048576 %> MB +maximum_memory: <%= Runtime.getRuntime().maxMemory() / 1048576 %> MB + +### Identity Provider Information +idp_version: <%= Version.getVersion() %> +start_time: <%= startupTime.toString(dateTimeFormatter) %> +current_time: <%= now.toString(dateTimeFormatter) %> +uptime: <%= now.getMillis() - startupTime.getMillis() %> ms + +<% +for (final ReloadableService service : (Collection<ReloadableService>) request.getAttribute("services")) { + final DateTime successfulReload = service.getLastSuccessfulReloadInstant(); + final DateTime lastReload = service.getLastReloadAttemptInstant(); + final Throwable cause = service.getReloadFailureCause(); + + out.println("service: " + ((IdentifiedComponent) service).getId()); + if (successfulReload != null) { + out.println("last successful reload attempt: " + successfulReload.toString(dateTimeFormatter)); + } + if (lastReload != null) { + out.println("last reload attempt: " + lastReload.toString(dateTimeFormatter)); + } + if (cause != null) { + out.println("last failure cause: " + cause.getClass().getName() + ": " + cause.getMessage()); + } + + out.println(); + + if (((IdentifiedComponent) service).getId().contains("Metadata")) { + final ServiceableComponent<MetadataResolver> component = service.getServiceableComponent(); + try { + MetadataResolver rootResolver = component.getComponent(); + Collection<RefreshableMetadataResolver> resolvers = Collections.emptyList(); + + // Step down into wrapping component. + if (rootResolver instanceof RelyingPartyMetadataProvider) { + rootResolver = ((RelyingPartyMetadataProvider) rootResolver).getEmbeddedResolver(); + } + + if (rootResolver instanceof RefreshableMetadataResolver) { + resolvers = Collections.<RefreshableMetadataResolver>singletonList((RefreshableMetadataResolver) rootResolver); + } else if (rootResolver instanceof ChainingMetadataResolver) { + resolvers = new ArrayList<RefreshableMetadataResolver>(); + for (final MetadataResolver childResolver : ((ChainingMetadataResolver) rootResolver).getResolvers()) { + if (childResolver instanceof RefreshableMetadataResolver) { + resolvers.add((RefreshableMetadataResolver) childResolver); + } + } + } + + for (final RefreshableMetadataResolver resolver : resolvers) { + final DateTime lastRefresh = resolver.getLastRefresh(); + final DateTime lastUpdate = resolver.getLastUpdate(); + + out.println("\tmetadata source: " + resolver.getId()); + if (lastRefresh != null) { + out.println("\tlast refresh attempt: " + lastRefresh.toString(dateTimeFormatter)); + } + if (lastUpdate != null) { + out.println("\tlast update: " + lastUpdate.toString(dateTimeFormatter)); + } + out.println(); + } + } finally { + if (null != component) { + component.unpinComponent(); + } + } + } +} +%> diff --git a/edit-webapp/WEB-INF/lib/README b/edit-webapp/WEB-INF/lib/README new file mode 100644 index 0000000..f6d0f2e --- /dev/null +++ b/edit-webapp/WEB-INF/lib/README @@ -0,0 +1,102 @@ +Libraries added by default +----------- +activation-1.1.jar +antlr-2.7.7.jar +aopalliance-1.0.jar +bcprov-jdk15on-1.51.jar +c3p0-0.9.2.1.jar +commons-codec-1.10.jar +commons-collections-3.2.1.jar +commons-compiler-2.7.7.jar +commons-lang-2.4.jar +cryptacular-1.0.jar +dom4j-1.6.1.jar +guava-18.0.jar +hibernate-commons-annotations-4.0.4.Final.jar +hibernate-core-4.3.5.Final.jar +hibernate-entitymanager-4.3.5.Final.jar +hibernate-jpa-2.1-api-1.0.0.Final.jar +httpclient-4.3.6.jar +httpclient-cache-4.3.6.jar +httpcore-4.3.3.jar +idp-attribute-api-3.0.0.jar +idp-attribute-filter-api-3.0.0.jar +idp-attribute-filter-impl-3.0.0.jar +idp-attribute-filter-spring-3.0.0.jar +idp-attribute-resolver-api-3.0.0.jar +idp-attribute-resolver-impl-3.0.0.jar +idp-attribute-resolver-spring-3.0.0.jar +idp-authn-api-3.0.0.jar +idp-authn-impl-3.0.0.jar +idp-cas-api-3.0.0.jar +idp-cas-impl-3.0.0.jar +idp-consent-3.0.0.jar +idp-core-3.0.0.jar +idp-profile-api-3.0.0.jar +idp-profile-impl-3.0.0.jar +idp-profile-spring-3.0.0.jar +idp-saml-api-3.0.0.jar +idp-saml-impl-3.0.0.jar +idp-schema-3.0.0.jar +idp-session-api-3.0.0.jar +idp-session-impl-3.0.0.jar +idp-ui-3.0.0.jar +jandex-1.1.0.Final.jar +janino-2.7.7.jar +javassist-3.18.1-GA.jar +java-support-7.0.0.jar +javax.json-1.0.4.jar +javax.json-api-1.0.jar +jboss-logging-3.1.3.GA.jar +jboss-logging-annotations-1.2.0.Beta1.jar +jboss-transaction-api_1.2_spec-1.0.0.Final.jar +jcl-over-slf4j-1.7.7.jar +jcommander-1.35.jar +joda-time-2.6.jar +jsr305-3.0.0.jar +ldaptive-1.0.5.jar +logback-classic-1.1.2.jar +logback-core-1.1.2.jar +mail-1.4.7.jar +mchange-commons-java-0.2.3.4.jar +ognl-2.6.11.jar +opensaml-core-3.0.0.jar +opensaml-messaging-api-3.0.0.jar +opensaml-messaging-impl-3.0.0.jar +opensaml-profile-api-3.0.0.jar +opensaml-profile-impl-3.0.0.jar +opensaml-saml-api-3.0.0.jar +opensaml-saml-impl-3.0.0.jar +opensaml-security-api-3.0.0.jar +opensaml-security-impl-3.0.0.jar +opensaml-soap-api-3.0.0.jar +opensaml-soap-impl-3.0.0.jar +opensaml-storage-api-3.0.0.jar +opensaml-storage-impl-3.0.0.jar +opensaml-xmlsec-api-3.0.0.jar +opensaml-xmlsec-impl-3.0.0.jar +README +slf4j-api-1.7.7.jar +spring-aop-4.1.3.RELEASE.jar +spring-beans-4.1.3.RELEASE.jar +spring-binding-2.4.1.RELEASE.jar +spring-context-4.1.3.RELEASE.jar +spring-context-support-4.1.3.RELEASE.jar +spring-core-4.1.3.RELEASE.jar +spring-expression-4.1.3.RELEASE.jar +spring-extensions-5.0.0.jar +spring-jdbc-4.1.3.RELEASE.jar +spring-js-2.4.1.RELEASE.jar +spring-js-resources-2.4.1.RELEASE.jar +spring-orm-4.1.3.RELEASE.jar +spring-tx-4.1.3.RELEASE.jar +spring-web-4.1.3.RELEASE.jar +spring-webflow-2.4.1.RELEASE.jar +spring-webmvc-4.1.3.RELEASE.jar +spymemcached-2.11.4.jar +stax2-api-3.1.4.jar +stax-api-1.0-2.jar +velocity-1.7.jar +woodstox-core-asl-4.4.1.jar +xml-apis-1.0.b2.jar +xmlsec-2.0.2.jar diff --git a/edit-webapp/WEB-INF/spring.tld b/edit-webapp/WEB-INF/spring.tld new file mode 100644 index 0000000..d25232e --- /dev/null +++ b/edit-webapp/WEB-INF/spring.tld @@ -0,0 +1,482 @@ +<?xml version="1.0" encoding="UTF-8"?> +<taglib xmlns="http://java.sun.com/xml/ns/j2ee" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" + version="2.0"> + + <description>Spring Framework JSP Tag Library</description> + <tlib-version>4.0</tlib-version> + <short-name>spring</short-name> + <uri>http://www.springframework.org/tags</uri> + + <tag> + <description> + Sets default HTML escape value for the current page. + Overrides a "defaultHtmlEscape" context-param in web.xml, if any. + </description> + <name>htmlEscape</name> + <tag-class>org.springframework.web.servlet.tags.HtmlEscapeTag</tag-class> + <body-content>JSP</body-content> + <attribute> + <description>Set the default value for HTML escaping, to be put + into the current PageContext.</description> + <name>defaultHtmlEscape</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + + <tag> + <description> + Escapes its enclosed body content, applying HTML escaping and/or JavaScript escaping. + The HTML escaping flag participates in a page-wide or application-wide setting + (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml). + </description> + <name>escapeBody</name> + <tag-class>org.springframework.web.servlet.tags.EscapeBodyTag</tag-class> + <body-content>JSP</body-content> + <attribute> + <description>Set HTML escaping for this tag, as boolean value. Overrides the + default HTML escaping setting for the current page.</description> + <name>htmlEscape</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Set JavaScript escaping for this tag, as boolean value. + Default is false.</description> + <name>javaScriptEscape</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + + <tag> + <description> + Retrieves the message with the given code, or text if code isn't resolvable. + The HTML escaping flag participates in a page-wide or application-wide setting + (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml). + </description> + <name>message</name> + <tag-class>org.springframework.web.servlet.tags.MessageTag</tag-class> + <body-content>JSP</body-content> + <attribute> + <description>A MessageSourceResolvable argument (direct or through JSP EL). + Fits nicely when used in conjunction with Spring's own validation error + classes which all implement the MessageSourceResolvable interface. For + example, this allows you to iterate over all of the errors in a form, + passing each error (using a runtime expression) as the value of this + 'message' attribute, thus effecting the easy display of such error + messages.</description> + <name>message</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>The code (key) to use when looking up the message. + If code is not provided, the text attribute will be used.</description> + <name>code</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Set optional message arguments for this tag, as a + (comma-)delimited String (each String argument can contain JSP EL), + an Object array (used as argument array), or a single Object (used + as single argument). You can additionally use nested spring:argument + tags.</description> + <name>arguments</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>The separator character to be used for splitting the + arguments string value; defaults to a 'comma' (',').</description> + <name>argumentSeparator</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Default text to output when a message for the given code + could not be found. If both text and code are not set, the tag will + output null.</description> + <name>text</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>The string to use when binding the result to the page, + request, session or application scope. If not specified, the result + gets outputted to the writer (i.e. typically directly to the JSP).</description> + <name>var</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>The scope to use when exporting the result to a variable. + This attribute is only used when var is also set. Possible values are + page, request, session and application.</description> + <name>scope</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Set HTML escaping for this tag, as boolean value. + Overrides the default HTML escaping setting for the current page.</description> + <name>htmlEscape</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Set JavaScript escaping for this tag, as boolean value. Default is false.</description> + <name>javaScriptEscape</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + + <tag> + <description> + Retrieves the theme message with the given code, or text if code isn't resolvable. + The HTML escaping flag participates in a page-wide or application-wide setting + (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml). + </description> + <name>theme</name> + <tag-class>org.springframework.web.servlet.tags.ThemeTag</tag-class> + <body-content>JSP</body-content> + <attribute> + <description>A MessageSourceResolvable argument (direct or through JSP EL).</description> + <name>message</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>The code (key) to use when looking up the message. + If code is not provided, the text attribute will be used.</description> + <name>code</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Set optional message arguments for this tag, as a + (comma-)delimited String (each String argument can contain JSP EL), + an Object array (used as argument array), or a single Object (used + as single argument). You can additionally use nested spring:argument + tags.</description> + <name>arguments</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>The separator character to be used for splitting the + arguments string value; defaults to a 'comma' (',').</description> + <name>argumentSeparator</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Default text to output when a message for the given code + could not be found. If both text and code are not set, the tag will + output null.</description> + <name>text</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>The string to use when binding the result to the page, + request, session or application scope. If not specified, the result + gets outputted to the writer (i.e. typically directly to the JSP).</description> + <name>var</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>The scope to use when exporting the result to a variable. + This attribute is only used when var is also set. Possible values are + page, request, session and application.</description> + <name>scope</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Set HTML escaping for this tag, as boolean value. + Overrides the default HTML escaping setting for the current page.</description> + <name>htmlEscape</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Set JavaScript escaping for this tag, as boolean value. Default is false.</description> + <name>javaScriptEscape</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + + <tag> + <description>Argument tag based on the JSTL fmt:param tag. The purpose is to + support arguments inside the spring:message and spring:theme + tags.</description> + <name>argument</name> + <tag-class>org.springframework.web.servlet.tags.ArgumentTag</tag-class> + <body-content>JSP</body-content> + <attribute> + <description>The value of the argument.</description> + <name>value</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + <type>java.lang.Object</type> + </attribute> + </tag> + + <tag> + <description> + Provides Errors instance in case of bind errors. + The HTML escaping flag participates in a page-wide or application-wide setting + (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml). + </description> + <name>hasBindErrors</name> + <tag-class>org.springframework.web.servlet.tags.BindErrorsTag</tag-class> + <body-content>JSP</body-content> + <variable> + <name-given>errors</name-given> + <variable-class>org.springframework.validation.Errors</variable-class> + </variable> + <attribute> + <description>The name of the bean in the request, that needs to be + inspected for errors. If errors are available for this bean, they + will be bound under the 'errors' key.</description> + <name>name</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Set HTML escaping for this tag, as boolean value. + Overrides the default HTML escaping setting for the current page.</description> + <name>htmlEscape</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + + <tag> + <description> + Sets a nested path to be used by the bind tag's path. + </description> + <name>nestedPath</name> + <tag-class>org.springframework.web.servlet.tags.NestedPathTag</tag-class> + <body-content>JSP</body-content> + <variable> + <name-given>nestedPath</name-given> + <variable-class>java.lang.String</variable-class> + </variable> + <attribute> + <description>Set the path that this tag should apply. E.g. 'customer' + to allow bind paths like 'address.street' rather than + 'customer.address.street'.</description> + <name>path</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + + <tag> + <description> + Provides BindStatus object for the given bind path. + The HTML escaping flag participates in a page-wide or application-wide setting + (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml). + </description> + <name>bind</name> + <tag-class>org.springframework.web.servlet.tags.BindTag</tag-class> + <body-content>JSP</body-content> + <variable> + <name-given>status</name-given> + <variable-class>org.springframework.web.servlet.support.BindStatus</variable-class> + </variable> + <attribute> + <description>The path to the bean or bean property to bind status + information for. For instance account.name, company.address.zipCode + or just employee. The status object will exported to the page scope, + specifically for this bean or bean property</description> + <name>path</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Set whether to ignore a nested path, if any. Default is to not ignore.</description> + <name>ignoreNestedPath</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Set HTML escaping for this tag, as boolean value. Overrides + the default HTML escaping setting for the current page.</description> + <name>htmlEscape</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + + <tag> + <description> + Provides transformation of variables to Strings, using an appropriate + custom PropertyEditor from BindTag (can only be used inside BindTag). + The HTML escaping flag participates in a page-wide or application-wide setting + (i.e. by HtmlEscapeTag or a 'defaultHtmlEscape' context-param in web.xml). + </description> + <name>transform</name> + <tag-class>org.springframework.web.servlet.tags.TransformTag</tag-class> + <body-content>JSP</body-content> + <attribute> + <description>The value to transform. This is the actual object you want + to have transformed (for instance a Date). Using the PropertyEditor that + is currently in use by the 'spring:bind' tag.</description> + <name>value</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>The string to use when binding the result to the page, + request, session or application scope. If not specified, the result gets + outputted to the writer (i.e. typically directly to the JSP).</description> + <name>var</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>The scope to use when exported the result to a variable. + This attribute is only used when var is also set. Possible values are + page, request, session and application.</description> + <name>scope</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Set HTML escaping for this tag, as boolean value. Overrides + the default HTML escaping setting for the current page.</description> + <name>htmlEscape</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + + <tag> + <description>URL tag based on the JSTL c:url tag. This variant is fully + backwards compatible with the standard tag. Enhancements include support + for URL template parameters.</description> + <name>url</name> + <tag-class>org.springframework.web.servlet.tags.UrlTag</tag-class> + <body-content>JSP</body-content> + <attribute> + <description>The URL to build. This value can include template place holders + that are replaced with the URL encoded value of the named parameter. Parameters + must be defined using the param tag inside the body of this tag.</description> + <name>value</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Specifies a remote application context path. The default is the + current application context path.</description> + <name>context</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>The name of the variable to export the URL value to.</description> + <name>var</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>The scope for the var. 'application', 'session', 'request' and + 'page' scopes are supported. Defaults to page scope. This attribute has no + effect unless the var attribute is also defined.</description> + <name>scope</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Set HTML escaping for this tag, as a boolean value. Overrides the + default HTML escaping setting for the current page.</description> + <name>htmlEscape</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Set JavaScript escaping for this tag, as a boolean value. + Default is false.</description> + <name>javaScriptEscape</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + + <tag> + <description>Parameter tag based on the JSTL c:param tag. The sole purpose is to + support params inside the spring:url tag.</description> + <name>param</name> + <tag-class>org.springframework.web.servlet.tags.ParamTag</tag-class> + <body-content>JSP</body-content> + <attribute> + <description>The name of the parameter.</description> + <name>name</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>The value of the parameter.</description> + <name>value</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + + <tag> + <description>Evaluates a Spring expression (SpEL) and either prints the result or assigns it to a variable.</description> + <name>eval</name> + <tag-class>org.springframework.web.servlet.tags.EvalTag</tag-class> + <body-content>JSP</body-content> + <attribute> + <description>The expression to evaluate.</description> + <name>expression</name> + <required>true</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>The name of the variable to export the evaluation result to.</description> + <name>var</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>The scope for the var. 'application', 'session', 'request' and + 'page' scopes are supported. Defaults to page scope. This attribute has no + effect unless the var attribute is also defined.</description> + <name>scope</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Set HTML escaping for this tag, as a boolean value. Overrides the + default HTML escaping setting for the current page.</description> + <name>htmlEscape</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + <attribute> + <description>Set JavaScript escaping for this tag, as a boolean value. Default is false.</description> + <name>javaScriptEscape</name> + <required>false</required> + <rtexprvalue>true</rtexprvalue> + </attribute> + </tag> + + <function> + <description>Helps to prepare a URL to a Spring MVC controller method.</description> + <name>mvcUrl</name> + <function-class>org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder</function-class> + <function-signature>org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder.MethodArgumentBuilder fromMappingName(java.lang.String)</function-signature> + </function> + +</taglib> diff --git a/edit-webapp/WEB-INF/web.xml b/edit-webapp/WEB-INF/web.xml new file mode 100644 index 0000000..e012740 --- /dev/null +++ b/edit-webapp/WEB-INF/web.xml @@ -0,0 +1,230 @@ +<?xml version="1.0" encoding="UTF-8"?> +<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> + + <display-name>Shibboleth Identity Provider</display-name> + + <!-- Spring application context files. Files are loaded in the order they appear with subsequent files overwriting + same named beans in previous files. --> + <context-param> + <param-name>contextConfigLocation</param-name> + <param-value>${idp.home}/system/conf/global-system.xml</param-value> + </context-param> + + <context-param> + <param-name>contextClass</param-name> + <param-value>net.shibboleth.ext.spring.context.DeferPlaceholderFileSystemXmlWebApplicationContext</param-value> + </context-param> + + <context-param> + <param-name>contextInitializerClasses</param-name> + <param-value>net.shibboleth.idp.spring.IdPPropertiesApplicationContextInitializer</param-value> + </context-param> + + <!-- Spring listener used to load up the configuration --> + <listener> + <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> + </listener> + + <!-- Filters and filter mappings --> + <!-- Try and force I18N, probably won't help much. --> + <filter> + <filter-name>CharacterEncodingFilter</filter-name> + <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> + <init-param> + <param-name>encoding</param-name> + <param-value>UTF-8</param-value> + </init-param> + <init-param> + <param-name>forceEncoding</param-name> + <param-value>true</param-value> + </init-param> + </filter> + <!-- Lets us lump repeated Set-Cookie headers into one, something containers rarely support. --> + <filter> + <filter-name>CookieBufferingFilter</filter-name> + <filter-class>net.shibboleth.utilities.java.support.net.CookieBufferingFilter</filter-class> + </filter> + <!-- Automates the unpack and pack of the cookie-based storage model. --> + <filter> + <filter-name>ClientSessionStorageServiceFilter</filter-name> + <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> + <init-param> + <param-name>targetBeanName</param-name> + <param-value>shibboleth.ClientSessionStorageService</param-value> + </init-param> + </filter> + <!-- Automates the unpack and pack of the cookie-based storage model. --> + <filter> + <filter-name>ClientPersistentStorageServiceFilter</filter-name> + <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> + <init-param> + <param-name>targetBeanName</param-name> + <param-value>shibboleth.ClientPersistentStorageService</param-value> + </init-param> + </filter> + <!-- Automates TLS-based propagation of HttpServletRequest/Response into beans. --> + <filter> + <filter-name>RequestResponseContextFilter</filter-name> + <filter-class>net.shibboleth.utilities.java.support.net.RequestResponseContextFilter</filter-class> + </filter> + <!-- Manages logging MDC. --> + <filter> + <filter-name>SL4JMDCServletFilter</filter-name> + <filter-class>net.shibboleth.idp.log.SLF4JMDCServletFilter</filter-class> + </filter> + <filter-mapping> + <filter-name>CookieBufferingFilter</filter-name> + <url-pattern>/profile/Logout</url-pattern> + <url-pattern>/profile/Shibboleth/SSO</url-pattern> + <url-pattern>/profile/SAML2/Unsolicited/SSO</url-pattern> + <url-pattern>/profile/SAML2/Redirect/SSO</url-pattern> + <url-pattern>/profile/SAML2/POST/SSO</url-pattern> + <url-pattern>/profile/SAML2/POST-SimpleSign/SSO</url-pattern> + <url-pattern>/profile/SAML2/Redirect/SLO</url-pattern> + <url-pattern>/profile/SAML2/POST/SLO</url-pattern> + <url-pattern>/profile/SAML2/POST-SimpleSign/SLO</url-pattern> + <url-pattern>/profile/cas/login</url-pattern> + </filter-mapping> + <filter-mapping> + <filter-name>ClientSessionStorageServiceFilter</filter-name> + <url-pattern>/profile/Logout</url-pattern> + <url-pattern>/profile/Shibboleth/SSO</url-pattern> + <url-pattern>/profile/SAML2/Unsolicited/SSO</url-pattern> + <url-pattern>/profile/SAML2/Redirect/SSO</url-pattern> + <url-pattern>/profile/SAML2/POST/SSO</url-pattern> + <url-pattern>/profile/SAML2/POST-SimpleSign/SSO</url-pattern> + <url-pattern>/profile/SAML2/Redirect/SLO</url-pattern> + <url-pattern>/profile/SAML2/POST/SLO</url-pattern> + <url-pattern>/profile/SAML2/POST-SimpleSign/SLO</url-pattern> + <url-pattern>/profile/cas/login</url-pattern> + </filter-mapping> + <filter-mapping> + <filter-name>ClientPersistentStorageServiceFilter</filter-name> + <url-pattern>/profile/Shibboleth/SSO</url-pattern> + <url-pattern>/profile/SAML2/Unsolicited/SSO</url-pattern> + <url-pattern>/profile/SAML2/Redirect/SSO</url-pattern> + <url-pattern>/profile/SAML2/POST/SSO</url-pattern> + <url-pattern>/profile/SAML2/POST-SimpleSign/SSO</url-pattern> + <url-pattern>/profile/cas/login</url-pattern> + </filter-mapping> + <filter-mapping> + <filter-name>CharacterEncodingFilter</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + <filter-mapping> + <filter-name>RequestResponseContextFilter</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + <filter-mapping> + <filter-name>SL4JMDCServletFilter</filter-name> + <url-pattern>/*</url-pattern> + </filter-mapping> + + <!-- HTTP headers to every response in order to prevent response caching --> + <!-- <filter> <filter-name>IdPNoCacheFilter</filter-name> <filter-class>edu.internet2.middleware.shibboleth.idp.util.NoCacheFilter</filter-class> + </filter> <filter-mapping> <filter-name>IdPNoCacheFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> --> + + <!-- Servlets and servlet mappings --> + <servlet> + <servlet-name>idp</servlet-name> + <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> + <init-param> + <param-name>contextConfigLocation</param-name> + <param-value>${idp.home}/system/conf/mvc-beans.xml ${idp.home}/system/conf/webflow-config.xml</param-value> + </init-param> + <init-param> + <param-name>contextClass</param-name> + <param-value>net.shibboleth.ext.spring.context.DeferPlaceholderFileSystemXmlWebApplicationContext</param-value> + </init-param> + <load-on-startup>1</load-on-startup> + </servlet> + <servlet-mapping> + <servlet-name>idp</servlet-name> + <url-pattern>/status</url-pattern> + <url-pattern>/profile/*</url-pattern> + </servlet-mapping> + + <!-- Servlet protected by container used for RemoteUser authentication --> + <servlet> + <servlet-name>RemoteUserAuthHandler</servlet-name> + <servlet-class>net.shibboleth.idp.authn.impl.RemoteUserAuthServlet</servlet-class> + <load-on-startup>2</load-on-startup> + </servlet> + <servlet-mapping> + <servlet-name>RemoteUserAuthHandler</servlet-name> + <url-pattern>/Authn/RemoteUser</url-pattern> + </servlet-mapping> + + <!-- Servlet protected by container used for X.509 authentication --> + <servlet> + <servlet-name>X509AuthHandler</servlet-name> + <servlet-class>net.shibboleth.idp.authn.impl.X509AuthServlet</servlet-class> + <load-on-startup>3</load-on-startup> + </servlet> + <servlet-mapping> + <servlet-name>X509AuthHandler</servlet-name> + <url-pattern>/Authn/X509</url-pattern> + </servlet-mapping> + + <!-- Send request for the EntityID to the SAML metadata echoing JSP. --> + <servlet> + <servlet-name>shibboleth_jsp</servlet-name> + <jsp-file>/WEB-INF/jsp/metadata.jsp</jsp-file> + </servlet> + <servlet-mapping> + <servlet-name>shibboleth_jsp</servlet-name> + <url-pattern>/shibboleth</url-pattern> + </servlet-mapping> + + <!-- + Uncomment to use container managed authentication. The new servlet spec (3.1) + supports "**" as a wildcard syntax to avoid role usage, which is normally desirable. + Older containers usually support "*" when proprietary options are used (e.g., Jetty + requires setting the Strict property on the SecurityManager.) + --> + <!-- + <security-constraint> + <display-name>Web Login Service</display-name> + <web-resource-collection> + <web-resource-name>user authentication</web-resource-name> + <url-pattern>/Authn/RemoteUser</url-pattern> + <url-pattern>/profile/SAML2/SOAP/ECP</url-pattern> + <http-method>GET</http-method> + <http-method>POST</http-method> + </web-resource-collection> + <auth-constraint> + <role-name>**</role-name> + </auth-constraint> + <user-data-constraint> + <transport-guarantee>CONFIDENTIAL</transport-guarantee> + </user-data-constraint> + </security-constraint> + --> + + <!-- Uncomment if you want BASIC auth managed by the container. --> + <!-- + <login-config> + <auth-method>BASIC</auth-method> + <realm-name>Web Login Service</realm-name> + </login-config> + --> + + <!-- + Uncomment if you want form-based auth managed by the container. + NOTE that the default form-login UI in the IdP is not compatible + with this option, and you will need to supply your own JSP form + and error page. This is not a recommended approach and is severely + limited in functionality as compared to using the IdP's own UI. + --> + <!-- + <login-config> + <auth-method>FORM</auth-method> + <realm-name>Web Login Service</realm-name> + <form-login-config> + <form-login-page>/login.jsp</form-login-page> + <form-error-page>/login-error.jsp</form-error-page> + </form-login-config> + </login-config> + --> +</web-app> |