summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root@ds2.sunet.se>2010-07-14 22:21:01 +0200
committerroot <root@ds2.sunet.se>2010-07-14 22:21:01 +0200
commit075171ef09818d78b12bfc3fa5b1a299b026f245 (patch)
treeae7868fe758fe5e83030c61a7e9713bb7626d0f9
parentf1ab5bb6e64afac460f77ea57c37ecb59f09957d (diff)
working skin
-rw-r--r--src/installer/resources/wayfconfig.xml14
-rw-r--r--src/main/webapp/_lvs.txt1
-rwxr-xr-xsrc/main/webapp/images/flagga_uk.gifbin0 -> 98 bytes
-rw-r--r--src/main/webapp/images/swami2.pngbin0 -> 4269 bytes
-rwxr-xr-xsrc/main/webapp/images/swami2_old.pngbin0 -> 2432 bytes
-rwxr-xr-xsrc/main/webapp/images/swedish-flag.pngbin0 -> 154 bytes
-rw-r--r--src/main/webapp/wayf-sunet.css118
-rw-r--r--src/main/webapp/wayf-sunet.jsp643
-rw-r--r--src/main/webapp/wayf-swamid.css102
-rw-r--r--src/main/webapp/wayf-swamid.jsp651
-rw-r--r--src/main/webapp/wayferror-sunet.jsp38
-rw-r--r--src/main/webapp/wayferror-swamid.jsp38
12 files changed, 1594 insertions, 11 deletions
diff --git a/src/installer/resources/wayfconfig.xml b/src/installer/resources/wayfconfig.xml
index 1817b87..d47a631 100644
--- a/src/installer/resources/wayfconfig.xml
+++ b/src/installer/resources/wayfconfig.xml
@@ -129,14 +129,6 @@
-->
- <DiscoveryServiceHandler
- location=".+/WAYF"
- default="true">
- <PluginInstance identifier="CookiePlugin"/>
- <!--
- <PluginInstance identifier="AddressHint"/> -->
- </DiscoveryServiceHandler>
-
<!-- The ClearCache handler causes the cookie to be deleted. The jsp shipped
with the WAYF refers to this handler -->
@@ -149,7 +141,7 @@
explicit metadata sources. (The default is to use all metadata
sources)
- <DiscoveryServiceHandler location=".+/SecondOnly.wayf" >
+ <DiscoveryServiceHandler location=".+/SecondOnly.wayf" >
<Federation identifier="SecondSite"/>
<PluginInstance identifier="CookiePlugin"/>
@@ -167,11 +159,11 @@
<PluginInstance identifier="CookiePlugin"/>
</DiscoveryServiceHandler>
- <DiscoveryServiceHandler location=".+/ds.sunet.se/.+" jspFile="wayf-sunet.jsp" errorJspFile="wayferror-sunet.jsp">
+ <DiscoveryServiceHandler location="https://ds.sunet.se/.+" jspFile="wayf-sunet.jsp" errorJspFile="wayferror-sunet.jsp">
<PluginInstance identifier="CookiePlugin"/>
</DiscoveryServiceHandler>
- <DiscoveryServiceHandler location=".+/ds.swamid.se/.+" jspFile="wayf-swamid.jsp" errorJspFile="wayferror-swamid.jsp">
+ <DiscoveryServiceHandler location="https://ds.swamid.se/.+" jspFile="wayf-swamid.jsp" errorJspFile="wayferror-swamid.jsp">
<PluginInstance identifier="CookiePlugin"/>
</DiscoveryServiceHandler>
diff --git a/src/main/webapp/_lvs.txt b/src/main/webapp/_lvs.txt
new file mode 100644
index 0000000..7f88982
--- /dev/null
+++ b/src/main/webapp/_lvs.txt
@@ -0,0 +1 @@
+ds
diff --git a/src/main/webapp/images/flagga_uk.gif b/src/main/webapp/images/flagga_uk.gif
new file mode 100755
index 0000000..e000375
--- /dev/null
+++ b/src/main/webapp/images/flagga_uk.gif
Binary files differ
diff --git a/src/main/webapp/images/swami2.png b/src/main/webapp/images/swami2.png
new file mode 100644
index 0000000..98ac663
--- /dev/null
+++ b/src/main/webapp/images/swami2.png
Binary files differ
diff --git a/src/main/webapp/images/swami2_old.png b/src/main/webapp/images/swami2_old.png
new file mode 100755
index 0000000..ede4d64
--- /dev/null
+++ b/src/main/webapp/images/swami2_old.png
Binary files differ
diff --git a/src/main/webapp/images/swedish-flag.png b/src/main/webapp/images/swedish-flag.png
new file mode 100755
index 0000000..37cd0f9
--- /dev/null
+++ b/src/main/webapp/images/swedish-flag.png
Binary files differ
diff --git a/src/main/webapp/wayf-sunet.css b/src/main/webapp/wayf-sunet.css
new file mode 100644
index 0000000..5cefe8d
--- /dev/null
+++ b/src/main/webapp/wayf-sunet.css
@@ -0,0 +1,118 @@
+body {
+ background-color: #CCCCCC;
+ text-align: center;
+ color: #000000;
+ text-align: left;
+ font: normal 68.75%/1.6em Verdana, Arial, Helvetica, sans-serif;
+}
+
+
+img {
+ border: 0;
+}
+
+li {
+ font-size: 100%;
+ list-style-type: none;
+}
+
+p {
+ color: #000;
+ margin-top: 0.5em;
+ padding-right: 1.5em;
+}
+
+.text {
+ padding-right: 4em;
+}
+
+.selector p {
+ margin: 1em 0 0 0;
+ padding: 0;
+}
+
+h1, h2, h3 {
+ color: #000;
+ margin: 0;
+}
+
+
+form div { border-bottom: 1px solid #CCCCCC; padding-bottom: 10px;}
+h2 { margin-top: 10px; }
+
+a.external-link {background: url(external.png) no-repeat 100% 42%; padding-right: 14px; }
+
+span.option {
+ font-size: 100%;
+ font-weight: bold;
+}
+
+.error {
+ font-size: 100%;
+ color: #990000;
+}
+
+#container {
+ width: 780px;
+ margin: 0 auto;
+ padding: 0;
+}
+
+.head {
+ background-color: #00a67c;
+ padding: 1em;
+}
+
+.content {
+ background-color: #FFFFFF;
+ padding: 2.5em 1.5em;
+}
+
+.content-left {
+ float: left;
+ width: 50%;
+}
+
+.content-right {
+}
+
+
+.selector {
+ padding: 1em 1em 2em 1em;
+ margin: 2.5em 0 1em 0;
+ border: 1px solid #00a67c;
+ background: #ccede5;
+}
+
+.footer {
+ border-top: 1px solid #CCCCCC;
+ background-color: #FFFFFF;
+ padding: 1em 1.5em;
+}
+
+span.warning {
+ font-size: 80%;
+}
+
+.logo {
+ text-align: center;
+ margin-top: 1.5em;
+}
+
+div.dropdown {
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ border: 1px solid black;
+ position: absolute;
+}
+
+div.dropdown div {
+ background-color: white;
+ cursor: default;
+ padding: 0px 3px;
+}
+
+div.dropdown div.current {
+ background-color: #3366cc;
+ color: white;
+}
diff --git a/src/main/webapp/wayf-sunet.jsp b/src/main/webapp/wayf-sunet.jsp
new file mode 100644
index 0000000..e42e618
--- /dev/null
+++ b/src/main/webapp/wayf-sunet.jsp
@@ -0,0 +1,643 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<%@ page contentType="text/html;charset=UTF-8" %>
+<html>
+
+<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
+<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
+
+<%request.setCharacterEncoding("UTF-8");%>
+<%response.setCharacterEncoding("UTF-8");%>
+
+<logic:present name="showComments" scope="Request">
+
+<!-- TO CONFIGURE THIS FOR A SPECIFIC SITE
+ =====================================
+
+ Before you deploy this jsp you need to look for CONFIG below.
+ These mark places where you should make changes.
+
+ If you want to make more profound changes but only to the jsp,
+ you should read the sections marked PROGRAMMING NOTE below.-->
+
+<!-- PROGRAMMING NOTE
+
+ "requestURL" contains the URL that was specified to get the
+ WAYF going. The jsp uses it mostly for submitting result back to
+ the WAYF and error reporting -->
+
+</logic:present>
+
+ <jsp:useBean id="requestURL" scope="request" class="java.lang.String"/>
+
+<logic:present name="showComments" scope="Request">
+
+<!-- PROGRAMMING NOTE
+
+ shire, target, provider and time are all part of the Shibboleth
+ 1.3 discovery protocol and need to be specified as parameters to the WAYF
+
+ entityID, return, returnIDParam are all part of the
+ SAML Discovery protocol.
+
+
+-->
+</logic:present>
+
+<logic:notPresent name="entityID" scope="request">
+<logic:notPresent name="shire" scope="request">
+
+<jsp:forward page = "wayferror.jsp"/>
+</logic:notPresent>
+</logic:notPresent>
+
+
+<logic:present name="showComments" scope="Request">
+
+<!-- PROGRAMMING NOTE
+ In addition to the above. The WAYF may also supply the following to
+ the jsp.
+
+ "cookieList" If this exists it represents the contents of the
+ _saml_idp cookie (possibly filtered to remove IdPs which
+ cannot serve the SP). It is a Collection of IdPSite objects,
+ which themselves have the following properties:
+
+ "name" The uri for the IdP, which needs to be returned to the
+ WAYF in the "origin" parameter.
+
+ "displayName" User friendly name (taken from its alias)
+
+ "addressFor" The (ungarnished) URL for the IdP. This could be
+ used to create a direct hyperlink to the IdP
+
+ "sites" If this exists it contains all the possible IdPs for for
+ the SP (possibly filtered). It is a Collection of IdPSite
+ Objects which are described above. This is only present if
+ provideList was defined true in the configuration.
+
+ "siteLists" If this exists it contains all the possible metadata
+ files which can service for the SP (possibly filtered). It
+ is a collection of IdPSiteSetEntry Objects which have two
+ properties:
+
+ "name" This is the displayName from the Metadata element in
+ the WAYF configuration file
+
+ "sites" This represents the IdPs. Again it is a collection
+ of IdPSite Objects
+
+ It is only present if provideListOfList was defined true in
+ the configuration.
+
+ "singleSiteList" if this is present, then there is only one
+ IdPSiteSetEntry Object in "siteLists".
+
+ "searchresultempty" If this is present then it means that a
+ search was performed, but no suitable IdPs were returned.
+
+ "searchresults" If this is present it represents the list of IdPs
+ which matched a previous search. It is a Collection of
+ IdPSite Objects. -->
+
+<!-- PROGRAMMING NOTE
+
+ The jsp communicates back to the WAYF via the parameters listed
+ above, and:
+
+ "action" what the WAYF has to do. Possible contents are:
+
+ "lookup" - refresh the screen.
+ "search" - perform a search on the contents parameter "string"
+ "selection" - redirect to the IdP with the uri "origin"
+
+ "cache" preserve any selection in the _saml_idp cookie. A
+ value of "session" makes the cookie last for the browser
+ session, "perm" gives it the lifetime specified in the
+ configuration file.
+
+ The tabindex is hard wired. Fortunately the standard allows us to
+ have duplicate numbers and says the order is the order things
+ get emitted. We use these numbers
+
+ 10 - Recently used sites hyperlinks
+ 20 - <clear button for above>
+ 25 - AutoSuggestion
+ 30 Federation selection
+ 40 IdP within Selection
+ 50 Select button
+ 60 How long to remember selector
+ 70 Search entry
+ 80 Search Button
+ 90 List of search results
+ 100 Select search result
+ 110 How long to remember search results
+ 120 Hyperlink to admin user.
+
+-->
+
+</logic:present>
+
+<head>
+ <link rel="stylesheet" title="normal" type="text/css"
+ href="wayf-sunet.css" /> <title>Identity Provider Selection</title>
+ </head>
+
+<body>
+ <div id="container">
+ <div class="head">
+ <img src="images/swami2.png" alt="SWAMI logotype">
+ </div>
+
+ <div class="content">
+ <div class="content-left">
+ <img src="images/swedish-flag.png" alt="Swedish flag">
+ <h2>Välj en identitetsutgivare</h2>
+ <p>Tjänsten du försöker nå kräver att du väljer en identitetsutgivare (tex ditt universitet/högskola) från nedanstående lista innan du kan logga in. </p>
+ <p><a title="Länken öppnas i ett nytt fönster" href="http://www.swamid.se/pub/jsp/polopoly.jsp?d=6940&a=25649" class="external-link" rel="external">Vad är en identitetsutgivare?</a><br/>
+ <a title="Länken öppnas i ett nytt fönster" href="http://www.swamid.se/pub/jsp/polopoly.jsp?d=6940" class="external-link" rel="external">Vad är SWAMID?</a></p>
+ </div>
+ <div class="content-right">
+ <img src="images/flagga_uk.gif" alt="English flag">
+ <h2>Choose an identity provider</h2>
+ <p>The Service you are trying to access requires you to choose an identityprovider (e.g. your university/college) from the list below before you can log in. </p>
+ <p><a title="Link will open in a new window" href="http://www.swamid.se/pub/jsp/polopoly.jsp?d=6940&a=25650" target="wayf-info" class="external-link" rel="external">What is an identity provider?</a><br/>
+ <a title="Link will open in a new window" href="http://www.swamid.se/pub/jsp/polopoly.jsp?d=6940" class="external-link" target="wayf-info" rel="external">What is SWAMID?</a>
+ </p>
+ </div>
+
+ <div class="selector">
+ <logic:present name="cookieList" scope="request">
+
+ <h2>Recently used:</h2>
+
+<logic:present name="showComments" scope="Request">
+
+<!-- PROGRAMMING NOTE
+
+ Generate a hyperlink back to the WAYF. Note that we are
+ simulating the user having specified a permanent cookie -->
+
+</logic:present>
+
+ <logic:iterate id="site" name="cookieList">
+ <p class="text">
+ <logic:present name="entityID" scope="request">
+
+ <bean:define id="returnIDParam" name="returnIDParam"/>
+ <bean:define id="ei" name="entityID" />
+ <bean:define id="re" name="returnX"/>
+
+ <a tabindex="10" href="<bean:write name="requestURL" />?entityID=<%= java.net.URLEncoder.encode(ei.toString(), "utf-8") %>&return=<%= java.net.URLEncoder.encode(re.toString(), "utf-8") %>&returnIDxParam=<%= java.net.URLEncoder.encode( returnIDParam.toString(), "utf-8" ) %>&cache=perm&action=selection&origin=<jsp:getProperty name="site" property="name" />">
+ <jsp:getProperty name="site" property="displayName" />
+ </a>
+ </logic:present>
+ <logic:notPresent name="entityID" scope="request">
+ <bean:define id="targ" name="target" />
+ <bean:define id="shire" name="shire" />
+ <bean:define id="pid" name="providerId" />
+ <a tabindex="10" href="<bean:write name="requestURL" />?target=<%= java.net.URLEncoder.encode(targ.toString(),"utf-8") %>&shire=<%= java.net.URLEncoder.encode(shire.toString(),"utf-8") %>&providerId=<%= java.net.URLEncoder.encode(pid.toString(),"utf-8") %>&time=<bean:write name="time" />&cache=perm&action=selection&origin=<jsp:getProperty name="site" property="name" />">
+ <jsp:getProperty name="site"
+ property="displayName" />
+ </a>
+ </logic:notPresent>
+ </p>
+ </logic:iterate>
+
+<logic:present name="showComments" scope="Request">
+
+<!-- PROGRAMMING NOTE
+
+ We defined the ClearCache.Wayf service in wayfconfig. So we know
+ it is here. This will empty the cookie and loop -->
+
+</logic:present>
+
+ <form method="get" action="ClearCache.wayf" >
+ <div>
+ <logic:notPresent name="entityID" scope="request">
+ <input type="hidden" name="shire" value="<bean:write name="shire" />" />
+ <input type="hidden" name="target" value="<bean:write name="target" />" />
+ <input type="hidden" name="providerId" value="<bean:write name="providerId" />" />
+ <logic:present name="time" scope="request">
+ <input type="hidden" name="time" value="<bean:write name="time" />" />
+ </logic:present>
+ </logic:notPresent>
+ <logic:present name="entityID" scope="request">
+ <input type="hidden" name="entityID" value="<bean:write name="entityID" />" />
+ <input type="hidden" name="returnX" value="<bean:write name="returnX" />" />
+ <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" />
+ </logic:present>
+ <input tabindex="20" type="submit" value="Clear" />
+ </div>
+ </form>
+
+ </logic:present> <!-- Previous Selections -->
+
+<logic:present name="showComments" scope="Request">
+
+<!-- PROGRAMMING NOTE
+
+ Add the "instant serach" dialogue.
+
+</logic:present>
+
+ <div class="list">
+ <logic:present name="sites" scope="request">
+ <h2>Enter institution name:</h2>
+ <form autocomplete="OFF" action="">
+ <div>
+ <logic:notPresent name="entityID" scope="request">
+ <input type="hidden" name="shire" value="<bean:write name="shire" />" />
+ <input type="hidden" name="target" value="<bean:write name="target" />" />
+ <input type="hidden" name="providerId" value="<bean:write name="providerId" />" />
+ <logic:present name="time" scope="request">
+ <input type="hidden" name="time" value="<bean:write name="time" />" />
+ </logic:present>
+ </logic:notPresent>
+ <logic:present name="entityID" scope="request">
+ <input type="hidden" name="entityID" value="<bean:write name="entityID" />" />
+ <input type="hidden" name="returnX" value="<bean:write name="returnX" />" />
+ <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" />
+ </logic:present>
+ <input type="hidden" id="enterOrigin" name="origin" value="unspec" />
+ <input type="hidden" id="enterType" name="action" value="search" />
+ <input type="text" id="enterText" name="string" value="" tabindex="25" size="54"/>
+ <input type="submit" id="enterSubmit" value="Search"/>
+ <input type="hidden" name="cache" value="perm"/>
+ </div>
+ </form>
+ </logic:present>
+
+ <h2>
+
+<logic:present name="showComments" scope="Request">
+
+Provide a static drop down or a dynamically republished one. - you may wish to remove this code
+
+</logic:present>
+
+Or choose from a list:
+
+ </h2>
+
+ <logic:present name="sites" scope="request">
+ <logic:notPresent name="siteLists" scope="request">
+
+ <form method="get" action="<bean:write name="requestURL" />">
+ <div>
+ <logic:notPresent name="entityID" scope="request">
+ <input type="hidden" name="shire" value="<bean:write name="shire" />" />
+ <input type="hidden" name="target" value="<bean:write name="target" />" />
+ <input type="hidden" name="providerId" value="<bean:write name="providerId" />" />
+ <logic:present name="time" scope="request">
+ <input type="hidden" name="time" value="<bean:write name="time" />" />
+ </logic:present>
+ </logic:notPresent>
+ <logic:present name="entityID" scope="request">
+ <input type="hidden" name="entityID" value="<bean:write name="entityID" />" />
+ <input type="hidden" name="returnX" value="<bean:write name="returnX" />" />
+ <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" />
+ </logic:present>
+ <input type="hidden" name="action" value="selection" />
+ <select name="origin" id="hackForie6" tabindex="40">
+ <logic:iterate id="site" name="sites">
+ <option value="<jsp:getProperty name="site" property="name" />">
+ <jsp:getProperty name="site" property="displayName" />
+ </option>
+ </logic:iterate>
+ </select>
+ <input type="submit" value="Select" tabindex="50" />
+ <select name="cache" tabindex="60">
+ <option value="false"> Do not remember</option>
+ <option value="session" selected="selected"> Remember for session</option>
+ <option value="perm"> Remember for a week</option>
+ </select>
+ </div>
+ </form>
+ </logic:notPresent>
+ </logic:present>
+
+<logic:present name="showComments" scope="Request">
+
+<!-- PROGRAMMING NOTE
+ Build two tables side by side, one with the Federation names and 'ALL' (if apposite)
+ and the other will be dynamically populated with the members of that federation.
+
+ This needs to work in the face of no javascript, so we initially populate the
+ Right hand list with all the IdPs. The first Selection in the Left hand Table will
+ shrink this list
+
+ The 'lists of all IdPs' is derived from the one which java gives us (if it did)
+ otherwise it is derived by a double iteration through the List of Lists. This
+ makes for complicated looking code, but it's dead simple really.
+
+ -->
+
+</logic:present>
+
+ <logic:present name="siteLists" scope="request">
+ <form method="get" action="<bean:write name="requestURL" />">
+ <div>
+ <logic:notPresent name="entityID" scope="request">
+ <input type="hidden" name="shire" value="<bean:write name="shire" />" />
+ <input type="hidden" name="target" value="<bean:write name="target" />" />
+ <input type="hidden" name="providerId" value="<bean:write name="providerId" />" />
+ <logic:present name="time" scope="request">
+ <input type="hidden" name="time" value="<bean:write name="time" />" />
+ </logic:present>
+ </logic:notPresent>
+ <logic:present name="entityID" scope="request">
+ <input type="hidden" name="entityID" value="<bean:write name="entityID" />" />
+ <input type="hidden" name="returnX" value="<bean:write name="returnX" />" />
+ <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" />
+ </logic:present>
+ <table id="tab">
+ <tr>
+ <th>Federation </th>
+ <th>organization</th>
+ </tr>
+ <tr><td>
+ <select name="FedSelector" size="10" id="FedSelect" tabindex="30"
+ onchange="changedFed(this.form.origin,
+ this.form.FedSelector[this.form.FedSelector.selectedIndex].value);">
+ <logic:iterate id="siteset" name="siteLists">
+ <logic:present name="singleSiteList" scope="request">
+
+ <!-- Only One site so select it -->
+
+ <option value="<jsp:getProperty name="siteset" property="name"/>" selected="selected">
+ <jsp:getProperty name="siteset" property="name"/>
+ </option>
+ </logic:present>
+ <logic:notPresent name="singleSiteList" scope="request">
+ <option value="<jsp:getProperty name="siteset" property="name"/>">
+ <jsp:getProperty name="siteset" property="name"/>
+ </option>
+ </logic:notPresent>
+ </logic:iterate>
+ <logic:notPresent name="singleSiteList" scope="request">
+
+ <!-- More than one site so select the 'All' -->
+
+ <option value="ALL" selected="selected">
+ All Sites
+ </option>
+ </logic:notPresent>
+ </select></td><td>
+ <input type="hidden" name="action" value="selection" />
+ <select name="origin" size="10" id="originIdp" tabindex="40">
+ <logic:present name="sites" scope="request">
+ <logic:iterate id="site" name="sites">
+ <option value="<jsp:getProperty name="site" property="name" />">
+ <jsp:getProperty name="site" property="displayName" />
+ </option>
+ </logic:iterate>
+ </logic:present>
+
+ <logic:notPresent name="sites" scope="request">
+ <logic:iterate id="siteset" name="siteLists">
+ <logic:iterate id="site" name="siteset" property="sites">
+ <option value="<jsp:getProperty name="site" property="name" />">
+ <jsp:getProperty name="site" property="displayName" />
+ </option>
+ </logic:iterate>
+ </logic:iterate>
+ </logic:notPresent>
+ </select>
+ </td></tr>
+ </table>
+ <p>
+ <input type="submit" value="Select" tabindex="50" />
+ <select name="cache" tabindex="60" >
+ <option value="false"> Do not remember</option>
+ <option value="session" selected="selected"> Remember for session</option>
+ <option value="perm"> Remember for a week</option>
+ </select>
+ </p>
+ </div>
+ </form>
+ </logic:present>
+ </div>
+
+
+ <div class="search">
+
+<logic:present name="showComments" scope="Request">
+
+<!-- This is here for completeness - it shows the "old fashioned way" to do search -->
+
+ <span class="option">or</span>
+
+ <h2>Sök på nyckelord:/Search by keyword:</h2>
+
+ <form method="get" action="<bean:write name="requestURL" />">
+ <div>
+ <p>
+
+ <logic:notPresent name="entityID" scope="request">
+ <input type="hidden" name="shire" value="<bean:write name="shire" />" />
+ <input type="hidden" name="target" value="<bean:write name="target" />" />
+ <input type="hidden" name="providerId" value="<bean:write name="providerId" />" />
+ <logic:present name="time" scope="request">
+ <input type="hidden" name="time" value="<bean:write name="time" />" />
+ </logic:present>
+ </logic:notPresent>
+ <logic:present name="entityID" scope="request">
+ <input type="hidden" name="entityID" value="<bean:write name="entityID" />" />
+ <input type="hidden" name="returnX" value="<bean:write name="returnX" />" />
+ <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" />
+ </logic:present>
+
+ <input type="hidden" name="action" value="search" />
+ <input type="text" name="string" tabindex="70" />
+ <input type="submit" value="Search" tabindex="80" />
+ </p>
+ </div>
+ </form>
+
+<!-- The end of the old code. Below is where search results go 00>
+
+</logic:present>
+ <logic:present name="searchResultsEmpty" scope="request">
+ <p class="error">
+
+No provider was found that matches your search criteria, please try again.
+
+ </p>
+ </logic:present>
+
+ <logic:present name="searchresults" scope="request">
+ <h3>
+
+Search results:
+
+ </h3>
+ <form method="get" action="<bean:write name="requestURL" />">
+ <div>
+ <ul>
+ <logic:iterate id="currResult" name="searchresults">
+ <li>
+ <input type="radio" name="origin" tabindex="90" value="<jsp:getProperty name="currResult" property="name" />" />
+ <jsp:getProperty name="currResult" property="displayName" />
+ </li>
+ </logic:iterate>
+ </ul>
+ <p>
+ <logic:notPresent name="entityID" scope="request">
+ <input type="hidden" name="shire" value="<bean:write name="shire" />" />
+ <input type="hidden" name="target" value="<bean:write name="target" />" />
+ <input type="hidden" name="providerId" value="<bean:write name="providerId" />" />
+ <logic:present name="time" scope="request">
+ <input type="hidden" name="time" value="<bean:write name="time" />" />
+ </logic:present>
+ </logic:notPresent>
+ <logic:present name="entityID" scope="request">
+ <input type="hidden" name="entityID" value="<bean:write name="entityID" />" />
+ <input type="hidden" name="returnX" value="<bean:write name="returnX" />" />
+ <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" />
+ </logic:present>
+ <input type="hidden" name="action" value="selection" />
+ <input type="submit" value="Select" tabindex="100" />
+ <select name="cache" tabindex="100" >
+ <option value="false"> Do not remember</option>
+ <option value="session" selected="selected"> Remember for session</option>
+ <option value="perm"> Remember for a week</option>
+ </select>
+ </p>
+ </div>
+ </form>
+ </logic:present>
+ </div>
+ </div>
+
+ <div class="footer">
+ <p class="text">
+<!--CONFIG-->
+The <a href="http://www.swamid.se">SWAMID federation</a> is an activity of the <a href="http://www.swami.se">Swedish Alliance for Middleware Infrastructure</a>.
+<a href="http://www.swamid.se">SWAMID</a> is in part based on <a href="http://shibboleth.internet2.edu">Shibboleth</a> from <a href="http://www.internet2.edu">Internet2</a>.
+If you need assistance or require information send an e-mail to <a href="mailto:info@swamid.se?subject=WAYF+support+request">SWAMID support</a> with a description of the problem.
+ </p>
+ </div>
+
+<logic:present name="showComments" scope="Request">
+
+<!--PROGRAMMING NOTE
+
+ We need to program the on changed selector. Note that option.InnterText only
+ works on IE, options.remove doesn't work on Firefox, and that
+ options.add doesn't work on Safari. Hence the somewhat strange manipulations
+ to delete & populate the list of options.
+
+ X is the select object for the right hand table
+ Selected is the name selected in the left hand table
+
+-->
+
+</logic:present>
+
+<logic:present name="siteLists" scope="request">
+<script language="javascript" type="text/javascript">
+<!--
+
+function changedFed(X, Selected) {
+
+ <logic:notPresent name="singleSiteList" scope="request">
+
+ while (X.length > 0) {
+ X.options[(X.length-1)] = null;
+ }
+
+
+ <logic:iterate id="siteset" name="siteLists">
+ if (Selected == "<jsp:getProperty name="siteset" property="name"/>") {
+ var opt;
+ <logic:iterate id="site" name="siteset" property="sites">
+ opt = new Option ("<jsp:getProperty name="site" property="displayName" />");
+ X.options[X.length] = opt;
+ opt.value = "<jsp:getProperty name="site" property="name" />";
+ </logic:iterate>
+ }
+ </logic:iterate>
+
+ if (Selected == "ALL") {
+ var opt;
+
+ <logic:present name="sites" scope="request">
+ <logic:iterate id="site" name="sites">
+ opt = new Option("<jsp:getProperty name="site" property="displayName" />");
+ X.options[X.length] = opt;
+ opt.value = "<jsp:getProperty name="site" property="name" />";
+ </logic:iterate>
+ </logic:present>
+
+ <logic:notPresent name="sites" scope="request">
+ <logic:iterate id="siteset" name="siteLists">
+ <logic:iterate id="site" name="siteset" property="sites">
+ opt = new Option ("<jsp:getProperty name="site" property="displayName" />");
+ X.options[X.length] = opt;
+ opt.value = "<jsp:getProperty name="site" property="name" />";
+ </logic:iterate>
+ </logic:iterate>
+ </logic:notPresent>
+ }
+
+ </logic:notPresent>
+
+}
+-->
+</script>
+</logic:present>
+
+<logic:present name="sites" scope="request">
+
+<logic:present name="showComments" scope="Request">
+ <!-- Load the autosuggest code.
+
+ PROGRAMMING NOTE - the "ie6Hack" is to do with an issue in ie6 in which the
+ psuedo drop down floats below the real dropdown. The hack is that we jsut disable
+ the real drop down when the pseudo one is about. This can seem weird for some
+ layouts and so if you are not deploying against ie6 you can just send an
+ empty array.
+ -->
+</logic:present>
+ <script language="javascript" type="text/javascript" src="Suggest.js"></script>
+ <script language="javascript" type="text/javascript">
+<!--
+window.onload = function() {
+
+<logic:notPresent name="siteLists" scope="request">
+ var ie6Hack = [ document.getElementById("hackForie6")];
+</logic:notPresent>
+
+<logic:present name="siteLists" scope="request">
+ var ie6Hack = [ document.getElementById("FedSelect"), document.getElementById("originIdp")];
+</logic:present>
+ var control = new TypeAheadControl(theElements,
+ document.getElementById("enterText"),
+ document.getElementById("enterOrigin"),
+ document.getElementById("enterSubmit"),
+ document.getElementById("enterType"),
+ ie6Hack);
+
+
+ document.getElementById("enterText").focus();
+}
+
+
+var theElements = [
+ <logic:iterate id="site" name="sites">
+ ["<%= ((edu.internet2.middleware.shibboleth.wayf.IdPSite)site).getDisplayName().replace("\n","").toString() %>",
+ "<jsp:getProperty name="site" property="name" />"],
+ </logic:iterate>
+ ];
+
+-->
+ </script>
+</logic:present>
+
+
+</body>
+</html>
+
diff --git a/src/main/webapp/wayf-swamid.css b/src/main/webapp/wayf-swamid.css
new file mode 100644
index 0000000..d89008a
--- /dev/null
+++ b/src/main/webapp/wayf-swamid.css
@@ -0,0 +1,102 @@
+body {
+ margin: 0;
+ padding: 0;
+}
+
+body {
+ background-color: #CCCCCC;
+ text-align: center;
+ color: #000000;
+ text-align: left;
+ font: normal 68.75%/1.6em Verdana, Arial, Helvetica, sans-serif;
+}
+
+
+img {
+ border: 0;
+}
+
+li {
+ font-size: 100%;
+ list-style-type: none;
+}
+
+p {
+ color: #000;
+ margin-top: 0.5em;
+ padding-right: 1.5em;
+}
+
+.text {
+ padding-right: 4em;
+}
+
+
+.selector p {
+ margin: 1em 0 0 0;
+ padding: 0;
+}
+
+h1, h2, h3 {
+ color: #000;
+ margin: 0;
+}
+
+a.external-link { background: url(external.png) no-repeat 100% 42%; padding-right: 14px; }
+
+span.option {
+ font-size: 100%;
+ font-weight: bold;
+}
+
+.error {
+ font-size: 100%;
+ color: #990000;
+}
+
+#container {
+ width: 780px;
+ margin: 0 auto;
+ padding: 0;
+}
+
+.head {
+ background-color: #00a67c;
+ padding: 1em;
+}
+
+.content {
+ background-color: #FFFFFF;
+ padding: 2.5em 1.5em;
+}
+
+.content-left {
+ float: left;
+ width: 50%;
+}
+
+.content-right {
+}
+
+
+.selector {
+ width: 42% ;
+ padding: 1em 1em 2em 1em;
+ margin: 2.5em 0 1em 0;
+ border: 1px solid #00a67c; background: #ccede5;
+}
+
+.footer {
+ border-top: 1px solid #CCCCCC;
+ background-color: #FFFFFF;
+ padding: 1em 1.5em;
+}
+
+span.warning {
+ font-size: 80%;
+}
+
+.logo {
+ text-align: center;
+ margin-top: 1.5em;
+}
diff --git a/src/main/webapp/wayf-swamid.jsp b/src/main/webapp/wayf-swamid.jsp
new file mode 100644
index 0000000..705c0a3
--- /dev/null
+++ b/src/main/webapp/wayf-swamid.jsp
@@ -0,0 +1,651 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<%@ page contentType="text/html;charset=UTF-8" %>
+<html>
+
+<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
+<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
+
+<%request.setCharacterEncoding("UTF-8");%>
+<%response.setCharacterEncoding("UTF-8");%>
+
+<logic:present name="showComments" scope="Request">
+
+<!-- TO CONFIGURE THIS FOR A SPECIFIC SITE
+ =====================================
+
+ Before you deploy this jsp you need to look for CONFIG below.
+ These mark places where you should make changes.
+
+ If you want to make more profound changes but only to the jsp,
+ you should read the sections marked PROGRAMMING NOTE below.-->
+
+<!-- PROGRAMMING NOTE
+
+ "requestURL" contains the URL that was specified to get the
+ WAYF going. The jsp uses it mostly for submitting result back to
+ the WAYF and error reporting -->
+
+</logic:present>
+
+ <jsp:useBean id="requestURL" scope="request" class="java.lang.String"/>
+
+<logic:present name="showComments" scope="Request">
+
+<!-- PROGRAMMING NOTE
+
+ shire, target, provider and time are all part of the Shibboleth
+ 1.3 discovery protocol and need to be specified as parameters to the WAYF
+
+ entityID, return, returnIDParam are all part of the
+ SAML Discovery protocol.
+
+
+-->
+</logic:present>
+
+<logic:notPresent name="entityID" scope="request">
+<logic:notPresent name="shire" scope="request">
+
+<jsp:forward page = "wayferror.jsp"/>
+</logic:notPresent>
+</logic:notPresent>
+
+
+<logic:present name="showComments" scope="Request">
+
+<!-- PROGRAMMING NOTE
+ In addition to the above. The WAYF may also supply the following to
+ the jsp.
+
+ "cookieList" If this exists it represents the contents of the
+ _saml_idp cookie (possibly filtered to remove IdPs which
+ cannot serve the SP). It is a Collection of IdPSite objects,
+ which themselves have the following properties:
+
+ "name" The uri for the IdP, which needs to be returned to the
+ WAYF in the "origin" parameter.
+
+ "displayName" User friendly name (taken from its alias)
+
+ "addressFor" The (ungarnished) URL for the IdP. This could be
+ used to create a direct hyperlink to the IdP
+
+ "sites" If this exists it contains all the possible IdPs for for
+ the SP (possibly filtered). It is a Collection of IdPSite
+ Objects which are described above. This is only present if
+ provideList was defined true in the configuration.
+
+ "siteLists" If this exists it contains all the possible metadata
+ files which can service for the SP (possibly filtered). It
+ is a collection of IdPSiteSetEntry Objects which have two
+ properties:
+
+ "name" This is the displayName from the Metadata element in
+ the WAYF configuration file
+
+ "sites" This represents the IdPs. Again it is a collection
+ of IdPSite Objects
+
+ It is only present if provideListOfList was defined true in
+ the configuration.
+
+ "singleSiteList" if this is present, then there is only one
+ IdPSiteSetEntry Object in "siteLists".
+
+ "searchresultempty" If this is present then it means that a
+ search was performed, but no suitable IdPs were returned.
+
+ "searchresults" If this is present it represents the list of IdPs
+ which matched a previous search. It is a Collection of
+ IdPSite Objects. -->
+
+<!-- PROGRAMMING NOTE
+
+ The jsp communicates back to the WAYF via the parameters listed
+ above, and:
+
+ "action" what the WAYF has to do. Possible contents are:
+
+ "lookup" - refresh the screen.
+ "search" - perform a search on the contents parameter "string"
+ "selection" - redirect to the IdP with the uri "origin"
+
+ "cache" preserve any selection in the _saml_idp cookie. A
+ value of "session" makes the cookie last for the browser
+ session, "perm" gives it the lifetime specified in the
+ configuration file.
+
+ The tabindex is hard wired. Fortunately the standard allows us to
+ have duplicate numbers and says the order is the order things
+ get emitted. We use these numbers
+
+ 10 - Recently used sites hyperlinks
+ 20 - <clear button for above>
+ 25 - AutoSuggestion
+ 30 Federation selection
+ 40 IdP within Selection
+ 50 Select button
+ 60 How long to remember selector
+ 70 Search entry
+ 80 Search Button
+ 90 List of search results
+ 100 Select search result
+ 110 How long to remember search results
+ 120 Hyperlink to admin user.
+
+-->
+
+</logic:present>
+
+<head>
+ <link rel="stylesheet" title="normal" type="text/css"
+ href="wayf-swamid.css" /> <title>Identity Provider Selection</title>
+ </head>
+
+<body>
+ <div id="container">
+ <div class="head">
+ <img src="images/swami2.png" alt="SWAMI logotype">
+ </div>
+
+ <div class="content">
+ <div class="content-left">
+ <img src="images/swedish-flag.png" alt="Swedish flag">
+ <h2>Välj en identitetsutgivare</h2>
+ <p>Tjänsten du försöker nå kräver att du väljer en identitetsutgivare (tex ditt universitet/högskola) från nedanstående lista innan du kan logga in. </p>
+ <p><a title="Länken öppnas i ett nytt fönster" href="http://www.swamid.se/pub/jsp/polopoly.jsp?d=6940&a=25649" class="external-link" rel="external">Vad är en identitetsutgivare?</a><br/>
+ <a title="Länken öppnas i ett nytt fönster" href="http://www.swamid.se/pub/jsp/polopoly.jsp?d=6940" class="external-link" rel="external">Vad är SWAMID?</a></p>
+ </div>
+ <div class="content-right">
+ <img src="images/flagga_uk.gif" alt="English flag">
+ <h2>Choose an identity provider</h2>
+ <p>The Service you are trying to access requires you to choose an identityprovider (e.g. your university/college) from the list below before you can log in. </p>
+ <p><a title="Link will open in a new window" href="http://www.swamid.se/pub/jsp/polopoly.jsp?d=6940&a=25650" target="wayf-info" class="external-link" rel="external">What is an identity provider?</a><br/>
+ <a title="Link will open in a new window" href="http://www.swamid.se/pub/jsp/polopoly.jsp?d=6940" class="external-link" target="wayf-info" rel="external">What is SWAMID?</a>
+ </p>
+ </div>
+
+ <div class="selector">
+ <p class="text">
+
+<!--CONFIG-->
+
+The Service you are trying to reach requires that you
+authenticate with your home organization, enter the name below.
+
+ </p>
+ <logic:present name="cookieList" scope="request">
+
+ <h2>Nyligen använda/Recently used:</h2>
+
+<logic:present name="showComments" scope="Request">
+
+<!-- PROGRAMMING NOTE
+
+ Generate a hyperlink back to the WAYF. Note that we are
+ simulating the user having specified a permanent cookie -->
+
+</logic:present>
+
+ <logic:iterate id="site" name="cookieList">
+ <p class="text">
+ <logic:present name="entityID" scope="request">
+
+ <bean:define id="returnIDParam" name="returnIDParam"/>
+ <bean:define id="ei" name="entityID" />
+ <bean:define id="re" name="returnX"/>
+
+ <a tabindex="10" href="<bean:write name="requestURL" />?entityID=<%= java.net.URLEncoder.encode(ei.toString(), "utf-8") %>&return=<%= java.net.URLEncoder.encode(re.toString(), "utf-8") %>&returnIDxParam=<%= java.net.URLEncoder.encode( returnIDParam.toString(), "utf-8" ) %>&cache=perm&action=selection&origin=<jsp:getProperty name="site" property="name" />">
+ <jsp:getProperty name="site" property="displayName" />
+ </a>
+ </logic:present>
+ <logic:notPresent name="entityID" scope="request">
+ <bean:define id="targ" name="target" />
+ <bean:define id="shire" name="shire" />
+ <bean:define id="pid" name="providerId" />
+ <a tabindex="10" href="<bean:write name="requestURL" />?target=<%= java.net.URLEncoder.encode(targ.toString(),"utf-8") %>&shire=<%= java.net.URLEncoder.encode(shire.toString(),"utf-8") %>&providerId=<%= java.net.URLEncoder.encode(pid.toString(),"utf-8") %>&time=<bean:write name="time" />&cache=perm&action=selection&origin=<jsp:getProperty name="site" property="name" />">
+ <jsp:getProperty name="site"
+ property="displayName" />
+ </a>
+ </logic:notPresent>
+ </p>
+ </logic:iterate>
+
+<logic:present name="showComments" scope="Request">
+
+<!-- PROGRAMMING NOTE
+
+ We defined the ClearCache.Wayf service in wayfconfig. So we know
+ it is here. This will empty the cookie and loop -->
+
+</logic:present>
+
+ <form method="get" action="ClearCache.wayf" >
+ <div>
+ <logic:notPresent name="entityID" scope="request">
+ <input type="hidden" name="shire" value="<bean:write name="shire" />" />
+ <input type="hidden" name="target" value="<bean:write name="target" />" />
+ <input type="hidden" name="providerId" value="<bean:write name="providerId" />" />
+ <logic:present name="time" scope="request">
+ <input type="hidden" name="time" value="<bean:write name="time" />" />
+ </logic:present>
+ </logic:notPresent>
+ <logic:present name="entityID" scope="request">
+ <input type="hidden" name="entityID" value="<bean:write name="entityID" />" />
+ <input type="hidden" name="returnX" value="<bean:write name="returnX" />" />
+ <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" />
+ </logic:present>
+ <input tabindex="20" type="submit" value="Clear" />
+ </div>
+ </form>
+
+ </logic:present> <!-- Previous Selections -->
+
+<logic:present name="showComments" scope="Request">
+
+<!-- PROGRAMMING NOTE
+
+ Add the "instant serach" dialogue.
+
+</logic:present>
+
+ <div class="list">
+ <logic:present name="sites" scope="request">
+ <h2>Skriv namn på organisationen/Enter institution name:</h2>
+ <form autocomplete="OFF" action="">
+ <div>
+ <logic:notPresent name="entityID" scope="request">
+ <input type="hidden" name="shire" value="<bean:write name="shire" />" />
+ <input type="hidden" name="target" value="<bean:write name="target" />" />
+ <input type="hidden" name="providerId" value="<bean:write name="providerId" />" />
+ <logic:present name="time" scope="request">
+ <input type="hidden" name="time" value="<bean:write name="time" />" />
+ </logic:present>
+ </logic:notPresent>
+ <logic:present name="entityID" scope="request">
+ <input type="hidden" name="entityID" value="<bean:write name="entityID" />" />
+ <input type="hidden" name="returnX" value="<bean:write name="returnX" />" />
+ <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" />
+ </logic:present>
+ <input type="hidden" id="enterOrigin" name="origin" value="unspec" />
+ <input type="hidden" id="enterType" name="action" value="search" />
+ <input type="text" id="enterText" name="string" value="" tabindex="25" size="54"/>
+ <input type="submit" id="enterSubmit" value="Search"/>
+ <input type="hidden" name="cache" value="perm"/>
+ </div>
+ </form>
+ </logic:present>
+
+ <h2>
+
+<logic:present name="showComments" scope="Request">
+
+Provide a static drop down or a dynamically republished one. - you may wish to remove this code
+
+</logic:present>
+
+Eller välj från listan:/Or choose from a list:
+
+ </h2>
+
+ <logic:present name="sites" scope="request">
+ <logic:notPresent name="siteLists" scope="request">
+
+ <form method="get" action="<bean:write name="requestURL" />">
+ <div>
+ <logic:notPresent name="entityID" scope="request">
+ <input type="hidden" name="shire" value="<bean:write name="shire" />" />
+ <input type="hidden" name="target" value="<bean:write name="target" />" />
+ <input type="hidden" name="providerId" value="<bean:write name="providerId" />" />
+ <logic:present name="time" scope="request">
+ <input type="hidden" name="time" value="<bean:write name="time" />" />
+ </logic:present>
+ </logic:notPresent>
+ <logic:present name="entityID" scope="request">
+ <input type="hidden" name="entityID" value="<bean:write name="entityID" />" />
+ <input type="hidden" name="returnX" value="<bean:write name="returnX" />" />
+ <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" />
+ </logic:present>
+ <input type="hidden" name="action" value="selection" />
+ <select name="origin" id="hackForie6" tabindex="40">
+ <logic:iterate id="site" name="sites">
+ <option value="<jsp:getProperty name="site" property="name" />">
+ <jsp:getProperty name="site" property="displayName" />
+ </option>
+ </logic:iterate>
+ </select>
+ <input type="submit" value="Select" tabindex="50" />
+ <select name="cache" tabindex="60">
+ <option value="false"> Do not remember</option>
+ <option value="session" selected="selected"> Remember for session</option>
+ <option value="perm"> Remember for a week</option>
+ </select>
+ </div>
+ </form>
+ </logic:notPresent>
+ </logic:present>
+
+<logic:present name="showComments" scope="Request">
+
+<!-- PROGRAMMING NOTE
+ Build two tables side by side, one with the Federation names and 'ALL' (if apposite)
+ and the other will be dynamically populated with the members of that federation.
+
+ This needs to work in the face of no javascript, so we initially populate the
+ Right hand list with all the IdPs. The first Selection in the Left hand Table will
+ shrink this list
+
+ The 'lists of all IdPs' is derived from the one which java gives us (if it did)
+ otherwise it is derived by a double iteration through the List of Lists. This
+ makes for complicated looking code, but it's dead simple really.
+
+ -->
+
+</logic:present>
+
+ <logic:present name="siteLists" scope="request">
+ <form method="get" action="<bean:write name="requestURL" />">
+ <div>
+ <logic:notPresent name="entityID" scope="request">
+ <input type="hidden" name="shire" value="<bean:write name="shire" />" />
+ <input type="hidden" name="target" value="<bean:write name="target" />" />
+ <input type="hidden" name="providerId" value="<bean:write name="providerId" />" />
+ <logic:present name="time" scope="request">
+ <input type="hidden" name="time" value="<bean:write name="time" />" />
+ </logic:present>
+ </logic:notPresent>
+ <logic:present name="entityID" scope="request">
+ <input type="hidden" name="entityID" value="<bean:write name="entityID" />" />
+ <input type="hidden" name="returnX" value="<bean:write name="returnX" />" />
+ <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" />
+ </logic:present>
+ <table id="tab">
+ <tr>
+ <th>Federation </th>
+ <th>organization</th>
+ </tr>
+ <tr><td>
+ <select name="FedSelector" size="10" id="FedSelect" tabindex="30"
+ onchange="changedFed(this.form.origin,
+ this.form.FedSelector[this.form.FedSelector.selectedIndex].value);">
+ <logic:iterate id="siteset" name="siteLists">
+ <logic:present name="singleSiteList" scope="request">
+
+ <!-- Only One site so select it -->
+
+ <option value="<jsp:getProperty name="siteset" property="name"/>" selected="selected">
+ <jsp:getProperty name="siteset" property="name"/>
+ </option>
+ </logic:present>
+ <logic:notPresent name="singleSiteList" scope="request">
+ <option value="<jsp:getProperty name="siteset" property="name"/>">
+ <jsp:getProperty name="siteset" property="name"/>
+ </option>
+ </logic:notPresent>
+ </logic:iterate>
+ <logic:notPresent name="singleSiteList" scope="request">
+
+ <!-- More than one site so select the 'All' -->
+
+ <option value="ALL" selected="selected">
+ All Sites
+ </option>
+ </logic:notPresent>
+ </select></td><td>
+ <input type="hidden" name="action" value="selection" />
+ <select name="origin" size="10" id="originIdp" tabindex="40">
+ <logic:present name="sites" scope="request">
+ <logic:iterate id="site" name="sites">
+ <option value="<jsp:getProperty name="site" property="name" />">
+ <jsp:getProperty name="site" property="displayName" />
+ </option>
+ </logic:iterate>
+ </logic:present>
+
+ <logic:notPresent name="sites" scope="request">
+ <logic:iterate id="siteset" name="siteLists">
+ <logic:iterate id="site" name="siteset" property="sites">
+ <option value="<jsp:getProperty name="site" property="name" />">
+ <jsp:getProperty name="site" property="displayName" />
+ </option>
+ </logic:iterate>
+ </logic:iterate>
+ </logic:notPresent>
+ </select>
+ </td></tr>
+ </table>
+ <p>
+ <input type="submit" value="Select" tabindex="50" />
+ <select name="cache" tabindex="60" >
+ <option value="false"> Do not remember</option>
+ <option value="session" selected="selected"> Remember for session</option>
+ <option value="perm"> Remember for a week</option>
+ </select>
+ </p>
+ </div>
+ </form>
+ </logic:present>
+ </div>
+
+
+ <div class="search">
+
+<logic:present name="showComments" scope="Request">
+
+<!-- This is here for completeness - it shows the "old fashioned way" to do search -->
+
+ <span class="option">or</span>
+
+ <h2>Sök på nyckelord:/Search by keyword:</h2>
+
+ <form method="get" action="<bean:write name="requestURL" />">
+ <div>
+ <p>
+
+ <logic:notPresent name="entityID" scope="request">
+ <input type="hidden" name="shire" value="<bean:write name="shire" />" />
+ <input type="hidden" name="target" value="<bean:write name="target" />" />
+ <input type="hidden" name="providerId" value="<bean:write name="providerId" />" />
+ <logic:present name="time" scope="request">
+ <input type="hidden" name="time" value="<bean:write name="time" />" />
+ </logic:present>
+ </logic:notPresent>
+ <logic:present name="entityID" scope="request">
+ <input type="hidden" name="entityID" value="<bean:write name="entityID" />" />
+ <input type="hidden" name="returnX" value="<bean:write name="returnX" />" />
+ <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" />
+ </logic:present>
+
+ <input type="hidden" name="action" value="search" />
+ <input type="text" name="string" tabindex="70" />
+ <input type="submit" value="Search" tabindex="80" />
+ </p>
+ </div>
+ </form>
+
+<!-- The end of the old code. Below is where search results go 00>
+
+</logic:present>
+ <logic:present name="searchResultsEmpty" scope="request">
+ <p class="error">
+
+No provider was found that matches your search criteria, please try again.
+
+ </p>
+ </logic:present>
+
+ <logic:present name="searchresults" scope="request">
+ <h3>
+
+Search results:
+
+ </h3>
+ <form method="get" action="<bean:write name="requestURL" />">
+ <div>
+ <ul>
+ <logic:iterate id="currResult" name="searchresults">
+ <li>
+ <input type="radio" name="origin" tabindex="90" value="<jsp:getProperty name="currResult" property="name" />" />
+ <jsp:getProperty name="currResult" property="displayName" />
+ </li>
+ </logic:iterate>
+ </ul>
+ <p>
+ <logic:notPresent name="entityID" scope="request">
+ <input type="hidden" name="shire" value="<bean:write name="shire" />" />
+ <input type="hidden" name="target" value="<bean:write name="target" />" />
+ <input type="hidden" name="providerId" value="<bean:write name="providerId" />" />
+ <logic:present name="time" scope="request">
+ <input type="hidden" name="time" value="<bean:write name="time" />" />
+ </logic:present>
+ </logic:notPresent>
+ <logic:present name="entityID" scope="request">
+ <input type="hidden" name="entityID" value="<bean:write name="entityID" />" />
+ <input type="hidden" name="returnX" value="<bean:write name="returnX" />" />
+ <input type="hidden" name="returnIDParam" value="<bean:write name="returnIDParam" />" />
+ </logic:present>
+ <input type="hidden" name="action" value="selection" />
+ <input type="submit" value="Select" tabindex="100" />
+ <select name="cache" tabindex="100" >
+ <option value="false"> Do not remember</option>
+ <option value="session" selected="selected"> Remember for session</option>
+ <option value="perm"> Remember for a week</option>
+ </select>
+ </p>
+ </div>
+ </form>
+ </logic:present>
+ </div>
+ </div>
+
+ <div class="footer">
+ <p class="text">
+<!--CONFIG-->
+The <a href="http://www.swamid.se">SWAMID federation</a> is an activity of the <a href="http://www.swami.se">Swedish Alliance for Middleware Infrastructure</a>.
+<a href="http://www.swamid.se">SWAMID</a> is in part based on <a href="http://shibboleth.internet2.edu">Shibboleth</a> from <a href="http://www.internet2.edu">Internet2</a>.
+If you need assistance or require information send an e-mail to <a href="mailto:info@swamid.se?subject=WAYF+support+request">SWAMID support</a> with a description of the problem.
+ </p>
+ </div>
+
+<logic:present name="showComments" scope="Request">
+
+<!--PROGRAMMING NOTE
+
+ We need to program the on changed selector. Note that option.InnterText only
+ works on IE, options.remove doesn't work on Firefox, and that
+ options.add doesn't work on Safari. Hence the somewhat strange manipulations
+ to delete & populate the list of options.
+
+ X is the select object for the right hand table
+ Selected is the name selected in the left hand table
+
+-->
+
+</logic:present>
+
+<logic:present name="siteLists" scope="request">
+<script language="javascript" type="text/javascript">
+<!--
+
+function changedFed(X, Selected) {
+
+ <logic:notPresent name="singleSiteList" scope="request">
+
+ while (X.length > 0) {
+ X.options[(X.length-1)] = null;
+ }
+
+
+ <logic:iterate id="siteset" name="siteLists">
+ if (Selected == "<jsp:getProperty name="siteset" property="name"/>") {
+ var opt;
+ <logic:iterate id="site" name="siteset" property="sites">
+ opt = new Option ("<jsp:getProperty name="site" property="displayName" />");
+ X.options[X.length] = opt;
+ opt.value = "<jsp:getProperty name="site" property="name" />";
+ </logic:iterate>
+ }
+ </logic:iterate>
+
+ if (Selected == "ALL") {
+ var opt;
+
+ <logic:present name="sites" scope="request">
+ <logic:iterate id="site" name="sites">
+ opt = new Option("<jsp:getProperty name="site" property="displayName" />");
+ X.options[X.length] = opt;
+ opt.value = "<jsp:getProperty name="site" property="name" />";
+ </logic:iterate>
+ </logic:present>
+
+ <logic:notPresent name="sites" scope="request">
+ <logic:iterate id="siteset" name="siteLists">
+ <logic:iterate id="site" name="siteset" property="sites">
+ opt = new Option ("<jsp:getProperty name="site" property="displayName" />");
+ X.options[X.length] = opt;
+ opt.value = "<jsp:getProperty name="site" property="name" />";
+ </logic:iterate>
+ </logic:iterate>
+ </logic:notPresent>
+ }
+
+ </logic:notPresent>
+
+}
+-->
+</script>
+</logic:present>
+
+<logic:present name="sites" scope="request">
+
+<logic:present name="showComments" scope="Request">
+ <!-- Load the autosuggest code.
+
+ PROGRAMMING NOTE - the "ie6Hack" is to do with an issue in ie6 in which the
+ psuedo drop down floats below the real dropdown. The hack is that we jsut disable
+ the real drop down when the pseudo one is about. This can seem weird for some
+ layouts and so if you are not deploying against ie6 you can just send an
+ empty array.
+ -->
+</logic:present>
+ <script language="javascript" type="text/javascript" src="Suggest.js"></script>
+ <script language="javascript" type="text/javascript">
+<!--
+window.onload = function() {
+
+<logic:notPresent name="siteLists" scope="request">
+ var ie6Hack = [ document.getElementById("hackForie6")];
+</logic:notPresent>
+
+<logic:present name="siteLists" scope="request">
+ var ie6Hack = [ document.getElementById("FedSelect"), document.getElementById("originIdp")];
+</logic:present>
+ var control = new TypeAheadControl(theElements,
+ document.getElementById("enterText"),
+ document.getElementById("enterOrigin"),
+ document.getElementById("enterSubmit"),
+ document.getElementById("enterType"),
+ ie6Hack);
+
+
+ document.getElementById("enterText").focus();
+}
+
+
+var theElements = [
+ <logic:iterate id="site" name="sites">
+ ["<%= ((edu.internet2.middleware.shibboleth.wayf.IdPSite)site).getDisplayName().replace("\n","").toString() %>",
+ "<jsp:getProperty name="site" property="name" />"],
+ </logic:iterate>
+ ];
+
+-->
+ </script>
+</logic:present>
+
+
+</body>
+</html>
+
diff --git a/src/main/webapp/wayferror-sunet.jsp b/src/main/webapp/wayferror-sunet.jsp
new file mode 100644
index 0000000..1c04f72
--- /dev/null
+++ b/src/main/webapp/wayferror-sunet.jsp
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "DTD/xhtml1-strict.dtd">
+ <%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
+ <%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
+
+ <jsp:useBean id="requestURL" scope="request" class="java.lang.String"/>
+ <jsp:useBean id="errorText" scope="request" class="java.lang.String"/>
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <link rel="stylesheet" type="text/css" href="main.css" />
+ <title>Access System Failure</title>
+</head>
+
+<body>
+<div class="head">
+<img src="images/logo.jpg" alt="Logo" />
+<h1>Inter-institutional Access System Failure</h1>
+</div>
+
+<p>The inter-institutional access system experienced a technical failure.</p>
+
+<p>Please email <a href="mailto:user@domain"> administrator's name</a> and include the following error message:</p>
+
+<logic:notEmpty name="requestURL">
+<p class="error">WAYF failure at (<bean:write name="requestURL" />)</p>
+
+<p><bean:write name="errorText" /></p>
+</logic:notEmpty>
+<logic:empty name="requestURL">
+<p class="error">The DiscoveryService should not be called directly</p>
+</logic:empty>
+
+
+</body>
+</html>
diff --git a/src/main/webapp/wayferror-swamid.jsp b/src/main/webapp/wayferror-swamid.jsp
new file mode 100644
index 0000000..a0cb29d
--- /dev/null
+++ b/src/main/webapp/wayferror-swamid.jsp
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "DTD/xhtml1-strict.dtd">
+ <%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
+ <%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
+
+ <jsp:useBean id="requestURL" scope="request" class="java.lang.String"/>
+ <jsp:useBean id="errorText" scope="request" class="java.lang.String"/>
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <link rel="stylesheet" type="text/css" href="main.css" />
+ <title>Access System Failure</title>
+</head>
+
+<body>
+<div class="head">
+<img src="images/logo.jpg" alt="Logo" />
+<h1>Inter-institutional Access System Failure</h1>
+</div>
+
+<p>The inter-institutional access system experienced a technical failure.</p>
+
+<p>Please email <a href="mailto:user@domain"> administrator's name</a> and include the following error message:</p>
+
+<logic:notEmpty name="requestURL">
+<p class="error">WAYF failure at (<bean:write name="requestURL" />)</p>
+
+<p><bean:write name="errorText" /></p>
+</logic:notEmpty>
+<logic:empty name="requestURL">
+<p class="error">The DiscoveryService should not be called directly</p>
+</logic:empty>
+
+
+</body>
+</html> \ No newline at end of file