From b5c41b83249677bf1dec46de4a7ce97fee55729e Mon Sep 17 00:00:00 2001
From: Leif Johansson
Date: Thu, 3 Nov 2011 10:53:40 +0100
Subject: import 1.1.3
---
LICENSE.txt | 346 +++----
cpappend.bat | 0
doc/CREDITS.txt | 0
doc/INSTALL.txt | 14 +-
doc/README.txt | 0
doc/RELEASE-NOTES.txt | 34 +-
doc/api/allclasses-frame.html | 75 --
doc/api/allclasses-noframe.html | 75 --
doc/api/constant-values.html | 207 ----
doc/api/deprecated-list.html | 143 ---
.../common/ShibbolethConfigurationException.html | 267 -----
.../ShibbolethConfigurationException.html | 193 ----
.../shibboleth/common/package-frame.html | 33 -
.../shibboleth/common/package-summary.html | 155 ---
.../middleware/shibboleth/common/package-tree.html | 155 ---
.../middleware/shibboleth/common/package-use.html | 167 ----
.../shibboleth/wayf/DiscoveryResponseBuilder.html | 312 ------
.../shibboleth/wayf/DiscoveryResponseImpl.html | 420 --------
.../wayf/DiscoveryResponseUnmarshaller.html | 298 ------
.../shibboleth/wayf/DiscoveryServiceHandler.html | 343 -------
.../middleware/shibboleth/wayf/HandlerConfig.html | 414 --------
.../shibboleth/wayf/IdPSite.Compare.html | 270 ------
.../middleware/shibboleth/wayf/IdPSite.html | 396 --------
.../middleware/shibboleth/wayf/IdPSiteSet.html | 514 ----------
.../shibboleth/wayf/IdPSiteSetEntry.html | 286 ------
.../wayf/LogbackConfigurationChangeListener.html | 353 -------
.../shibboleth/wayf/LogbackLoggingService.html | 232 -----
.../middleware/shibboleth/wayf/Version.html | 256 -----
.../middleware/shibboleth/wayf/WayfException.html | 266 -----
.../middleware/shibboleth/wayf/WayfService.html | 316 ------
.../middleware/shibboleth/wayf/XMLConstants.html | 304 ------
.../wayf/class-use/DiscoveryResponseBuilder.html | 141 ---
.../wayf/class-use/DiscoveryResponseImpl.html | 187 ----
.../class-use/DiscoveryResponseUnmarshaller.html | 141 ---
.../wayf/class-use/DiscoveryServiceHandler.html | 141 ---
.../shibboleth/wayf/class-use/HandlerConfig.html | 203 ----
.../shibboleth/wayf/class-use/IdPSite.Compare.html | 141 ---
.../shibboleth/wayf/class-use/IdPSite.html | 447 ---------
.../shibboleth/wayf/class-use/IdPSiteSet.html | 193 ----
.../shibboleth/wayf/class-use/IdPSiteSetEntry.html | 141 ---
.../LogbackConfigurationChangeListener.html | 141 ---
.../wayf/class-use/LogbackLoggingService.html | 141 ---
.../shibboleth/wayf/class-use/Version.html | 141 ---
.../shibboleth/wayf/class-use/WayfException.html | 195 ----
.../shibboleth/wayf/class-use/WayfService.html | 141 ---
.../shibboleth/wayf/class-use/XMLConstants.html | 141 ---
.../middleware/shibboleth/wayf/package-frame.html | 70 --
.../shibboleth/wayf/package-summary.html | 223 -----
.../middleware/shibboleth/wayf/package-tree.html | 194 ----
.../middleware/shibboleth/wayf/package-use.html | 230 -----
.../middleware/shibboleth/wayf/plugins/Plugin.html | 381 --------
.../shibboleth/wayf/plugins/PluginContext.html | 179 ----
.../wayf/plugins/PluginMetadataParameter.html | 177 ----
.../wayf/plugins/WayfRequestHandled.html | 243 -----
.../shibboleth/wayf/plugins/class-use/Plugin.html | 232 -----
.../wayf/plugins/class-use/PluginContext.html | 318 ------
.../plugins/class-use/PluginMetadataParameter.html | 329 -------
.../wayf/plugins/class-use/WayfRequestHandled.html | 257 -----
.../shibboleth/wayf/plugins/package-frame.html | 48 -
.../shibboleth/wayf/plugins/package-summary.html | 179 ----
.../shibboleth/wayf/plugins/package-tree.html | 160 ---
.../shibboleth/wayf/plugins/package-use.html | 246 -----
.../wayf/plugins/provider/BindingFilter.html | 270 ------
.../wayf/plugins/provider/ListFilter.html | 278 ------
.../provider/SamlCookiePlugin.SamlIdPCookie.html | 250 -----
.../wayf/plugins/provider/SamlCookiePlugin.html | 408 --------
.../plugins/provider/class-use/BindingFilter.html | 141 ---
.../plugins/provider/class-use/ListFilter.html | 141 ---
.../class-use/SamlCookiePlugin.SamlIdPCookie.html | 141 ---
.../provider/class-use/SamlCookiePlugin.html | 141 ---
.../wayf/plugins/provider/package-frame.html | 37 -
.../wayf/plugins/provider/package-summary.html | 164 ----
.../wayf/plugins/provider/package-tree.html | 153 ---
.../wayf/plugins/provider/package-use.html | 141 ---
doc/api/help-doc.html | 220 -----
doc/api/index-all.html | 472 ---------
doc/api/index.html | 40 -
doc/api/options | 23 -
doc/api/overview-frame.html | 49 -
doc/api/overview-summary.html | 188 ----
doc/api/overview-tree.html | 201 ----
doc/api/package-list | 4 -
doc/api/packages | 4 -
doc/api/resources/inherit.gif | Bin 57 -> 0 bytes
doc/api/serialized-form.html | 261 -----
doc/api/stylesheet.css | 29 -
doc/src-xref/allclasses-frame.html | 92 --
.../common/ShibbolethConfigurationException.html | 64 --
.../shibboleth/common/package-frame.html | 24 -
.../shibboleth/common/package-summary.html | 67 --
.../shibboleth/wayf/DiscoveryResponseBuilder.html | 61 --
.../shibboleth/wayf/DiscoveryResponseImpl.html | 63 --
.../wayf/DiscoveryResponseUnmarshaller.html | 51 -
.../shibboleth/wayf/DiscoveryServiceHandler.html | 1016 --------------------
.../middleware/shibboleth/wayf/HandlerConfig.html | 236 -----
.../middleware/shibboleth/wayf/IdPSite.html | 231 -----
.../middleware/shibboleth/wayf/IdPSiteSet.html | 577 -----------
.../shibboleth/wayf/IdPSiteSetEntry.html | 71 --
.../wayf/LogbackConfigurationChangeListener.html | 86 --
.../shibboleth/wayf/LogbackLoggingService.html | 78 --
.../middleware/shibboleth/wayf/Version.html | 45 -
.../middleware/shibboleth/wayf/WayfException.html | 61 --
.../middleware/shibboleth/wayf/WayfService.html | 332 -------
.../middleware/shibboleth/wayf/XMLConstants.html | 47 -
.../middleware/shibboleth/wayf/package-frame.html | 66 --
.../shibboleth/wayf/package-summary.html | 137 ---
.../middleware/shibboleth/wayf/plugins/Plugin.html | 173 ----
.../shibboleth/wayf/plugins/PluginContext.html | 45 -
.../wayf/plugins/PluginMetadataParameter.html | 44 -
.../wayf/plugins/WayfRequestHandled.html | 31 -
.../shibboleth/wayf/plugins/package-frame.html | 33 -
.../shibboleth/wayf/plugins/package-summary.html | 82 --
.../wayf/plugins/provider/BindingFilter.html | 190 ----
.../wayf/plugins/provider/ListFilter.html | 198 ----
.../wayf/plugins/provider/SamlCookiePlugin.html | 558 -----------
.../wayf/plugins/provider/package-frame.html | 36 -
.../wayf/plugins/provider/package-summary.html | 87 --
doc/src-xref/index.html | 24 -
doc/src-xref/overview-frame.html | 34 -
doc/src-xref/overview-summary.html | 79 --
doc/src-xref/stylesheet.css | 116 ---
doc/style/checkstyle.html | 55 --
doc/style/css/maven-base.css | 140 ---
doc/style/css/maven-theme.css | 110 ---
doc/style/css/print.css | 7 -
doc/style/images/add.gif | Bin 207 -> 0 bytes
doc/style/images/collapsed.gif | Bin 53 -> 0 bytes
doc/style/images/expanded.gif | Bin 52 -> 0 bytes
doc/style/images/external-classic.png | Bin 956 -> 0 bytes
doc/style/images/external.png | Bin 230 -> 0 bytes
doc/style/images/file.gif | Bin 152 -> 0 bytes
doc/style/images/fix.gif | Bin 181 -> 0 bytes
doc/style/images/folder-closed.gif | Bin 220 -> 0 bytes
doc/style/images/folder-open.gif | Bin 229 -> 0 bytes
doc/style/images/help_logo.gif | Bin 2113 -> 0 bytes
doc/style/images/icon_alert.gif | Bin 1120 -> 0 bytes
doc/style/images/icon_alertsml.gif | Bin 154 -> 0 bytes
doc/style/images/icon_arrowfolder1_sml.gif | Bin 1082 -> 0 bytes
doc/style/images/icon_arrowfolder2_sml.gif | Bin 1080 -> 0 bytes
doc/style/images/icon_arrowfolderclosed1_sml.gif | Bin 441 -> 0 bytes
doc/style/images/icon_arrowfolderopen2_sml.gif | Bin 664 -> 0 bytes
doc/style/images/icon_arrowmembers1_sml.gif | Bin 1073 -> 0 bytes
doc/style/images/icon_arrowmembers2_sml.gif | Bin 1072 -> 0 bytes
doc/style/images/icon_arrowusergroups1_sml.gif | Bin 1072 -> 0 bytes
doc/style/images/icon_arrowusergroups2_sml.gif | Bin 1076 -> 0 bytes
doc/style/images/icon_arrowwaste1_sml.gif | Bin 606 -> 0 bytes
doc/style/images/icon_arrowwaste2_sml.gif | Bin 609 -> 0 bytes
doc/style/images/icon_confirmsml.gif | Bin 94 -> 0 bytes
doc/style/images/icon_doc_lrg.gif | Bin 1335 -> 0 bytes
doc/style/images/icon_doc_sml.gif | Bin 355 -> 0 bytes
doc/style/images/icon_error_lrg.gif | Bin 1531 -> 0 bytes
doc/style/images/icon_error_sml.gif | Bin 1010 -> 0 bytes
doc/style/images/icon_folder_lrg.gif | Bin 1548 -> 0 bytes
doc/style/images/icon_folder_sml.gif | Bin 634 -> 0 bytes
doc/style/images/icon_help_lrg.gif | Bin 1418 -> 0 bytes
doc/style/images/icon_help_sml.gif | Bin 1019 -> 0 bytes
doc/style/images/icon_info_lrg.gif | Bin 1383 -> 0 bytes
doc/style/images/icon_info_sml.gif | Bin 606 -> 0 bytes
doc/style/images/icon_infosml.gif | Bin 77 -> 0 bytes
doc/style/images/icon_members_lrg.gif | Bin 1570 -> 0 bytes
doc/style/images/icon_members_sml.gif | Bin 1023 -> 0 bytes
doc/style/images/icon_sortdown.gif | Bin 117 -> 0 bytes
doc/style/images/icon_sortleft.gif | Bin 121 -> 0 bytes
doc/style/images/icon_sortright.gif | Bin 122 -> 0 bytes
doc/style/images/icon_sortup.gif | Bin 117 -> 0 bytes
doc/style/images/icon_success_lrg.gif | Bin 1492 -> 0 bytes
doc/style/images/icon_success_sml.gif | Bin 990 -> 0 bytes
doc/style/images/icon_usergroups_lrg.gif | Bin 1520 -> 0 bytes
doc/style/images/icon_usergroups_sml.gif | Bin 1026 -> 0 bytes
doc/style/images/icon_warning_lrg.gif | Bin 1491 -> 0 bytes
doc/style/images/icon_warning_sml.gif | Bin 576 -> 0 bytes
doc/style/images/icon_waste_lrg.gif | Bin 780 -> 0 bytes
doc/style/images/icon_waste_sml.gif | Bin 562 -> 0 bytes
doc/style/images/logos/maven-feather.png | Bin 2907 -> 0 bytes
doc/style/images/newwindow-classic.png | Bin 951 -> 0 bytes
doc/style/images/newwindow.png | Bin 220 -> 0 bytes
doc/style/images/none.png | Bin 946 -> 0 bytes
doc/style/images/nw_maj.gif | Bin 49 -> 0 bytes
doc/style/images/nw_maj_hi.gif | Bin 51 -> 0 bytes
doc/style/images/nw_maj_rond.gif | Bin 51 -> 0 bytes
doc/style/images/nw_med.gif | Bin 48 -> 0 bytes
doc/style/images/nw_med_hi.gif | Bin 47 -> 0 bytes
doc/style/images/nw_med_rond.gif | Bin 46 -> 0 bytes
doc/style/images/nw_min.gif | Bin 51 -> 0 bytes
doc/style/images/nw_min_036.gif | Bin 45 -> 0 bytes
doc/style/images/nw_min_hi.gif | Bin 46 -> 0 bytes
doc/style/images/pdf.gif | Bin 950 -> 0 bytes
doc/style/images/poweredby_036.gif | Bin 808 -> 0 bytes
doc/style/images/product_logo.gif | Bin 680 -> 0 bytes
doc/style/images/remove.gif | Bin 227 -> 0 bytes
doc/style/images/rss.png | Bin 360 -> 0 bytes
doc/style/images/se_maj_rond.gif | Bin 50 -> 0 bytes
doc/style/images/strich.gif | Bin 43 -> 0 bytes
doc/style/images/sw_maj_rond.gif | Bin 51 -> 0 bytes
doc/style/images/sw_med_rond.gif | Bin 46 -> 0 bytes
doc/style/images/sw_min.gif | Bin 45 -> 0 bytes
doc/style/images/update.gif | Bin 192 -> 0 bytes
doc/unitTest/css/maven-base.css | 140 ---
doc/unitTest/css/maven-theme.css | 110 ---
doc/unitTest/css/print.css | 7 -
doc/unitTest/images/add.gif | Bin 207 -> 0 bytes
doc/unitTest/images/collapsed.gif | Bin 53 -> 0 bytes
doc/unitTest/images/expanded.gif | Bin 52 -> 0 bytes
doc/unitTest/images/external-classic.png | Bin 956 -> 0 bytes
doc/unitTest/images/external.png | Bin 230 -> 0 bytes
doc/unitTest/images/file.gif | Bin 152 -> 0 bytes
doc/unitTest/images/fix.gif | Bin 181 -> 0 bytes
doc/unitTest/images/folder-closed.gif | Bin 220 -> 0 bytes
doc/unitTest/images/folder-open.gif | Bin 229 -> 0 bytes
doc/unitTest/images/help_logo.gif | Bin 2113 -> 0 bytes
doc/unitTest/images/icon_alert.gif | Bin 1120 -> 0 bytes
doc/unitTest/images/icon_alertsml.gif | Bin 154 -> 0 bytes
doc/unitTest/images/icon_arrowfolder1_sml.gif | Bin 1082 -> 0 bytes
doc/unitTest/images/icon_arrowfolder2_sml.gif | Bin 1080 -> 0 bytes
.../images/icon_arrowfolderclosed1_sml.gif | Bin 441 -> 0 bytes
doc/unitTest/images/icon_arrowfolderopen2_sml.gif | Bin 664 -> 0 bytes
doc/unitTest/images/icon_arrowmembers1_sml.gif | Bin 1073 -> 0 bytes
doc/unitTest/images/icon_arrowmembers2_sml.gif | Bin 1072 -> 0 bytes
doc/unitTest/images/icon_arrowusergroups1_sml.gif | Bin 1072 -> 0 bytes
doc/unitTest/images/icon_arrowusergroups2_sml.gif | Bin 1076 -> 0 bytes
doc/unitTest/images/icon_arrowwaste1_sml.gif | Bin 606 -> 0 bytes
doc/unitTest/images/icon_arrowwaste2_sml.gif | Bin 609 -> 0 bytes
doc/unitTest/images/icon_confirmsml.gif | Bin 94 -> 0 bytes
doc/unitTest/images/icon_doc_lrg.gif | Bin 1335 -> 0 bytes
doc/unitTest/images/icon_doc_sml.gif | Bin 355 -> 0 bytes
doc/unitTest/images/icon_error_lrg.gif | Bin 1531 -> 0 bytes
doc/unitTest/images/icon_error_sml.gif | Bin 1010 -> 0 bytes
doc/unitTest/images/icon_folder_lrg.gif | Bin 1548 -> 0 bytes
doc/unitTest/images/icon_folder_sml.gif | Bin 634 -> 0 bytes
doc/unitTest/images/icon_help_lrg.gif | Bin 1418 -> 0 bytes
doc/unitTest/images/icon_help_sml.gif | Bin 1019 -> 0 bytes
doc/unitTest/images/icon_info_lrg.gif | Bin 1383 -> 0 bytes
doc/unitTest/images/icon_info_sml.gif | Bin 606 -> 0 bytes
doc/unitTest/images/icon_infosml.gif | Bin 77 -> 0 bytes
doc/unitTest/images/icon_members_lrg.gif | Bin 1570 -> 0 bytes
doc/unitTest/images/icon_members_sml.gif | Bin 1023 -> 0 bytes
doc/unitTest/images/icon_sortdown.gif | Bin 117 -> 0 bytes
doc/unitTest/images/icon_sortleft.gif | Bin 121 -> 0 bytes
doc/unitTest/images/icon_sortright.gif | Bin 122 -> 0 bytes
doc/unitTest/images/icon_sortup.gif | Bin 117 -> 0 bytes
doc/unitTest/images/icon_success_lrg.gif | Bin 1492 -> 0 bytes
doc/unitTest/images/icon_success_sml.gif | Bin 990 -> 0 bytes
doc/unitTest/images/icon_usergroups_lrg.gif | Bin 1520 -> 0 bytes
doc/unitTest/images/icon_usergroups_sml.gif | Bin 1026 -> 0 bytes
doc/unitTest/images/icon_warning_lrg.gif | Bin 1491 -> 0 bytes
doc/unitTest/images/icon_warning_sml.gif | Bin 576 -> 0 bytes
doc/unitTest/images/icon_waste_lrg.gif | Bin 780 -> 0 bytes
doc/unitTest/images/icon_waste_sml.gif | Bin 562 -> 0 bytes
doc/unitTest/images/logos/maven-feather.png | Bin 2907 -> 0 bytes
doc/unitTest/images/newwindow-classic.png | Bin 951 -> 0 bytes
doc/unitTest/images/newwindow.png | Bin 220 -> 0 bytes
doc/unitTest/images/none.png | Bin 946 -> 0 bytes
doc/unitTest/images/nw_maj.gif | Bin 49 -> 0 bytes
doc/unitTest/images/nw_maj_hi.gif | Bin 51 -> 0 bytes
doc/unitTest/images/nw_maj_rond.gif | Bin 51 -> 0 bytes
doc/unitTest/images/nw_med.gif | Bin 48 -> 0 bytes
doc/unitTest/images/nw_med_hi.gif | Bin 47 -> 0 bytes
doc/unitTest/images/nw_med_rond.gif | Bin 46 -> 0 bytes
doc/unitTest/images/nw_min.gif | Bin 51 -> 0 bytes
doc/unitTest/images/nw_min_036.gif | Bin 45 -> 0 bytes
doc/unitTest/images/nw_min_hi.gif | Bin 46 -> 0 bytes
doc/unitTest/images/pdf.gif | Bin 950 -> 0 bytes
doc/unitTest/images/poweredby_036.gif | Bin 808 -> 0 bytes
doc/unitTest/images/product_logo.gif | Bin 680 -> 0 bytes
doc/unitTest/images/remove.gif | Bin 227 -> 0 bytes
doc/unitTest/images/se_maj_rond.gif | Bin 50 -> 0 bytes
doc/unitTest/images/strich.gif | Bin 43 -> 0 bytes
doc/unitTest/images/sw_maj_rond.gif | Bin 51 -> 0 bytes
doc/unitTest/images/sw_med_rond.gif | Bin 46 -> 0 bytes
doc/unitTest/images/sw_min.gif | Bin 45 -> 0 bytes
doc/unitTest/images/update.gif | Bin 192 -> 0 bytes
doc/unitTest/surefire-report.html | 69 --
endorsed/resolver-2.9.1.jar | Bin 84091 -> 0 bytes
endorsed/serializer-2.9.1.jar | Bin 278286 -> 0 bytes
endorsed/xalan-2.7.1.jar | Bin 3176148 -> 0 bytes
endorsed/xercesImpl-2.9.1.jar | Bin 1229289 -> 0 bytes
endorsed/xml-apis-2.9.1.jar | Bin 194354 -> 0 bytes
install.bat | 0
install.sh | 0
lib/bcprov-ext-jdk15-1.40.jar | Bin 1603682 -> 0 bytes
lib/bcprov-jdk15-1.45.jar | Bin 0 -> 1663318 bytes
lib/endorsed/serializer-2.10.0.jar | Bin 0 -> 278286 bytes
lib/endorsed/xalan-2.7.1.jar | Bin 0 -> 3176148 bytes
lib/endorsed/xercesImpl-2.10.0.jar | Bin 0 -> 1363159 bytes
lib/endorsed/xml-apis-2.10.0.jar | Bin 0 -> 220536 bytes
lib/endorsed/xml-resolver-1.2.jar | Bin 0 -> 84091 bytes
lib/esapi-2.0GA.jar | Bin 0 -> 367204 bytes
lib/jargs-1.0.jar | Bin 11406 -> 0 bytes
lib/jcl-over-slf4j-1.5.5.jar | Bin 16746 -> 0 bytes
lib/jcl-over-slf4j-1.6.1.jar | Bin 0 -> 17308 bytes
lib/joda-time-1.5.2.jar | Bin 531326 -> 0 bytes
lib/joda-time-1.6.2.jar | Bin 0 -> 543044 bytes
lib/jul-to-slf4j-1.6.1.jar | Bin 0 -> 4463 bytes
lib/log4j-over-slf4j-1.5.5.jar | Bin 9665 -> 0 bytes
lib/log4j-over-slf4j-1.6.1.jar | Bin 0 -> 12359 bytes
lib/logback-classic-0.9.13.jar | Bin 146846 -> 0 bytes
lib/logback-classic-0.9.29.jar | Bin 0 -> 243718 bytes
lib/logback-core-0.9.13.jar | Bin 219456 -> 0 bytes
lib/logback-core-0.9.29.jar | Bin 0 -> 315256 bytes
lib/not-yet-commons-ssl-0.3.9.jar | Bin 260555 -> 258278 bytes
lib/opensaml-2.2.3.jar | Bin 1249375 -> 0 bytes
lib/opensaml-2.5.1.jar | Bin 0 -> 1352932 bytes
lib/openws-1.2.2.jar | Bin 119232 -> 0 bytes
lib/openws-1.4.2.jar | Bin 0 -> 569051 bytes
lib/shibboleth-discovery-service-1.1.0.jar | Bin 56599 -> 0 bytes
lib/shibboleth-discovery-service-1.1.3.jar | Bin 0 -> 56721 bytes
lib/slf4j-api-1.5.6.jar | Bin 22338 -> 0 bytes
lib/slf4j-api-1.6.1.jar | Bin 0 -> 25496 bytes
lib/xmlsec-1.4.2.jar | Bin 444503 -> 0 bytes
lib/xmlsec-1.4.5.jar | Bin 0 -> 450950 bytes
lib/xmltooling-1.2.0.jar | Bin 577978 -> 0 bytes
lib/xmltooling-1.3.2.jar | Bin 0 -> 614120 bytes
src/installer/lib/ant-extensions-13Apr2008.jar | Bin 0 -> 21017 bytes
src/installer/lib/bcprov-jdk15-1.45.jar | Bin 0 -> 1663318 bytes
src/installer/resources/build.xml | 70 +-
src/installer/resources/install.properties | 2 +-
src/installer/resources/logging.xml | 25 +-
src/installer/resources/wayfconfig.xml | 90 +-
src/main/webapp/Suggest.js | 362 +++++++
src/main/webapp/WEB-INF/tlds/struts-bean.tld | 0
src/main/webapp/WEB-INF/tlds/struts-logic.tld | 0
src/main/webapp/WEB-INF/web.xml | 97 +-
src/main/webapp/images/incommon.gif | Bin
src/main/webapp/images/internet2.gif | Bin
src/main/webapp/images/logo.jpg | Bin
src/main/webapp/index.htm | 0
src/main/webapp/static.html | 163 ++++
src/main/webapp/static2.html | 160 +++
src/main/webapp/wayf.css | 18 +
src/main/webapp/wayf.jsp | 125 ++-
src/main/webapp/wayferror.jsp | 4 +-
331 files changed, 1156 insertions(+), 22434 deletions(-)
mode change 100644 => 100755 LICENSE.txt
mode change 100644 => 100755 cpappend.bat
mode change 100644 => 100755 doc/CREDITS.txt
mode change 100644 => 100755 doc/INSTALL.txt
mode change 100644 => 100755 doc/README.txt
mode change 100644 => 100755 doc/RELEASE-NOTES.txt
delete mode 100644 doc/api/allclasses-frame.html
delete mode 100644 doc/api/allclasses-noframe.html
delete mode 100644 doc/api/constant-values.html
delete mode 100644 doc/api/deprecated-list.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/common/ShibbolethConfigurationException.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/common/class-use/ShibbolethConfigurationException.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/common/package-frame.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/common/package-summary.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/common/package-tree.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/common/package-use.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/DiscoveryResponseBuilder.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/DiscoveryResponseImpl.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/DiscoveryResponseUnmarshaller.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/DiscoveryServiceHandler.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/HandlerConfig.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/IdPSite.Compare.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/IdPSite.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/IdPSiteSet.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/IdPSiteSetEntry.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/LogbackConfigurationChangeListener.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/LogbackLoggingService.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/Version.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/WayfException.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/WayfService.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/XMLConstants.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/class-use/DiscoveryResponseBuilder.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/class-use/DiscoveryResponseImpl.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/class-use/DiscoveryResponseUnmarshaller.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/class-use/DiscoveryServiceHandler.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/class-use/HandlerConfig.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/class-use/IdPSite.Compare.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/class-use/IdPSite.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/class-use/IdPSiteSet.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/class-use/IdPSiteSetEntry.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/class-use/LogbackConfigurationChangeListener.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/class-use/LogbackLoggingService.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/class-use/Version.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/class-use/WayfException.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/class-use/WayfService.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/class-use/XMLConstants.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/package-frame.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/package-summary.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/package-tree.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/package-use.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/Plugin.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/PluginContext.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/PluginMetadataParameter.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/WayfRequestHandled.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/class-use/Plugin.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/class-use/PluginContext.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/class-use/PluginMetadataParameter.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/class-use/WayfRequestHandled.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/package-frame.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/package-summary.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/package-tree.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/package-use.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/provider/BindingFilter.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/provider/ListFilter.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/provider/SamlCookiePlugin.SamlIdPCookie.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/provider/SamlCookiePlugin.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/provider/class-use/BindingFilter.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/provider/class-use/ListFilter.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/provider/class-use/SamlCookiePlugin.SamlIdPCookie.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/provider/class-use/SamlCookiePlugin.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/provider/package-frame.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/provider/package-summary.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/provider/package-tree.html
delete mode 100644 doc/api/edu/internet2/middleware/shibboleth/wayf/plugins/provider/package-use.html
delete mode 100644 doc/api/help-doc.html
delete mode 100644 doc/api/index-all.html
delete mode 100644 doc/api/index.html
delete mode 100644 doc/api/options
delete mode 100644 doc/api/overview-frame.html
delete mode 100644 doc/api/overview-summary.html
delete mode 100644 doc/api/overview-tree.html
delete mode 100644 doc/api/package-list
delete mode 100644 doc/api/packages
delete mode 100644 doc/api/resources/inherit.gif
delete mode 100644 doc/api/serialized-form.html
delete mode 100644 doc/api/stylesheet.css
delete mode 100644 doc/src-xref/allclasses-frame.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/common/ShibbolethConfigurationException.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/common/package-frame.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/common/package-summary.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/DiscoveryResponseBuilder.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/DiscoveryResponseImpl.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/DiscoveryResponseUnmarshaller.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/DiscoveryServiceHandler.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/HandlerConfig.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/IdPSite.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/IdPSiteSet.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/IdPSiteSetEntry.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/LogbackConfigurationChangeListener.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/LogbackLoggingService.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/Version.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/WayfException.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/WayfService.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/XMLConstants.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/package-frame.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/package-summary.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/plugins/Plugin.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/plugins/PluginContext.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/plugins/PluginMetadataParameter.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/plugins/WayfRequestHandled.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/plugins/package-frame.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/plugins/package-summary.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/plugins/provider/BindingFilter.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/plugins/provider/ListFilter.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/plugins/provider/SamlCookiePlugin.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/plugins/provider/package-frame.html
delete mode 100644 doc/src-xref/edu/internet2/middleware/shibboleth/wayf/plugins/provider/package-summary.html
delete mode 100644 doc/src-xref/index.html
delete mode 100644 doc/src-xref/overview-frame.html
delete mode 100644 doc/src-xref/overview-summary.html
delete mode 100644 doc/src-xref/stylesheet.css
delete mode 100644 doc/style/checkstyle.html
delete mode 100644 doc/style/css/maven-base.css
delete mode 100644 doc/style/css/maven-theme.css
delete mode 100644 doc/style/css/print.css
delete mode 100644 doc/style/images/add.gif
delete mode 100644 doc/style/images/collapsed.gif
delete mode 100644 doc/style/images/expanded.gif
delete mode 100644 doc/style/images/external-classic.png
delete mode 100644 doc/style/images/external.png
delete mode 100644 doc/style/images/file.gif
delete mode 100644 doc/style/images/fix.gif
delete mode 100644 doc/style/images/folder-closed.gif
delete mode 100644 doc/style/images/folder-open.gif
delete mode 100644 doc/style/images/help_logo.gif
delete mode 100644 doc/style/images/icon_alert.gif
delete mode 100644 doc/style/images/icon_alertsml.gif
delete mode 100644 doc/style/images/icon_arrowfolder1_sml.gif
delete mode 100644 doc/style/images/icon_arrowfolder2_sml.gif
delete mode 100644 doc/style/images/icon_arrowfolderclosed1_sml.gif
delete mode 100644 doc/style/images/icon_arrowfolderopen2_sml.gif
delete mode 100644 doc/style/images/icon_arrowmembers1_sml.gif
delete mode 100644 doc/style/images/icon_arrowmembers2_sml.gif
delete mode 100644 doc/style/images/icon_arrowusergroups1_sml.gif
delete mode 100644 doc/style/images/icon_arrowusergroups2_sml.gif
delete mode 100644 doc/style/images/icon_arrowwaste1_sml.gif
delete mode 100644 doc/style/images/icon_arrowwaste2_sml.gif
delete mode 100644 doc/style/images/icon_confirmsml.gif
delete mode 100644 doc/style/images/icon_doc_lrg.gif
delete mode 100644 doc/style/images/icon_doc_sml.gif
delete mode 100644 doc/style/images/icon_error_lrg.gif
delete mode 100644 doc/style/images/icon_error_sml.gif
delete mode 100644 doc/style/images/icon_folder_lrg.gif
delete mode 100644 doc/style/images/icon_folder_sml.gif
delete mode 100644 doc/style/images/icon_help_lrg.gif
delete mode 100644 doc/style/images/icon_help_sml.gif
delete mode 100644 doc/style/images/icon_info_lrg.gif
delete mode 100644 doc/style/images/icon_info_sml.gif
delete mode 100644 doc/style/images/icon_infosml.gif
delete mode 100644 doc/style/images/icon_members_lrg.gif
delete mode 100644 doc/style/images/icon_members_sml.gif
delete mode 100644 doc/style/images/icon_sortdown.gif
delete mode 100644 doc/style/images/icon_sortleft.gif
delete mode 100644 doc/style/images/icon_sortright.gif
delete mode 100644 doc/style/images/icon_sortup.gif
delete mode 100644 doc/style/images/icon_success_lrg.gif
delete mode 100644 doc/style/images/icon_success_sml.gif
delete mode 100644 doc/style/images/icon_usergroups_lrg.gif
delete mode 100644 doc/style/images/icon_usergroups_sml.gif
delete mode 100644 doc/style/images/icon_warning_lrg.gif
delete mode 100644 doc/style/images/icon_warning_sml.gif
delete mode 100644 doc/style/images/icon_waste_lrg.gif
delete mode 100644 doc/style/images/icon_waste_sml.gif
delete mode 100644 doc/style/images/logos/maven-feather.png
delete mode 100644 doc/style/images/newwindow-classic.png
delete mode 100644 doc/style/images/newwindow.png
delete mode 100644 doc/style/images/none.png
delete mode 100644 doc/style/images/nw_maj.gif
delete mode 100644 doc/style/images/nw_maj_hi.gif
delete mode 100644 doc/style/images/nw_maj_rond.gif
delete mode 100644 doc/style/images/nw_med.gif
delete mode 100644 doc/style/images/nw_med_hi.gif
delete mode 100644 doc/style/images/nw_med_rond.gif
delete mode 100644 doc/style/images/nw_min.gif
delete mode 100644 doc/style/images/nw_min_036.gif
delete mode 100644 doc/style/images/nw_min_hi.gif
delete mode 100644 doc/style/images/pdf.gif
delete mode 100644 doc/style/images/poweredby_036.gif
delete mode 100644 doc/style/images/product_logo.gif
delete mode 100644 doc/style/images/remove.gif
delete mode 100644 doc/style/images/rss.png
delete mode 100644 doc/style/images/se_maj_rond.gif
delete mode 100644 doc/style/images/strich.gif
delete mode 100644 doc/style/images/sw_maj_rond.gif
delete mode 100644 doc/style/images/sw_med_rond.gif
delete mode 100644 doc/style/images/sw_min.gif
delete mode 100644 doc/style/images/update.gif
delete mode 100644 doc/unitTest/css/maven-base.css
delete mode 100644 doc/unitTest/css/maven-theme.css
delete mode 100644 doc/unitTest/css/print.css
delete mode 100644 doc/unitTest/images/add.gif
delete mode 100644 doc/unitTest/images/collapsed.gif
delete mode 100644 doc/unitTest/images/expanded.gif
delete mode 100644 doc/unitTest/images/external-classic.png
delete mode 100644 doc/unitTest/images/external.png
delete mode 100644 doc/unitTest/images/file.gif
delete mode 100644 doc/unitTest/images/fix.gif
delete mode 100644 doc/unitTest/images/folder-closed.gif
delete mode 100644 doc/unitTest/images/folder-open.gif
delete mode 100644 doc/unitTest/images/help_logo.gif
delete mode 100644 doc/unitTest/images/icon_alert.gif
delete mode 100644 doc/unitTest/images/icon_alertsml.gif
delete mode 100644 doc/unitTest/images/icon_arrowfolder1_sml.gif
delete mode 100644 doc/unitTest/images/icon_arrowfolder2_sml.gif
delete mode 100644 doc/unitTest/images/icon_arrowfolderclosed1_sml.gif
delete mode 100644 doc/unitTest/images/icon_arrowfolderopen2_sml.gif
delete mode 100644 doc/unitTest/images/icon_arrowmembers1_sml.gif
delete mode 100644 doc/unitTest/images/icon_arrowmembers2_sml.gif
delete mode 100644 doc/unitTest/images/icon_arrowusergroups1_sml.gif
delete mode 100644 doc/unitTest/images/icon_arrowusergroups2_sml.gif
delete mode 100644 doc/unitTest/images/icon_arrowwaste1_sml.gif
delete mode 100644 doc/unitTest/images/icon_arrowwaste2_sml.gif
delete mode 100644 doc/unitTest/images/icon_confirmsml.gif
delete mode 100644 doc/unitTest/images/icon_doc_lrg.gif
delete mode 100644 doc/unitTest/images/icon_doc_sml.gif
delete mode 100644 doc/unitTest/images/icon_error_lrg.gif
delete mode 100644 doc/unitTest/images/icon_error_sml.gif
delete mode 100644 doc/unitTest/images/icon_folder_lrg.gif
delete mode 100644 doc/unitTest/images/icon_folder_sml.gif
delete mode 100644 doc/unitTest/images/icon_help_lrg.gif
delete mode 100644 doc/unitTest/images/icon_help_sml.gif
delete mode 100644 doc/unitTest/images/icon_info_lrg.gif
delete mode 100644 doc/unitTest/images/icon_info_sml.gif
delete mode 100644 doc/unitTest/images/icon_infosml.gif
delete mode 100644 doc/unitTest/images/icon_members_lrg.gif
delete mode 100644 doc/unitTest/images/icon_members_sml.gif
delete mode 100644 doc/unitTest/images/icon_sortdown.gif
delete mode 100644 doc/unitTest/images/icon_sortleft.gif
delete mode 100644 doc/unitTest/images/icon_sortright.gif
delete mode 100644 doc/unitTest/images/icon_sortup.gif
delete mode 100644 doc/unitTest/images/icon_success_lrg.gif
delete mode 100644 doc/unitTest/images/icon_success_sml.gif
delete mode 100644 doc/unitTest/images/icon_usergroups_lrg.gif
delete mode 100644 doc/unitTest/images/icon_usergroups_sml.gif
delete mode 100644 doc/unitTest/images/icon_warning_lrg.gif
delete mode 100644 doc/unitTest/images/icon_warning_sml.gif
delete mode 100644 doc/unitTest/images/icon_waste_lrg.gif
delete mode 100644 doc/unitTest/images/icon_waste_sml.gif
delete mode 100644 doc/unitTest/images/logos/maven-feather.png
delete mode 100644 doc/unitTest/images/newwindow-classic.png
delete mode 100644 doc/unitTest/images/newwindow.png
delete mode 100644 doc/unitTest/images/none.png
delete mode 100644 doc/unitTest/images/nw_maj.gif
delete mode 100644 doc/unitTest/images/nw_maj_hi.gif
delete mode 100644 doc/unitTest/images/nw_maj_rond.gif
delete mode 100644 doc/unitTest/images/nw_med.gif
delete mode 100644 doc/unitTest/images/nw_med_hi.gif
delete mode 100644 doc/unitTest/images/nw_med_rond.gif
delete mode 100644 doc/unitTest/images/nw_min.gif
delete mode 100644 doc/unitTest/images/nw_min_036.gif
delete mode 100644 doc/unitTest/images/nw_min_hi.gif
delete mode 100644 doc/unitTest/images/pdf.gif
delete mode 100644 doc/unitTest/images/poweredby_036.gif
delete mode 100644 doc/unitTest/images/product_logo.gif
delete mode 100644 doc/unitTest/images/remove.gif
delete mode 100644 doc/unitTest/images/se_maj_rond.gif
delete mode 100644 doc/unitTest/images/strich.gif
delete mode 100644 doc/unitTest/images/sw_maj_rond.gif
delete mode 100644 doc/unitTest/images/sw_med_rond.gif
delete mode 100644 doc/unitTest/images/sw_min.gif
delete mode 100644 doc/unitTest/images/update.gif
delete mode 100644 doc/unitTest/surefire-report.html
delete mode 100644 endorsed/resolver-2.9.1.jar
delete mode 100644 endorsed/serializer-2.9.1.jar
delete mode 100644 endorsed/xalan-2.7.1.jar
delete mode 100644 endorsed/xercesImpl-2.9.1.jar
delete mode 100644 endorsed/xml-apis-2.9.1.jar
mode change 100644 => 100755 install.bat
mode change 100644 => 100755 install.sh
delete mode 100644 lib/bcprov-ext-jdk15-1.40.jar
create mode 100644 lib/bcprov-jdk15-1.45.jar
create mode 100644 lib/endorsed/serializer-2.10.0.jar
create mode 100644 lib/endorsed/xalan-2.7.1.jar
create mode 100644 lib/endorsed/xercesImpl-2.10.0.jar
create mode 100644 lib/endorsed/xml-apis-2.10.0.jar
create mode 100644 lib/endorsed/xml-resolver-1.2.jar
create mode 100644 lib/esapi-2.0GA.jar
delete mode 100644 lib/jargs-1.0.jar
delete mode 100644 lib/jcl-over-slf4j-1.5.5.jar
create mode 100644 lib/jcl-over-slf4j-1.6.1.jar
delete mode 100644 lib/joda-time-1.5.2.jar
create mode 100644 lib/joda-time-1.6.2.jar
create mode 100644 lib/jul-to-slf4j-1.6.1.jar
delete mode 100644 lib/log4j-over-slf4j-1.5.5.jar
create mode 100644 lib/log4j-over-slf4j-1.6.1.jar
delete mode 100644 lib/logback-classic-0.9.13.jar
create mode 100644 lib/logback-classic-0.9.29.jar
delete mode 100644 lib/logback-core-0.9.13.jar
create mode 100644 lib/logback-core-0.9.29.jar
delete mode 100644 lib/opensaml-2.2.3.jar
create mode 100644 lib/opensaml-2.5.1.jar
delete mode 100644 lib/openws-1.2.2.jar
create mode 100644 lib/openws-1.4.2.jar
delete mode 100644 lib/shibboleth-discovery-service-1.1.0.jar
create mode 100644 lib/shibboleth-discovery-service-1.1.3.jar
delete mode 100644 lib/slf4j-api-1.5.6.jar
create mode 100644 lib/slf4j-api-1.6.1.jar
delete mode 100644 lib/xmlsec-1.4.2.jar
create mode 100644 lib/xmlsec-1.4.5.jar
delete mode 100644 lib/xmltooling-1.2.0.jar
create mode 100644 lib/xmltooling-1.3.2.jar
create mode 100644 src/installer/lib/ant-extensions-13Apr2008.jar
create mode 100644 src/installer/lib/bcprov-jdk15-1.45.jar
mode change 100644 => 100755 src/installer/resources/build.xml
mode change 100644 => 100755 src/installer/resources/install.properties
mode change 100644 => 100755 src/installer/resources/logging.xml
mode change 100644 => 100755 src/installer/resources/wayfconfig.xml
create mode 100755 src/main/webapp/Suggest.js
mode change 100644 => 100755 src/main/webapp/WEB-INF/tlds/struts-bean.tld
mode change 100644 => 100755 src/main/webapp/WEB-INF/tlds/struts-logic.tld
mode change 100644 => 100755 src/main/webapp/WEB-INF/web.xml
mode change 100644 => 100755 src/main/webapp/images/incommon.gif
mode change 100644 => 100755 src/main/webapp/images/internet2.gif
mode change 100644 => 100755 src/main/webapp/images/logo.jpg
mode change 100644 => 100755 src/main/webapp/index.htm
create mode 100755 src/main/webapp/static.html
create mode 100755 src/main/webapp/static2.html
mode change 100644 => 100755 src/main/webapp/wayf.css
mode change 100644 => 100755 src/main/webapp/wayf.jsp
mode change 100644 => 100755 src/main/webapp/wayferror.jsp
diff --git a/LICENSE.txt b/LICENSE.txt
old mode 100644
new mode 100755
index 338979d..895657b
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,174 +1,174 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
\ No newline at end of file
diff --git a/cpappend.bat b/cpappend.bat
old mode 100644
new mode 100755
diff --git a/doc/CREDITS.txt b/doc/CREDITS.txt
old mode 100644
new mode 100755
diff --git a/doc/INSTALL.txt b/doc/INSTALL.txt
old mode 100644
new mode 100755
index 8ca3ae0..a9fd0a1
--- a/doc/INSTALL.txt
+++ b/doc/INSTALL.txt
@@ -1,18 +1,6 @@
-3-Mar-08
-Version 1.0 Release Candidate 3
-
Shibboleth Discovery Service Installation
Prior to installation you may need to configure the system as described in deployment guide.
This is currently available at:
-https://spaces.internet2.edu/display/SHIB/DiscoveryService
-
-Specifically you may need to edit webpages\wayf.jsp and
-src/conf/wayfconfig.xml. With no configuration the DiscoveryService
-deploys an internet2 branded GUI and looks for metadata in the file
-"/usr/local/sites.xml" (unix) and "%systemdrive%:\usr\local\sites.xml"
-(Windows)
-
-Then run ant in the top level directory to build the war file suitable
-for deploying into your container.
\ No newline at end of file
+https://spaces.internet2.edu/display/SHIB/DiscoveryService
\ No newline at end of file
diff --git a/doc/README.txt b/doc/README.txt
old mode 100644
new mode 100755
diff --git a/doc/RELEASE-NOTES.txt b/doc/RELEASE-NOTES.txt
old mode 100644
new mode 100755
index 07aa43f..e76023c
--- a/doc/RELEASE-NOTES.txt
+++ b/doc/RELEASE-NOTES.txt
@@ -1,20 +1,16 @@
-Changes in Release 1.1.0
+Changes in Release 1.1.3
=============================================
-[SDSJ-22] - wayf.jsp: Invalid loaction of tag and
-[SDSJ-27] - Discovery Service produce megabytes of logging
-[SDSJ-34] - Add tabindex to the inputfields .
-[SDSJ-36] - Strip out cookie handling parameters from HandlerConfig
-[SDSJ-37] - Logging is still stuffed for V2 discovery service.
-[SDSJ-39] - Calling wayf.jsp directly should induce wayf error page with appropiate message
-[SDSJ-41] - Could the DS be made more informative when the SP point it to the wrong address
-[SDSJ-42] - DS should also listen on DS and *.ds endpoints
-[SDSJ-44] - Add version information in library JAR manifest and provide command line tool to view it
-[SDSJ-46] - 1.1 Installation is broken in several exciting and new ways.
-[SDSJ-48] - DS accepts SP endpoints without checking Binding attribute.
-[SDSJ-50] - Need to collect more recent versions of libraries for this release
-[SDSj-51] - Should be able to have whose contents are never shown.
-[SDSJ-52] - Display of UTF8 is currently broken.
-[SDSJ-53] - NPE in edu.internet2.middleware.shibboleth.wayf.plugins.provider.SamlCookiePlug
-[SDSJ-54] - requestURL is fetched from the application context
-[SDSJ-55] - NPE on empty
-[SDSJ-57] - Add White/BloackList Filter
+The precise Cases changed are.
+
+[SDSJ-88] The IdP has to be encoded before it goes over the wire.
+[SDSJ-89] By default always show some possible results.
+[SDSJ-82] Make extensions available to the JSP.
+[SDSJ-96] Factor MDUI parsing code out from the DS codebase.
+[SDSJ-97] Police for duplicated metadata group names.
+[SDSJ-93] Better error logging for bad selections.
+[SDSJ-91] Logging "likely to fail" DS selections due to metadata gaps.
+[SDSJ-90] Hardening the '_saml_idp' cookie in the centralized DS.
+[SDSJ-61] DS looses last known good data if it is presented with bad metadata
+[SDSJ-99] Strip out "javascript" jsp
+
+And updated to OpenSAML 2.5.1
\ No newline at end of file
diff --git a/doc/api/allclasses-frame.html b/doc/api/allclasses-frame.html
deleted file mode 100644
index 2bede0e..0000000
--- a/doc/api/allclasses-frame.html
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-
-
-
-
-
-All Classes (Shibboleth Discovery Service 1.1.0 Java API.)
-
-
-
-
-
-
-
-
-
-
-All Classes
-
-
-
IdPSiteSet(Element el,
- org.opensaml.xml.parse.ParserPool parserPool,
- boolean warnOnBadBinding)
-
-
- Create a new IdPSiteSet as described by the supplied XML segment.
ShibbolethConfigurationException
-
-
- Signals that the a Shibboleth component has been given insufficient or improper runtime configuration paramerts.
forwardRequest(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- IdPSite site)
-
-
- Uses an HTTP Status 307 redirect to forward the user to the IdP or the SP.
-A class which abstracts an IdP for the sake of the WAYF display. Given an EntityDescriptor as
- input it provides bean style get functions for the name (EntityId), the display name
- (a hybrid of Organization name or EntityId and the IdP's SSO connection point.
-
getDisplayName(javax.servlet.http.HttpServletRequest req)
-
-
- Get the user friendly name for the entity, collecting the locale from the
- browser if possible
Prior to display we set the display language from the
- browser. There is probably a proper way to do this using
- jsp, but I want to keep the API between JSP and java the same 1.3->2.0
-
-Represents a collection of related sites as desribed by a single soirce of metadata.
- This is usually a federation. When the WAYF looks to see which IdP sites to show,
- it trims the list so as to not show IdP's which do not trust the SP.
-
- This class is opaque outside this file. The three static methods getSitesLists,
- searchForMatchingOrigins and lookupIdP provide mechansims for accessing
- collections of IdPSiteSets.
-
-
-
-
-
-
-
-
-
-
-
-
-
-Constructor Summary
-
-
-
-protected
-
IdPSiteSet(Element el,
- org.opensaml.xml.parse.ParserPool parserPool,
- boolean warnOnBadBinding)
-
-
- Create a new IdPSiteSet as described by the supplied XML segment.
-
-
-
-
-
-
-
-
-
-Method Summary
-
-
-
-protected void
-
addPlugin(Plugin plugin)
-
-
- Declares a plugin to the siteset.
-
-
-
-protected boolean
-
containsIdP(String IdPName)
-
-
- For plugin handling we need to know quickly if a metadataset contains the idp.
-
-
-
-protected boolean
-
containsSP(String SPName)
-
-
- We do not need to look at a set if it doesn't know about the given SP.
Return all the Idp in the provided entities descriptor. If SearchMatches
- is non null it is populated with whatever of the IdPs matches the search string
- (as noted above).
-
-
-
-
-
-
Parameters:
searchString - to match with
config - parameter to mathing
searchMatches - if non null is filled with such of the sites which match the string
-
We do not need to look at a set if it doesn't know about the given SP. However if
- no SP is given (as per 1.1) then we do need to look. This calls lets us know whether
- this set is a canddiate for looking into.
-
-A servlet implementation of the Shibboleth WAYF service. Allows a browser
- user to select from among a group of origin sites. User selection is
- optionally cached and the user is forwarded to the HandleService appropriate
- to his selection.
-
DiscoveryServiceHandler.forwardRequest(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- IdPSite site)
-
-
- Uses an HTTP Status 307 redirect to forward the user to the IdP or the SP.
Plugin.lookup(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- Map<String,IdPSite> validIdps,
- PluginContext context,
- List<IdPSite> idpList)
-
-
- The WAYF calls each plugin at this entry point when it is first contacted.
Plugin.lookup(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- Map<String,IdPSite> validIdps,
- PluginContext context,
- List<IdPSite> idpList)
-
-
- The WAYF calls each plugin at this entry point when it is first contacted.
SamlCookiePlugin.lookup(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- Map<String,IdPSite> validIdps,
- PluginContext context,
- List<IdPSite> idpList)
-
-
- This is the 'hook' in the lookup part of Discovery Service processing.
SamlCookiePlugin.lookup(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- Map<String,IdPSite> validIdps,
- PluginContext context,
- List<IdPSite> idpList)
-
-
- This is the 'hook' in the lookup part of Discovery Service processing.
DiscoveryServiceHandler.forwardRequest(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- IdPSite site)
-
-
- Uses an HTTP Status 307 redirect to forward the user to the IdP or the SP.
DiscoveryResponseImpl
-
-
- This plugs into the standard opensaml2 parser framework to allow us to get use DiscoverResponse
- elements in our extensions.
-
-
-
HandlerConfig
-
-
- Class used by the DiscoveryServiceHandler to handle run time behaviour.
-
-
-
IdPSite
-
-
- A class which abstracts an IdP for the sake of the WAYF display.
-
-
-
IdPSiteSet
-
-
- Represents a collection of related sites as desribed by a single soirce of metadata.
-
-
-
WayfException
-
-
- Signals that an error has occurred while processing a Shibboleth WAYF request.
-The Plugin interface is used to affect the 'hints' that the WAYF offers to the users.
-
- The WAYF can register any number of plugins. Each plugin is called when the metadata is loaded or realoaded
- (so it can do any indexing) and at the three entry points into the WAYF - Lookup (main entry), Search and Select.
- Plugins are called in the order in which they are declared to the WAYF.
-
- Each plugin is called once when the user has made a selection.
-
- For Search and Lookup, each plugin is called multiple times, once for each metadata provider which has
- been declared to this particular WAYF instance. The plugin can return a context which is handed to subsequent calls.
-
- The idea is that each plugin can affect the displayed lists of IdPs. As a reminder the WAYF displays two lists of
- IdPs - the complete list, displayed either as a single list or a list of lists, and the hint list (which was
- previously only populated from the _saml_idp cookie. In the search case the WAYF displays a third list of
- the search hits.
-
- When the plugin in called it is given the current set of potential IdPs as a Map from EntityID to IdPSite
- and lists representing the current hint list and search results. A Plugin can remove an entry from
- the map or the lists. Additionally it can insert an IdPSite found in the Map into the hint or search lists.
- Thus the plugin can restrict the number of sites that the WAYF instance displays in the 'complete list' and
- can add or remove IdPs from the hint list.
-
- At any stage the plugin can take control of the current request and redirect or forward it. It signals that
- it has done this to the WAYF by means of an exception.
-
- The _saml_idp cookie handling code is written as a WAYF plugin. Other plugins have been written to allow IdPs
- to be presented as hints based on the client's IP address or to redirect back to the SP once the choice of
- IdP has been made.
-
- Object implementing this interface are created during WAYF discovery service initialization. There are
- expected to implement a constructor which takes a Element as the only parameter and they are
- created via this constructor, with the parameter being the appropriate section of the WAYF configuration file
-
lookup(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- Map<String,IdPSite> validIdps,
- PluginContext context,
- List<IdPSite> idpList)
-
-
- The WAYF calls each plugin at this entry point when it is first contacted.
refreshMetadata(org.opensaml.saml2.metadata.provider.MetadataProvider metadata)
-
-
- Whenever the WAYF discoveres that the metadata is stale, it reloads it and calls each plugin at this method.
selected(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- String idP)
-
-
- This method is called, for every plugin, after a user has selected an IdP.
The WAYF calls each plugin at this entry point when it is first contacted.
-
-
-
Parameters:
req - - Describes the current request. A Plugin might use it to find any appropriate cookies
res - - Describes the current response. A Plugin might use it to redirect a the request.
parameter - Describes the metadata.
context - Any processing context returned from a previous call.
validIdps - The list of IdPs which is currently views as possibly matches for the pattern.
- The Key is the EntityId for the IdP and the value the object which describes
- the Idp
idpList - The set of Idps which are currently considered as potential hints.
-
Returns:
a context to hand to subsequent calls
-
Throws:
-
WayfRequestHandled - if the plugin has handled the request (for instance it has
- issues a redirect)
-
- Each plugin is called multiple times,
- once for each metadata provider which is registered (Depending on the precise configuration of the WAYF
- metadata providers whose metadata does not include the target may be dropped). Initially the plugin is
- called with a context parameter of null. In subsequent calls, the value returned from
- the previous call is passed in as the context parameter.
-
- The plugin may remove IdPSite objects from the validIdps list.
-
- The plugin may add or remove them to the idpList. IdPSite Objects which are to be added to the idpList
- should be looked up by EntityIdName in validIdps by EntityId. Hence any metadata processing shoudl
- store the entityID.
This method is called when the user specified a search operation. The processing is similar to
- that described for lookup.
- Two additional paramaters are provided, the search parameter which was provided, and the current
- proposed list of candidate IdPs. The plugin is at liberty to alter both the list of hints and the
- list of valid IdPs.
-
-
-
Parameters:
req - Describes the current request. The Plugin could use it to find any appropriate cookies
res - Describes the result - this is needed if (for instance) a plung needs to change cookie values
parameter - Describes the metadata
pattern - The Search pattern provided
validIdps - The list of IdPs which is currently views as possibly matches for the pattern.
- The Key is the Idp Name an the value the idp
context - Any processing context returned from a previous call.
searchResult - the resukt of any search
idpList - The set of Idps which are currently considered as potential hints. Each Idp is associated
- with a numeric weight, where the lower the number is the more likely the IdP is to be a candidate.
- As descibed above the WAYF uses this to provide hint list to the GUI (or even to dispatch
- immediately to the IdP).
-
Returns:
a context to hand to subsequent calls
-
Throws:
-
WayfRequestHandled - if the plugin has handled the request (for instance it has
- issues a redirect)
This method is called, for every plugin, after a user has selected an IdP. The plugin is expected
- to use it to update any in memory state (via the PluginMetadataParameter parameter or permananent
- state (for instance by writing back a cookie.
-
-
-
Parameters:
req - Describes the current request.
res - Describes the current response
parameter - Describes the metadata
-
Throws:
-
WayfRequestHandled - if the plugin has handled the request (for instance it has
- issues a redirect)
- Objects which implement PluginContext are passed between sucessive calls to a plugins implementations of
- lookup and search as the plugin
- is called for each MetadataProvider.
-
-The PluginParameter is a marker interface which a WAYF Plugin can use to associate extra information
- with the metadata. Each plugin returns a PluginParameter from RefreshMetadata
- and this is in turn presented back to then Plugin when it is called during WAYF processing.
-
Plugin.lookup(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- Map<String,IdPSite> validIdps,
- PluginContext context,
- List<IdPSite> idpList)
-
-
- The WAYF calls each plugin at this entry point when it is first contacted.
Plugin.lookup(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- Map<String,IdPSite> validIdps,
- PluginContext context,
- List<IdPSite> idpList)
-
-
- The WAYF calls each plugin at this entry point when it is first contacted.
SamlCookiePlugin.lookup(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- Map<String,IdPSite> validIdps,
- PluginContext context,
- List<IdPSite> idpList)
-
-
- This is the 'hook' in the lookup part of Discovery Service processing.
SamlCookiePlugin.lookup(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- Map<String,IdPSite> validIdps,
- PluginContext context,
- List<IdPSite> idpList)
-
-
- This is the 'hook' in the lookup part of Discovery Service processing.
Plugin.refreshMetadata(org.opensaml.saml2.metadata.provider.MetadataProvider metadata)
-
-
- Whenever the WAYF discoveres that the metadata is stale, it reloads it and calls each plugin at this method.
Plugin.lookup(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- Map<String,IdPSite> validIdps,
- PluginContext context,
- List<IdPSite> idpList)
-
-
- The WAYF calls each plugin at this entry point when it is first contacted.
Plugin.selected(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- String idP)
-
-
- This method is called, for every plugin, after a user has selected an IdP.
SamlCookiePlugin.refreshMetadata(org.opensaml.saml2.metadata.provider.MetadataProvider metadata)
-
-
- Plugin point which is called when the data is refreshed.
SamlCookiePlugin.lookup(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- Map<String,IdPSite> validIdps,
- PluginContext context,
- List<IdPSite> idpList)
-
-
- This is the 'hook' in the lookup part of Discovery Service processing.
Plugin.lookup(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- Map<String,IdPSite> validIdps,
- PluginContext context,
- List<IdPSite> idpList)
-
-
- The WAYF calls each plugin at this entry point when it is first contacted.
Plugin.selected(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- String idP)
-
-
- This method is called, for every plugin, after a user has selected an IdP.
SamlCookiePlugin.lookup(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- Map<String,IdPSite> validIdps,
- PluginContext context,
- List<IdPSite> idpList)
-
-
- This is the 'hook' in the lookup part of Discovery Service processing.
Plugin
-
-
- The Plugin interface is used to affect the 'hints' that the WAYF offers to the users.
-
-
-
PluginMetadataParameter
-
-
- The PluginParameter is a marker interface which a WAYF Plugin can use to associate extra information
- with the metadata.
PluginMetadataParameter
-
-
- The PluginParameter is a marker interface which a WAYF Plugin can use to associate extra information
- with the metadata.
-
-
-
WayfRequestHandled
-
-
- This Exception can be signalled by a plugin to indicate to the WAYF that it has handled the
- request and all processing should stop.
PluginMetadataParameter
-
-
- The PluginParameter is a marker interface which a WAYF Plugin can use to associate extra information
- with the metadata.
-
-
-
WayfRequestHandled
-
-
- This Exception can be signalled by a plugin to indicate to the WAYF that it has handled the
- request and all processing should stop.
lookup(javax.servlet.http.HttpServletRequest req,
- javax.servlet.http.HttpServletResponse res,
- PluginMetadataParameter parameter,
- Map<String,IdPSite> validIdps,
- PluginContext context,
- List<IdPSite> idpList)
-
-
- This is the 'hook' in the lookup part of Discovery Service processing.
req - - Describes the current request. Used to find any appropriate cookies
res - - Describes the current response. Used to redirect the request.
parameter - - Describes the metadata.
context - - Any processing context returned from a previous call. We set this on first call and
- use non null to indicate that we don't go there again.
validIdps - The list of IdPs which is currently views as possibly matches for the pattern.
- The Key is the EntityId for the IdP and the value the object which describes
- the Idp
idpList - The set of Idps which are currently considered as potential hints.
-
Returns:
a context to hand to subsequent calls
-
Throws:
-
WayfRequestHandled - if the plugin has handled the request.
- issues a redirect)
validIdps - The list of IdPs which is currently views as possibly matches for the pattern.
- The Key is the EntityId for the IdP and the value the object which describes
- the Idp
context - Any processing context returned from a previous call. We set this on first call and
- use non null to indicate that we don't go there again.
searchResult - What the search yielded.
idpList - The set of Idps which are currently considered as potential hints.
-
-This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.
-Overview
-
-
-
-The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.
-
-Package
-
-
-
-Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:
-
Interfaces (italic)
Classes
Enums
Exceptions
Errors
Annotation Types
-
-
-Class/Interface
-
-
-
-Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:
-
Class inheritance diagram
Direct Subclasses
All Known Subinterfaces
All Known Implementing Classes
Class/interface declaration
Class/interface description
-
-
Nested Class Summary
Field Summary
Constructor Summary
Method Summary
-
-
Field Detail
Constructor Detail
Method Detail
-Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
-
-
-Annotation Type
-
-
-
-Each annotation type has its own separate page with the following sections:
-
Annotation Type declaration
Annotation Type description
Required Element Summary
Optional Element Summary
Element Detail
-
-
-
-Enum
-
-
-
-Each enum has its own separate page with the following sections:
-
Enum declaration
Enum description
Enum Constant Summary
Enum Constant Detail
-
-
-Use
-
-Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.
-
-Tree (Class Hierarchy)
-
-There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
-
When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
-
-
-Deprecated API
-
-The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
-
-Index
-
-The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
-
-Prev/Next
-These links take you to the next or previous class, interface, package, or related page.
-Frames/No Frames
-These links show and hide the HTML frames. All pages are available with or without frames.
-
-
-Serialized Form
-Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
-
-The Discovery Service allows users to select a home IdP when they first approach a Service provider.
-
-This implementation provides support for two protocols. Firstly there
-is legacy support for the old style Shibboleth 1.3 prorocol (WAYF) in
-which the wayf sits between the Sp and the IdP. It also supports the
-SAML2 DiscoveryService protocol which is a conversation between the SP
-and the DS. The SP then dispatches off to the IdP.
-
-
-1/*
-2 * Copyright [2005] [University Corporation for Advanced Internet Development, Inc.]
-3 *
-4 * Licensed under the Apache License, Version 2.0 (the "License");
-5 * you may not use this file except in compliance with the License.
-6 * You may obtain a copy of the License at
-7 *
-8 * http://www.apache.org/licenses/LICENSE-2.0
-9 *
-10 * Unless required by applicable law or agreed to in writing, software
-11 * distributed under the License is distributed on an "AS IS" BASIS,
-12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-13 * See the License for the specific language governing permissions and
-14 * limitations under the License.
-15 */
-16
-17package edu.internet2.middleware.shibboleth.common;
-18
-19/**
-20 * Signals that the a Shibboleth component has been given insufficient or improper runtime configuration paramerts.
-21 *
-22 * @author Walter Hoehn (wassa@columbia.edu)
-23 */
-24publicclassShibbolethConfigurationExceptionextends Exception {
-25
-26/**
-27 * 'Required' Serial ID.
-28 */
-29privatestaticfinallong serialVersionUID = 3052563354463892233L;
-30
-31/**
-32 * Build an object embedding a String message. Normally called for detected errors.
-33 *
-34 * @param message - Text (in US English) describing the reason for raising the exception.
-35 */
-36publicShibbolethConfigurationException(String message) {
-37super(message);
-38 }
-39
-40/**
-41 * Build an object which embeds an message an exception.
-42 * Normally called to pass on errors found at a lower level.
-43 *
-44 * @param message - Text (in US English) describing the reasdon for raising the exception.
-45 * @param t - Cause for the failure as returned by the lower level component.
-46 */
-47publicShibbolethConfigurationException(String message, Throwable t) {
-48super(message,t);
-49 }
-50 }
-
-
-1/*
-2 * Copyright [2006] [University Corporation for Advanced Internet Development, Inc.]
-3 *
-4 * Licensed under the Apache License, Version 2.0 (the "License");
-5 * you may not use this file except in compliance with the License.
-6 * You may obtain a copy of the License at
-7 *
-8 * http://www.apache.org/licenses/LICENSE-2.0
-9 *
-10 * Unless required by applicable law or agreed to in writing, software
-11 * distributed under the License is distributed on an "AS IS" BASIS,
-12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-13 * See the License for the specific language governing permissions and
-14 * limitations under the License.
-15 */
-16
-17/**
-18 *
-19 */
-20
-21package edu.internet2.middleware.shibboleth.wayf;
-22
-23import org.opensaml.common.impl.AbstractSAMLObjectBuilder;
-24import org.opensaml.common.xml.SAMLConstants;
-25
-26/**
-27 * Builder of {@link org.opensaml.saml2.metadata.impl.SingleLogoutServiceImpl}.
-28 */
-29publicclassDiscoveryResponseBuilderextends AbstractSAMLObjectBuilder<DiscoveryResponseImpl> {
-30
-31/**
-32 * Constructor
-33 */
-34publicDiscoveryResponseBuilder() {
-35
-36 }
-37
-38/** {@inheritDoc} */
-39publicDiscoveryResponseImpl buildObject() {
-40return buildObject(SAMLConstants.SAML20MD_NS, DiscoveryResponseImpl.DEFAULT_ELEMENT_LOCAL_NAME, SAMLConstants.SAML20MD_PREFIX);
-41 }
-42
-43/** {@inheritDoc} */
-44publicDiscoveryResponseImpl buildObject(String namespaceURI, String localName, String namespacePrefix) {
-45returnnewDiscoveryResponseImpl(namespaceURI, localName, namespacePrefix);
-46 }
-47 }
-
-
-1/*
-2 * Copyright [2006] [University Corporation for Advanced Internet Development, Inc.]
-3 *
-4 * Licensed under the Apache License, Version 2.0 (the "License");
-5 * you may not use this file except in compliance with the License.
-6 * You may obtain a copy of the License at
-7 *
-8 * http://www.apache.org/licenses/LICENSE-2.0
-9 *
-10 * Unless required by applicable law or agreed to in writing, software
-11 * distributed under the License is distributed on an "AS IS" BASIS,
-12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-13 * See the License for the specific language governing permissions and
-14 * limitations under the License.
-15 */
-16
-17/**
-18 *
-19 */
-20
-21package edu.internet2.middleware.shibboleth.wayf;
-22
-23import org.opensaml.saml2.metadata.IndexedEndpoint;
-24import org.opensaml.saml2.metadata.impl.IndexedEndpointImpl;
-25
-26/**
-27 * This plugs into the standard opensaml2 parser framework to allow us to get use <code> DiscoverResponse </code>
-28 * elements in our extensions.
-29 */
-30publicclassDiscoveryResponseImplextends IndexedEndpointImpl implements IndexedEndpoint {
-31
-32/** Namespace for Discovery Service metadata extensions. */
-33
-34publicstaticfinal String METADATA_NS = "urn:oasis:names:tc:SAML:profiles:SSO:idp-discovery-protocol";
-35/** Name of the element inside the Extensions. */
-36
-37protectedstaticfinal String DEFAULT_ELEMENT_LOCAL_NAME = "DiscoveryResponse";
-38
-39/**
-40 * Constructor.
-41 *
-42 * @param namespaceURI the Uri
-43 * @param elementLocalName the local name
-44 * @param namespacePrefix the prefix
-45 */
-46protectedDiscoveryResponseImpl(String namespaceURI, String elementLocalName, String namespacePrefix) {
-47super(namespaceURI, elementLocalName, namespacePrefix);
-48 }
-49 }
-
-
-1/*
-2 * Copyright [2006] [University Corporation for Advanced Internet Development, Inc.]
-3 *
-4 * Licensed under the Apache License, Version 2.0 (the "License");
-5 * you may not use this file except in compliance with the License.
-6 * You may obtain a copy of the License at
-7 *
-8 * http://www.apache.org/licenses/LICENSE-2.0
-9 *
-10 * Unless required by applicable law or agreed to in writing, software
-11 * distributed under the License is distributed on an "AS IS" BASIS,
-12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-13 * See the License for the specific language governing permissions and
-14 * limitations under the License.
-15 */
-16
-17/**
-18 *
-19 */
-20
-21package edu.internet2.middleware.shibboleth.wayf;
-22
-23import org.opensaml.saml2.metadata.impl.IndexedEndpointUnmarshaller;
-24import org.opensaml.xml.XMLObject;
-25import org.opensaml.xml.io.UnmarshallingException;
-26import org.w3c.dom.Attr;
-27
-28/**
-29 * A thread safe Unmarshaller for {@link org.opensaml.saml2.metadata.SingleLogoutService} objects.
-30 */
-31publicclassDiscoveryResponseUnmarshallerextends IndexedEndpointUnmarshaller {
-32
-33/** {@inheritDoc} */
-34protectedvoid processAttribute(XMLObject samlObject, Attr attribute) throws UnmarshallingException {
-35super.processAttribute(samlObject, attribute);
-36 }
-37 }
-
-
-1/*
-2 * Copyright [2005] [University Corporation for Advanced Internet Development, Inc.]
-3 *
-4 * Licensed under the Apache License, Version 2.0 (the "License");
-5 * you may not use this file except in compliance with the License.
-6 * You may obtain a copy of the License at
-7 *
-8 * http://www.apache.org/licenses/LICENSE-2.0
-9 *
-10 * Unless required by applicable law or agreed to in writing, software
-11 * distributed under the License is distributed on an "AS IS" BASIS,
-12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-13 * See the License for the specific language governing permissions and
-14 * limitations under the License.
-15 */
-16
-17package edu.internet2.middleware.shibboleth.wayf;
-18
-19import java.util.HashSet;
-20
-21import org.slf4j.Logger;
-22import org.slf4j.LoggerFactory;
-23import org.w3c.dom.Element;
-24import org.w3c.dom.NodeList;
-25
-26import edu.internet2.middleware.shibboleth.common.ShibbolethConfigurationException;
-27
-28/**
-29 * Class used by the DiscoveryServiceHandler to handle run time behaviour.
-30 */
-31
-32publicclassHandlerConfig {
-33
-34/**
-35 * How to get debug output out.
-36 */
-37privatestaticfinal Logger LOG = LoggerFactory.getLogger(HandlerConfig.class.getName());
-38
-39/** A set of names which are ignored when doing a search. */
-40privatefinal HashSet <String> ignoredForMatch;
-41
-42/** Where to find the GUI description jsp file. */
-43privatefinal String jspFile;
-44
-45/** Where to find the error jsp file. */
-46privatefinal String errorJspFile;
-47
-48/** Do we give the jsp file an array of arrays of IdPs? */
-49privatefinalboolean provideListOfLists;
-50
-51/** Do we give the jsp file a flat list of IdPs? */
-52privatefinalboolean provideList;
-53
-54/** Do we do a pre-filter by SP name in for each metadata provider. */
-55privatefinalboolean lookupSp;
-56
-57/** Do we warn on the bad binding. */
-58privatefinalboolean warnOnBadBinding;
-59
-60/** Build the 'default default' configuation. */
-61publicHandlerConfig() {
-62//
-63// 'Sensible' default values
-64//
-65 jspFile = "/wayf.jsp";
-66 errorJspFile = "/wayfError.jsp";
-67 provideList = true;
-68 provideListOfLists = false;
-69 lookupSp = true;
-70 ignoredForMatch = new HashSet <String>();
-71 warnOnBadBinding = false;
-72 }
-73
-74
-75/**
-76 *
-77 * Parse the Supplied XML element into a new WayfConfig Object.
-78 * @param config - The XML with the configuration info.
-79 * @param defaultValue - The default if nothing is specified.
-80 * @throws ShibbolethConfigurationException - if we see somethin wrong.
-81 */
-82publicHandlerConfig(Element config, HandlerConfig defaultValue) throws ShibbolethConfigurationException {
-83
-84 String attribute;
-85 LOG.debug("Loading global configuration properties.");
-86
-87 NodeList list = config.getElementsByTagName("SearchIgnore");
-88
-89if (list.getLength() == 0) {
-90
-91 ignoredForMatch = defaultValue.ignoredForMatch;
-92
-93 } else {
-94
-95 ignoredForMatch = new HashSet<String>();
-96
-97for (int i = 0; i < list.getLength(); i++ ) {
-98
-99 NodeList inner = ((Element) list.item(i)).getElementsByTagName("IgnoreText");
-100
-101for(int j = 0; j < inner.getLength(); j++) {
-102
-103 addIgnoredForMatch(inner.item(j).getTextContent());
-104 }
-105 }
-106 }
-107
-108 attribute = config.getAttribute("jspFile");
-109if (attribute != null && !attribute.equals("")) {
-110 jspFile = attribute;
-111 } else {
-112 jspFile = defaultValue.jspFile;
-113 }
-114
-115 attribute = config.getAttribute("errorJspFile");
-116if (attribute != null && !attribute.equals("")) {
-117 errorJspFile = attribute;
-118 } else {
-119 errorJspFile = defaultValue.errorJspFile;
-120 }
-121
-122 attribute = config.getAttribute("provideList");
-123if (attribute != null && !attribute.equals("")) {
-124 provideList = Boolean.valueOf(attribute).booleanValue();
-125 } else {
-126 provideList = defaultValue.provideList;
-127 }
-128
-129 attribute = config.getAttribute("provideListOfList");
-130if (attribute != null && !attribute.equals("")) {
-131 provideListOfLists = Boolean.valueOf(attribute).booleanValue();
-132 } else {
-133 provideListOfLists = defaultValue.provideListOfLists;
-134 }
-135
-136 attribute = config.getAttribute("showUnusableIdPs");
-137if (attribute != null && !attribute.equals("")) {
-138 lookupSp = !Boolean.valueOf(attribute).booleanValue();
-139 } else {
-140 lookupSp = defaultValue.lookupSp;
-141 }
-142
-143 attribute = config.getAttribute("warnOnBadBinding");
-144if (null != attribute && !attribute.equals("")) {
-145 warnOnBadBinding = Boolean.valueOf(attribute).booleanValue();
-146 } else {
-147 warnOnBadBinding = false;
-148 }
-149 }
-150
-151
-152/**
-153 * Determines if a particular string token should be used for matching when a user searches for origins.
-154 *
-155 * @param str - The string to lookup.
-156 * @return whether it is or not.
-157 */
-158publicboolean isIgnoredForMatch(String str) {
-159
-160return ignoredForMatch.contains(str.toLowerCase());
-161 }
-162
-163/**
-164 * Sets the tokens that should be ignored when a user searches for an origin site.
-165 *
-166 * @param s
-167 * The ignored tokens are passed as a single string, each separated by whitespace
-168 */
-169privatevoid addIgnoredForMatch(String s) {
-170
-171 ignoredForMatch.add(s.toLowerCase());
-172 }
-173
-174/**
-175 * Get the name of the jsp File this instance uses.
-176 * @return the name.
-177 */
-178public String getJspFile() {
-179return jspFile;
-180 }
-181
-182/**
-183 * Get the name of the error jsp File this instance uses.
-184 * @return the name.
-185 */
-186public String getErrorJspFile() {
-187return errorJspFile;
-188 }
-189
-190/**
-191 * Do we provide a list of lists of IdPs?.
-192 * @return whether we do or not.
-193 */
-194publicboolean getProvideListOfLists() {
-195return provideListOfLists;
-196 }
-197
-198/**
-199 * Do we provide a list of IdPs?.
-200 * @return whether we provide a list of IdPs?.
-201 */
-202publicboolean getProvideList() {
-203return provideList;
-204 }
-205
-206/**
-207 * Do we lookup the SP or just return all the IdPs?.
-208 * @return whether or not we lookup the SP
-209 */
-210publicboolean getLookupSp() {
-211return lookupSp;
-212 }
-213
-214/**
-215 * Do ignore badly formed bindings or just warn
-216 * @return whether we warn.
-217 */
-218publicboolean getWarnOnBadBinding() {
-219return warnOnBadBinding;
-220 }
-221
-222 }
-
-
-1/*
-2 * Copyright [2005] [University Corporation for Advanced Internet Development, Inc.]
-3 *
-4 * Licensed under the Apache License, Version 2.0 (the "License");
-5 * you may not use this file except in compliance with the License.
-6 * You may obtain a copy of the License at
-7 *
-8 * http://www.apache.org/licenses/LICENSE-2.0
-9 *
-10 * Unless required by applicable law or agreed to in writing, software
-11 * distributed under the License is distributed on an "AS IS" BASIS,
-12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-13 * See the License for the specific language governing permissions and
-14 * limitations under the License.
-15 */
-16
-17package edu.internet2.middleware.shibboleth.wayf;
-18
-19import java.util.Comparator;
-20import java.util.List;
-21import java.util.Locale;
-22
-23import javax.servlet.http.HttpServletRequest;
-24
-25import org.opensaml.saml2.metadata.EntityDescriptor;
-26import org.opensaml.saml2.metadata.Organization;
-27import org.opensaml.saml2.metadata.OrganizationDisplayName;
-28import org.opensaml.saml2.metadata.SingleSignOnService;
-29
-30/**
-31 * A class which abstracts an IdP for the sake of the WAYF display. Given an {@link EntityDescriptor} as
-32 * input it provides bean style get functions for the name (EntityId), the display name
-33 * (a hybrid of Organization name or EntityId and the IdP's SSO connection point.
-34 *
-35 */
-36publicclassIdPSite {
-37
-38/** The OpenSaml element that this stands for. */
-39private EntityDescriptor entity;
-40
-41/** The language we set up */
-42private String displayLanguage;
-43
-44/**
-45 * Create a new element from the provided Entity.
-46 * @param entityParam - What to create from
-47 */
-48publicIdPSite(EntityDescriptor entityParam) {
-49 entity = entityParam;
-50 }
-51
-52/**
-53 * Get the name for the enclosed entity.
-54 * @return the name for the enclosed entity.
-55 */
-56public String getName() {
-57return entity.getEntityID();
-58 }
-59
-60/**
-61 * Get the user friendly name for the entity, collecting the locale from the
-62 * browser if possible
-63 * @param req the request
-64 * @return a user friendly name.
-65 */
-66public String getDisplayName(HttpServletRequest req) {
-67//
-68// Get the browser locale, failing that the server one
-69//
-70 Locale locale = req.getLocale();
-71if (null == locale) {
-72 Locale.getDefault();
-73 }
-74 String lang = locale.getLanguage();
-75
-76return getDisplayName(lang);
-77 }
-78/**
-79 * Get the user friendly name for the entity, using provided language
-80 * @param lang the language.
-81 *
-82 * @return a user friendly name.
-83 */
-84private String getDisplayName(String lang) {
-85 Organization org = entity.getOrganization();
-86
-87if (org == null) {
-88return entity.getEntityID();
-89 }
-90
-91 List<OrganizationDisplayName> list = org.getDisplayNames();
-92
-93//
-94// Lookup first by locale
-95//
-96
-97for (OrganizationDisplayName name:list) {
-98if (null !=name && lang.equals(name.getName().getLanguage())) {
-99return name.getName().getLocalString();
-100 }
-101 }
-102
-103//
-104// If that doesn't work then anything goes
-105//
-106
-107for (OrganizationDisplayName name:list) {
-108if (null !=name && null != name.getName().getLocalString()) {
-109return name.getName().getLocalString();
-110 }
-111 }
-112
-113//
-114// If there is still nothing then use the entity Id
-115//
-116return entity.getEntityID();
-117 }
-118/**
-119 * Get the user friendly name for the entity, the language we previouslt set up
-120 * @param lang the language.
-121 *
-122 * @return a user friendly name.
-123 */
-124public String getDisplayName() {
-125return getDisplayName(displayLanguage);
-126 }
-127
-128/**
-129 * Comparison so we can sort the output for jsp.
-130 * @param o What to compare against
-131 * @return numeric encoding of comparison
-132 * @see java.lang.Comparator
-133 */
-134protectedint compareTo(Object o, HttpServletRequest req) {
-135
-136
-137 String myDisplayName;
-138 String otherDisplayName;
-139IdPSite other;
-140
-141if (equals(o)) {
-142return 0;
-143 }
-144
-145 myDisplayName = getDisplayName(req);
-146if (null == myDisplayName) {
-147 myDisplayName = "";
-148 }
-149
-150 other = (IdPSite) o;
-151 otherDisplayName = other.getDisplayName(req);
-152if (null == otherDisplayName) {
-153 otherDisplayName = "";
-154 }
-155
-156int result = myDisplayName.toLowerCase().compareTo(otherDisplayName.toLowerCase());
-157if (result == 0) {
-158 result = myDisplayName.compareTo(otherDisplayName);
-159 }
-160return result;
-161 }
-162
-163/**
-164 * When a user has selected an IdP, this provides the address to which we redirect.
-165 * @return http address for the IdP this represents.
-166 */
-167public String getAddressForWAYF() {
-168 List<SingleSignOnService> ssoList;
-169
-170 ssoList = entity.getIDPSSODescriptor(XMLConstants.SHIB_NS).getSingleSignOnServices();
-171
-172for (SingleSignOnService signOnService: ssoList) {
-173if (XMLConstants.IDP_SSO_BINDING.equals(signOnService.getBinding())) {
-174return signOnService.getLocation();
-175 }
-176 }
-177returnnull;
-178 }
-179
-180/**
-181 * Prior to display we set the display language from the
-182 * browser. There is probably a proper way to do this using
-183 * jsp, but I want to keep the API between JSP and java the same 1.3->2.0
-184 * @param lang the language to set
-185 */
-186publicvoid setDisplayLanguage(String lang) {
-187this.displayLanguage = lang;
-188 }
-189
-190publicstaticclassCompare implements Comparator<IdPSite> {
-191
-192/**
-193 * This allows us to set up sorted lists of entities with respect to
-194 * the browser request.
-195 *
-196 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
-197 */
-198private HttpServletRequest req = null;
-199
-200privateCompare() {
-201//
-202// No public method
-203 }
-204
-205publicCompare(HttpServletRequest req) {
-206this.req = req;
-207 }
-208
-209publicint compare(IdPSite o1, IdPSite o2) {
-210// TODO Auto-generated method stub
-211return o1.compareTo(o2, req);
-212 }
-213
-214 }
-215
-216 }
-217
-
-
-1/*
-2 * Copyright [2005] [University Corporation for Advanced Internet Development, Inc.]
-3 *
-4 * Licensed under the Apache License, Version 2.0 (the "License");
-5 * you may not use this file except in compliance with the License.
-6 * You may obtain a copy of the License at
-7 *
-8 * http://www.apache.org/licenses/LICENSE-2.0
-9 *
-10 * Unless required by applicable law or agreed to in writing, software
-11 * distributed under the License is distributed on an "AS IS" BASIS,
-12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-13 * See the License for the specific language governing permissions and
-14 * limitations under the License.
-15 */
-16package edu.internet2.middleware.shibboleth.wayf;
-17
-18import java.io.File;
-19import java.lang.reflect.Constructor;
-20import java.net.MalformedURLException;
-21import java.net.URL;
-22import java.util.ArrayList;
-23import java.util.Collection;
-24import java.util.Enumeration;
-25import java.util.HashMap;
-26import java.util.HashSet;
-27import java.util.List;
-28import java.util.Map;
-29import java.util.Set;
-30import java.util.StringTokenizer;
-31import java.util.TreeMap;
-32
-33import org.opensaml.saml2.metadata.EntitiesDescriptor;
-34import org.opensaml.saml2.metadata.EntityDescriptor;
-35import org.opensaml.saml2.metadata.IDPSSODescriptor;
-36import org.opensaml.saml2.metadata.Organization;
-37import org.opensaml.saml2.metadata.OrganizationDisplayName;
-38import org.opensaml.saml2.metadata.OrganizationName;
-39import org.opensaml.saml2.metadata.RoleDescriptor;
-40import org.opensaml.saml2.metadata.SPSSODescriptor;
-41import org.opensaml.saml2.metadata.provider.FileBackedHTTPMetadataProvider;
-42import org.opensaml.saml2.metadata.provider.FilesystemMetadataProvider;
-43import org.opensaml.saml2.metadata.provider.MetadataFilter;
-44import org.opensaml.saml2.metadata.provider.MetadataFilterChain;
-45import org.opensaml.saml2.metadata.provider.MetadataProvider;
-46import org.opensaml.saml2.metadata.provider.MetadataProviderException;
-47import org.opensaml.saml2.metadata.provider.ObservableMetadataProvider;
-48import org.opensaml.xml.XMLObject;
-49import org.opensaml.xml.parse.ParserPool;
-50import org.slf4j.Logger;
-51import org.slf4j.LoggerFactory;
-52import org.w3c.dom.Element;
-53import org.w3c.dom.NodeList;
-54
-55import edu.internet2.middleware.shibboleth.common.ShibbolethConfigurationException;
-56import edu.internet2.middleware.shibboleth.wayf.plugins.Plugin;
-57import edu.internet2.middleware.shibboleth.wayf.plugins.PluginMetadataParameter;
-58import edu.internet2.middleware.shibboleth.wayf.plugins.provider.BindingFilter;
-59
-60/**
-61 *
-62 * Represents a collection of related sites as desribed by a single soirce of metadata.
-63 * This is usually a federation. When the WAYF looks to see which IdP sites to show,
-64 * it trims the list so as to not show IdP's which do not trust the SP.
-65 *
-66 * This class is opaque outside this file. The three static methods getSitesLists,
-67 * searchForMatchingOrigins and lookupIdP provide mechansims for accessing
-68 * collections of IdPSiteSets.
-69 *
-70 */
-71
-72publicclassIdPSiteSet implements ObservableMetadataProvider.Observer {
-73
-74/** Handle for error output. */
-75privatestaticfinal Logger LOG = LoggerFactory.getLogger(IdPSiteSet.class.getName());
-76
-77/** The OpenSaml metadat6a source. */
-78private ObservableMetadataProvider metadata;
-79
-80/** Is the named SP in the current metadata set? */
-81private Set<String> spNames = new HashSet<String>(0);
-82
-83/** Is the named IdP in the current metadata set? */
-84private Set<String> idpNames = new HashSet<String>(0);
-85
-86/** What does the configuration identify this as? */
-87privatefinal String identifier;
-88
-89/** What name should we display for this set of entities? */
-90privatefinal String displayName;
-91
-92/** Where does the metadata exist? */
-93private String location;
-94
-95/** What parameters do we pass in to which plugin? */
-96privatefinal Map<Plugin, PluginMetadataParameter> plugins = new HashMap<Plugin, PluginMetadataParameter>();
-97
-98/**
-99 * Create a new IdPSiteSet as described by the supplied XML segment.
-100 * @param el - configuration details.
-101 * @param parserPool - the parsers we initialized above.
-102 * @param warnOnBadBinding if we just warn or give an error if an SP has bad entry points.
-103 * @throws ShibbolethConfigurationException - if something goes wrong.
-104 */
-105protectedIdPSiteSet(Element el, ParserPool parserPool, boolean warnOnBadBinding) throws ShibbolethConfigurationException {
-106
-107 String spoolSpace;
-108 String delayString;
-109
-110this.identifier = el.getAttribute("identifier");
-111this.displayName = el.getAttribute("displayName");
-112 location = el.getAttribute("url");
-113if (null == location || location.length() == 0) {
-114//
-115// Sigh for a few releases this was documented as URI
-116//
-117 location = el.getAttribute("url");
-118 }
-119 spoolSpace = el.getAttribute("backingFile");
-120 delayString = el.getAttribute("timeout");
-121
-122//
-123// Configure the filters (before the metadata so we can add them before we start reading)
-124//
-125 String ident;
-126 String className;
-127 ident = "<not specified>";
-128 className = "<not specified>";
-129 MetadataFilterChain filterChain = null;
-130 filterChain = new MetadataFilterChain();
-131try {
-132 NodeList itemElements = el.getElementsByTagNameNS(XMLConstants.CONFIG_NS, "Filter");
-133 List <MetadataFilter> filters = new ArrayList<MetadataFilter>(1 + itemElements.getLength());
-134
-135//
-136// We always have a binding filter
-137//
-138 filters.add(newBindingFilter(warnOnBadBinding));
-139
-140for (int i = 0; i < itemElements.getLength(); i++) {
-141 Element element = (Element) itemElements.item(i);
-142
-143 ident = "<not specified>";
-144 className = "<not specified>";
-145
-146 ident = element.getAttribute("identifier");
-147
-148if (null == ident || ident.equals("")) {
-149 LOG.error("Could not load filter with no identifier");
-150continue;
-151 }
-152
-153 className = element.getAttribute("type");
-154if (null == className || className.equals("")) {
-155 LOG.error("Filter " + identifier + " did not have a valid type");
-156 }
-157//
-158// So try to get hold of the Filter
-159//
-160 Class<MetadataFilter> filterClass = (Class<MetadataFilter>) Class.forName(className);
-161 Class[] classParams = {Element.class};
-162 Constructor<MetadataFilter> constructor = filterClass.getConstructor(classParams);
-163 Object[] constructorParams = {element};
-164
-165 filters.add(constructor.newInstance(constructorParams));
-166 }
-167 filterChain.setFilters(filters);
-168 } catch (Exception e) {
-169 LOG.error("Could not load filter " + ident + "()" + className + ") for " + this.identifier, e);
-170thrownewShibbolethConfigurationException("Could not load filter", e);
-171 }
-172
-173 LOG.info("Loading Metadata for " + displayName);
-174try {
-175int delay;
-176 delay = 30000;
-177if (null != delayString && !"".equals(delayString)) {
-178 delay = Integer.parseInt(delayString);
-179 }
-180
-181 URL url = new URL(location);
-182if ("file".equalsIgnoreCase(url.getProtocol())){
-183 FilesystemMetadataProvider provider = new FilesystemMetadataProvider(new File(url.getFile()));
-184 provider.setParserPool(parserPool);
-185if (null != filterChain) {
-186 provider.setMetadataFilter(filterChain);
-187 }
-188 provider.initialize();
-189 metadata = provider;
-190 } else {
-191if (spoolSpace == null || "".equals(spoolSpace)) {
-192thrownewShibbolethConfigurationException("backingFile must be specified for " + identifier);
-193 }
-194
-195 FileBackedHTTPMetadataProvider provider;
-196
-197 provider = new FileBackedHTTPMetadataProvider(location, delay, spoolSpace);
-198 provider.setParserPool(parserPool);
-199if (null != filterChain) {
-200 provider.setMetadataFilter(filterChain);
-201 }
-202 provider.initialize();
-203 metadata = provider;
-204 }
-205 } catch (MetadataProviderException e) {
-206thrownewShibbolethConfigurationException("Could not read " + location, e);
-207 } catch (NumberFormatException e) {
-208thrownewShibbolethConfigurationException("Badly formed timeout " + delayString, e);
-209 } catch (MalformedURLException e) {
-210thrownewShibbolethConfigurationException("Badly formed url ", e);
-211 }
-212 metadata.getObservers().add(this);
-213 onEvent(metadata);
-214 }
-215
-216/**
-217 * Based on 1.2 Origin.isMatch. There must have been a reason for it...
-218 * [Kindas of] support for the search function in the wayf. This return many false positives
-219 * but given the aim is to provide input for a pull down list...
-220 *
-221 * @param entity The entity to match.
-222 * @param str The patten to match against.
-223 * @param config Provides list of tokens to not lookup
-224 * @return Whether this entity matches
-225 */
-226
-227privatestaticboolean isMatch(EntityDescriptor entity, String str, HandlerConfig config) {
-228
-229 Enumeration input = new StringTokenizer(str);
-230while (input.hasMoreElements()) {
-231 String currentToken = (String) input.nextElement();
-232
-233if (config.isIgnoredForMatch(currentToken)) {
-234continue;
-235 }
-236
-237 currentToken = currentToken.toLowerCase();
-238
-239if (entity.getEntityID().indexOf(currentToken) > -1) {
-240returntrue;
-241 }
-242
-243 Organization org = entity.getOrganization();
-244
-245if (org != null) {
-246
-247 List <OrganizationName> orgNames = org.getOrganizationNames();
-248for (OrganizationName name : orgNames) {
-249if (name.getName().getLocalString().indexOf(currentToken) > -1) {
-250returntrue;
-251 }
-252 }
-253
-254 List <OrganizationDisplayName> orgDisplayNames = org.getDisplayNames();
-255for (OrganizationDisplayName name : orgDisplayNames) {
-256if (name.getName().getLocalString().indexOf(currentToken) > -1) {
-257returntrue;
-258 }
-259 }
-260 }
-261 }
-262return false;
-263 }
-264
-265/**
-266 * Return all the Idp in the provided entities descriptor. If SearchMatches
-267 * is non null it is populated with whatever of the IdPs matches the search string
-268 * (as noted above).
-269 * @param searchString to match with
-270 * @param config parameter to mathing
-271 * @param searchMatches if non null is filled with such of the sites which match the string
-272 * @return the sites which fit.
-273 */
-274protected Map<String, IdPSite> getIdPSites(String searchString,
-275HandlerConfig config,
-276 Collection<IdPSite> searchMatches)
-277 {
-278 XMLObject object;
-279 List <EntityDescriptor> entities;
-280try {
-281 object = metadata.getMetadata();
-282 } catch (MetadataProviderException e) {
-283 LOG.error("Metadata for " + location + "could not be read", e);
-284returnnull;
-285 }
-286
-287if (object == null) {
-288returnnull;
-289 }
-290
-291//
-292// Fill in entities approptiately
-293//
-294
-295if (object instanceof EntityDescriptor) {
-296 entities = new ArrayList<EntityDescriptor>(1);
-297 entities.add((EntityDescriptor) object);
-298 } elseif (object instanceof EntitiesDescriptor) {
-299
-300 EntitiesDescriptor entitiesDescriptor = (EntitiesDescriptor) object;
-301
-302 entities = entitiesDescriptor.getEntityDescriptors();
-303 } else {
-304returnnull;
-305 }
-306
-307//
-308// populate the result (and the searchlist) from the entities list
-309//
-310
-311 TreeMap<String, IdPSite> result = new TreeMap <String,IdPSite>();
-312
-313for (EntityDescriptor entity : entities) {
-314
-315if (entity.isValid() && hasIdPRole(entity)) {
-316
-317IdPSite site = newIdPSite(entity);
-318 result.put(site.getName(), site);
-319if (searchMatches != null && isMatch(entity, searchString, config)) {
-320
-321 searchMatches.add(site);
-322 }
-323
-324 }
-325 } // iterate over all entities
-326return result;
-327 }
-328
-329
-330/**
-331 * Return this sites (internal) identifier.
-332 * @return the identifier
-333 */
-334protected String getIdentifier() {
-335return identifier;
-336 }
-337
-338/**
-339 * Return the human friendly name for this siteset.
-340 * @return The friendly name
-341 */
-342protected String getDisplayName() {
-343return displayName;
-344 }
-345
-346/**
-347 * We do not need to look at a set if it doesn't know about the given SP. However if
-348 * no SP is given (as per 1.1) then we do need to look. This calls lets us know whether
-349 * this set is a canddiate for looking into.
-350 * @param SPName the Sp we are interested in.
-351 * @return whether the site contains the SP.
-352 */
-353protectedboolean containsSP(String SPName) {
-354
-355//
-356// Deal with the case where we do *not* want to search by
-357// SP (also handles the 1.1 case)
-358//
-359
-360if ((SPName == null) || (SPName.length() == 0)) {
-361returntrue;
-362 }
-363
-364//
-365// Get hold of the current object list so as to provoke observer to fire
-366// if needs be.
-367//
-368
-369 XMLObject object;
-370try {
-371 object = metadata.getMetadata();
-372 } catch (MetadataProviderException e) {
-373return false;
-374 }
-375//
-376// Now lookup
-377//
-378
-379if (object instanceof EntitiesDescriptor ||
-380 object instanceof EntityDescriptor) {
-381return spNames.contains(SPName);
-382 } else {
-383return false;
-384 }
-385 }
-386
-387/**
-388 * For plugin handling we need to know quickly if a metadataset contains the idp.
-389 * @param IdPName the IdP we are interested in.
-390 * @return whether the site contains the IdP.
-391 *
-392 */
-393
-394protectedboolean containsIdP(String IdPName) {
-395
-396if ((IdPName == null) || (IdPName.length() == 0)) {
-397returntrue;
-398 }
-399
-400//
-401// Get hold of the current object list so as to provoke observer to fire
-402// if needs be.
-403//
-404
-405 XMLObject object;
-406try {
-407 object = metadata.getMetadata();
-408 } catch (MetadataProviderException e) {
-409return false;
-410 }
-411if (object instanceof EntitiesDescriptor ||
-412 object instanceof EntityDescriptor) {
-413return idpNames.contains(IdPName);
-414 } else {
-415return false;
-416 }
-417 }
-418
-419//
-420// Now deal with plugins - these are delcared to use but we are
-421// responsible for their parameter
-422//
-423
-424/**
-425 * Declares a plugin to the siteset.
-426 * @param plugin what to declare
-427 */
-428protectedvoid addPlugin(Plugin plugin) {
-429
-430if (plugins.containsKey(plugin)) {
-431return;
-432 }
-433
-434PluginMetadataParameter param = plugin.refreshMetadata(metadata);
-435
-436 plugins.put(plugin, param);
-437 }
-438
-439/**
-440 * Return the parameter that this plugin uses.
-441 * @param plugin
-442 * @return teh parameter.
-443 */
-444protectedPluginMetadataParameter paramFor(Plugin plugin) {
-445return plugins.get(plugin);
-446 }
-447
-448
-449/* (non-Javadoc)
-450 * @see org.opensaml.saml2.metadata.provider.ObservableMetadataProvider.Observer#onEvent(org.opensaml.saml2.metadata.provider.MetadataProvider)
-451 */
-452publicvoid onEvent(MetadataProvider provider) {
-453 Set<String> spNameSet = new HashSet<String>(0);
-454 Set<String> idpNameSet = new HashSet<String>(0);
-455
-456 XMLObject obj;
-457try {
-458 obj = provider.getMetadata();
-459 } catch (MetadataProviderException e) {
-460 LOG.error("Couldn't read metadata for " + location, e);
-461return;
-462 }
-463if ((obj instanceof EntitiesDescriptor)) {
-464 EntitiesDescriptor entitiesDescriptor = (EntitiesDescriptor) obj;
-465
-466for (EntityDescriptor entity : entitiesDescriptor.getEntityDescriptors()) {
-467if (hasSPRole(entity)) {
-468 spNameSet.add(entity.getEntityID());
-469 }
-470if (hasIdPRole(entity)) {
-471 idpNameSet.add(entity.getEntityID());
-472 }
-473 }
-474 } elseif (obj instanceof EntityDescriptor) {
-475 EntityDescriptor entity = (EntityDescriptor) obj;
-476if (hasSPRole(entity)) {
-477 spNameSet.add(entity.getEntityID());
-478 }
-479if (hasIdPRole(entity)) {
-480 idpNameSet.add(entity.getEntityID());
-481 }
-482 } else {
-483 LOG.error("Metadata for " + location + " isn't <EntitiesDescriptor> or <EntityDescriptor>");
-484return;
-485 }
-486//
-487// Now that we have the new set sorted out commit it in
-488//
-489this.spNames = spNameSet;
-490this.idpNames = idpNameSet;
-491
-492for (Plugin plugin:plugins.keySet()) {
-493 plugins.put(plugin, plugin.refreshMetadata(provider));
-494 }
-495 }
-496
-497/**
-498 * Enumerate all the roles and see whether this entity can be an IdP.
-499 * @param entity
-500 * @return true if one of the roles that entity has is IdPSSO
-501 */
-502privatestaticboolean hasIdPRole(EntityDescriptor entity) {
-503 List<RoleDescriptor> roles = entity.getRoleDescriptors();
-504
-505for (RoleDescriptor role:roles) {
-506if (role instanceof IDPSSODescriptor) {
-507//
-508// So the entity knows how to be some sort of an Idp
-509//
-510returntrue;
-511 }
-512 }
-513return false;
-514 }
-515
-516/**
-517 * Enumerate all the roles and see whether this entity can be an SP.
-518 * @param entity
-519 * @return true if one of the roles that entity has is SPSSO
-520 */
-521privatestaticboolean hasSPRole(EntityDescriptor entity) {
-522 List<RoleDescriptor> roles = entity.getRoleDescriptors();
-523
-524for (RoleDescriptor role:roles) {
-525if (role instanceof SPSSODescriptor) {
-526//
-527// "I can do that"
-528//
-529returntrue;
-530 }
-531 }
-532return false;
-533 }
-534
-535/**
-536 * Return the idpSite for the given entity name.
-537 * @param idpName the entityname to look up
-538 * @return the associated idpSite
-539 * @throws WayfException
-540 */
-541protectedIdPSite getSite(String idpName) throws WayfException {
-542
-543try {
-544returnnewIdPSite(metadata.getEntityDescriptor(idpName));
-545 } catch (MetadataProviderException e) {
-546 String s = "Couldn't resolve " + idpName + " in " + getDisplayName();
-547 LOG.error(s, e);
-548thrownewWayfException(s, e);
-549 }
-550 }
-551
-552protected EntityDescriptor getEntity(String name) throws WayfException {
-553try {
-554return metadata.getEntityDescriptor(name);
-555 } catch (MetadataProviderException e) {
-556 String s = "Couldn't resolve " + name + " in " + getDisplayName();
-557 LOG.error(s, e);
-558thrownewWayfException(s, e);
-559 }
-560
-561 }
-562 }
-563
-
-
-1/*
-2 * Copyright [2005] [University Corporation for Advanced Internet Development, Inc.]
-3 *
-4 * Licensed under the Apache License, Version 2.0 (the "License");
-5 * you may not use this file except in compliance with the License.
-6 * You may obtain a copy of the License at
-7 *
-8 * http://www.apache.org/licenses/LICENSE-2.0
-9 *
-10 * Unless required by applicable law or agreed to in writing, software
-11 * distributed under the License is distributed on an "AS IS" BASIS,
-12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-13 * See the License for the specific language governing permissions and
-14 * limitations under the License.
-15 */
-16package edu.internet2.middleware.shibboleth.wayf;
-17
-18import java.util.Collection;
-19/**
-20 * This is just a container class for tieing together a set of IdPs to a name - this being what
-21 * is sent to the JSP for display purposes.
-22 */
-23publicclassIdPSiteSetEntry {
-24
-25/** The metadata provider. */
-26privatefinalIdPSiteSet siteSet;
-27
-28/** The IdPs associated with that metadata provider. */
-29privatefinal Collection<IdPSite> sites;
-30
-31/**
-32 * Create an object which contains just these two objects.
-33 * @param siteSetParam the metadata provider.
-34 * @param sitesParam the list of IdPs.
-35 */
-36publicIdPSiteSetEntry(IdPSiteSet siteSetParam, Collection<IdPSite> sitesParam) {
-37this.siteSet = siteSetParam;
-38this.sites = sitesParam;
-39 }
-40
-41/**
-42 * Return something to display for this set of sites.
-43 * @return the name as defined in the configuration
-44 */
-45public String getName() {
-46return siteSet.getDisplayName();
-47 }
-48
-49/**
-50 * Return the list of associated sites.
-51 * @return a collection of IdPs.
-52 */
-53public Collection<IdPSite> getSites() {
-54return sites;
-55 }
-56
-57 }
-
-
-1/*
-2 * Copyright [2007] [University Corporation for Advanced Internet Development, Inc.]
-3 *
-4 * Licensed under the Apache License, Version 2.0 (the "License");
-5 * you may not use this file except in compliance with the License.
-6 * You may obtain a copy of the License at
-7 *
-8 * http://www.apache.org/licenses/LICENSE-2.0
-9 *
-10 * Unless required by applicable law or agreed to in writing, software
-11 * distributed under the License is distributed on an "AS IS" BASIS,
-12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-13 * See the License for the specific language governing permissions and
-14 * limitations under the License.
-15 */
-16
-17package edu.internet2.middleware.shibboleth.wayf;
-18
-19import java.util.Timer;
-20
-21import org.opensaml.util.resource.FilesystemResource;
-22import org.opensaml.util.resource.Resource;
-23import org.opensaml.util.resource.ResourceChangeWatcher;
-24import org.opensaml.util.resource.ResourceException;
-25import org.slf4j.LoggerFactory;
-26
-27import ch.qos.logback.classic.LoggerContext;
-28import ch.qos.logback.core.status.ErrorStatus;
-29import ch.qos.logback.core.status.StatusManager;
-30
-31/**
-32 * Simple logging service that watches for logback configuration file changes and reloads the file when a change occurs.
-33 */
-34publicclassLogbackLoggingService {
-35
-36/** Timer used periodically read the logging configuration file. */
-37private Timer taskTimer;
-38
-39/**
-40 * Constructor.
-41 *
-42 * @param loggingConfigurationFile logback configuration file
-43 * @param pollingFrequency frequency the configuration file should be checked for changes
-44 */
-45publicLogbackLoggingService(String loggingConfigurationFile, long pollingFrequency) {
-46 LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
-47 StatusManager statusManager = loggerContext.getStatusManager();
-48
-49try{
-50 Resource configResource = new FilesystemResource(loggingConfigurationFile);
-51LogbackConfigurationChangeListener configChangeListener = newLogbackConfigurationChangeListener();
-52 configChangeListener.onResourceCreate(configResource);
-53
-54 ResourceChangeWatcher resourceWatcher = new ResourceChangeWatcher(configResource, pollingFrequency, 5);
-55 resourceWatcher.getResourceListeners().add(configChangeListener);
-56
-57 taskTimer = new Timer(true);
-58 taskTimer.schedule(resourceWatcher, 0, pollingFrequency);
-59 }catch(ResourceException e){
-60 statusManager.add(new ErrorStatus("Error loading logging configuration file: "
-61 + loggingConfigurationFile, this, e));
-62 }
-63 }
-64 }
-
-
-1/*
-2 * Copyright 2008 University Corporation for Advanced Internet Development, Inc.
-3 *
-4 * Licensed under the Apache License, Version 2.0 (the "License");
-5 * you may not use this file except in compliance with the License.
-6 * You may obtain a copy of the License at
-7 *
-8 * http://www.apache.org/licenses/LICENSE-2.0
-9 *
-10 * Unless required by applicable law or agreed to in writing, software
-11 * distributed under the License is distributed on an "AS IS" BASIS,
-12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-13 * See the License for the specific language governing permissions and
-14 * limitations under the License.
-15 */
-16
-17package edu.internet2.middleware.shibboleth.wayf;
-18
-19/** Class for printing the version of this library. */
-20publicclassVersion {
-21
-22/**
-23 * Main entry point to program.
-24 *
-25 * @param args command line arguments
-26 */
-27publicstaticvoid main(String[] args) {
-28 Package pkg = Version.class.getPackage();
-29 System.out.println(pkg.getImplementationTitle() + " version " + pkg.getImplementationVersion());
-30 }
-31 }
-
-
-1/*
-2 * Copyright [2005] [University Corporation for Advanced Internet Development, Inc.]
-3 *
-4 * Licensed under the Apache License, Version 2.0 (the "License");
-5 * you may not use this file except in compliance with the License.
-6 * You may obtain a copy of the License at
-7 *
-8 * http://www.apache.org/licenses/LICENSE-2.0
-9 *
-10 * Unless required by applicable law or agreed to in writing, software
-11 * distributed under the License is distributed on an "AS IS" BASIS,
-12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-13 * See the License for the specific language governing permissions and
-14 * limitations under the License.
-15 */
-16
-17package edu.internet2.middleware.shibboleth.wayf;
-18
-19
-20/**
-21 * Signals that an error has occurred while processing a Shibboleth WAYF request.
-22 *
-23 * @author Walter Hoehn wassa@columbia.edu
-24 */
-25
-26publicclassWayfExceptionextends Exception {
-27
-28/** Required serialization constant. */
-29privatestaticfinallong serialVersionUID = 8426660801169338914L;
-30
-31/**
-32 * Constructor with a description and an exception.
-33 * @param s description
-34 * @param e something bad having happened.
-35 */
-36publicWayfException(String s, Throwable e) {
-37super(s, e);
-38 }
-39
-40/**
-41 * Constructure with just a description.
-42 * @param s description
-43 */
-44publicWayfException(String s) {
-45super(s);
-46 }
-47 }
-
-
-1/*
-2 * Copyright [2005] [University Corporation for Advanced Internet Development, Inc.]
-3 *
-4 * Licensed under the Apache License, Version 2.0 (the "License");
-5 * you may not use this file except in compliance with the License.
-6 * You may obtain a copy of the License at
-7 *
-8 * http://www.apache.org/licenses/LICENSE-2.0
-9 *
-10 * Unless required by applicable law or agreed to in writing, software
-11 * distributed under the License is distributed on an "AS IS" BASIS,
-12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-13 * See the License for the specific language governing permissions and
-14 * limitations under the License.
-15 */
-16
-17package edu.internet2.middleware.shibboleth.wayf;
-18
-19/**
-20 * Holder class for various XML constants (namespaces and so forth).
-21 */
-22publicclassXMLConstants {
-23
-24/** Shibboleth XML namespace. */
-25publicstaticfinal String SHIB_NS = "urn:mace:shibboleth:1.0";
-26
-27/** SSO Binding name. */
-28publicstaticfinal String IDP_SSO_BINDING = "urn:mace:shibboleth:1.0:profiles:AuthnRequest";
-29
-30/** Namespace for Discovery Service configuration. */
-31publicstaticfinal String CONFIG_NS = "urn:mace:shibboleth:wayf:config:1.0";
-32
-33 }
-
-
-1/**
-2 * Copyright [2006] [University Corporation for Advanced Internet Development, Inc.]
-3 *
-4 * Licensed under the Apache License, Version 2.0 (the "License");
-5 * you may not use this file except in compliance with the License.
-6 * You may obtain a copy of the License at
-7 *
-8 * http://www.apache.org/licenses/LICENSE-2.0
-9 *
-10 * Unless required by applicable law or agreed to in writing, software
-11 * distributed under the License is distributed on an "AS IS" BASIS,
-12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-13 * See the License for the specific language governing permissions and
-14 * limitations under the License.
-15 */
-16package edu.internet2.middleware.shibboleth.wayf.plugins;
-17
-18import java.util.Collection;
-19import java.util.List;
-20import java.util.Map;
-21
-22import javax.servlet.http.HttpServletRequest;
-23import javax.servlet.http.HttpServletResponse;
-24
-25import org.opensaml.saml2.metadata.provider.MetadataProvider;
-26
-27import edu.internet2.middleware.shibboleth.wayf.IdPSite;
-28
-29/**
-30 *
-31 * The Plugin interface is used to affect the 'hints' that the WAYF offers to the users.
-32 * <p>
-33 * The WAYF can register any number of plugins. Each plugin is called when the metadata is loaded or realoaded
-34 * (so it can do any indexing) and at the three entry points into the WAYF - Lookup (main entry), Search and Select.
-35 * Plugins are called in the order in which they are declared to the WAYF.
-36 * <p>
-37 * Each plugin is called once when the user has made a selection.
-38 * <p>
-39 * For Search and Lookup, each plugin is called multiple times, once for each metadata provider which has
-40 * been declared to this particular WAYF instance. The plugin can return a context which is handed to subsequent calls.
-41 * <p>
-42 * The idea is that each plugin can affect the displayed lists of IdPs. As a reminder the WAYF displays two lists of
-43 * IdPs - the complete list, displayed either as a single list or a list of lists, and the hint list (which was
-44 * previously only populated from the _saml_idp cookie. In the search case the WAYF displays a third list of
-45 * the search hits.
-46 * <p>
-47 * When the plugin in called it is given the current set of potential IdPs as a Map from EntityID to {@link IdPSite}
-48 * and lists representing the current hint list and search results. A Plugin can remove an entry from
-49 * the map or the lists. Additionally it can insert an IdPSite found in the Map into the hint or search lists.
-50 * Thus the plugin can restrict the number of sites that the WAYF instance displays in the 'complete list' and
-51 * can add or remove IdPs from the hint list.
-52 * <p>
-53 * At any stage the plugin can take control of the current request and redirect or forward it. It signals that
-54 * it has done this to the WAYF by means of an exception.
-55 * <p>
-56 * The _saml_idp cookie handling code is written as a WAYF plugin. Other plugins have been written to allow IdPs
-57 * to be presented as hints based on the client's IP address or to redirect back to the SP once the choice of
-58 * IdP has been made.
-59 * <p>
-60 * Object implementing this interface are created during WAYF discovery service initialization. There are
-61 * expected to implement a constructor which takes a {@link org.w3c.dom.Element} as the only parameter and they are
-62 * created via this constructor, with the parameter being the appropriate section of the WAYF configuration file
-63 *
-64 * @version Discussion
-65 *
-66 */
-67publicinterfacePlugin {
-68
-69/**
-70 * Whenever the WAYF discoveres that the metadata is stale, it reloads it and calls each plugin at this method.
-71 *
-72 * @param metadata - where to get the data from.
-73 * @return the value which will be provided as input to subsequent calls to {@link #lookup Lookup} and
-74 * {@link #search Search}
-75 */
-76PluginMetadataParameter refreshMetadata(MetadataProvider metadata);
-77
-78/**
-79 * The WAYF calls each plugin at this entry point when it is first contacted.
-80 *
-81 * @param req - Describes the current request. A Plugin might use it to find any appropriate cookies
-82 * @param res - Describes the current response. A Plugin might use it to redirect a the request.
-83 * @param parameter Describes the metadata.
-84 * @param context Any processing context returned from a previous call.
-85 * @param validIdps The list of IdPs which is currently views as possibly matches for the pattern.
-86 * The Key is the EntityId for the IdP and the value the object which describes
-87 * the Idp
-88 * @param idpList The set of Idps which are currently considered as potential hints.
-89 * @return a context to hand to subsequent calls
-90 * @throws WayfRequestHandled if the plugin has handled the request (for instance it has
-91 * issues a redirect)
-92 *
-93 * Each plugin is called multiple times,
-94 * once for each metadata provider which is registered (Depending on the precise configuration of the WAYF
-95 * metadata providers whose metadata does not include the target may be dropped). Initially the plugin is
-96 * called with a context parameter of <code>null</code>. In subsequent calls, the value returned from
-97 * the previous call is passed in as the context parameter.
-98 *
-99 * The plugin may remove IdPSite objects from the validIdps list.
-100 *
-101 * The plugin may add or remove them to the idpList. IdPSite Objects which are to be added to the idpList
-102 * should be looked up by EntityIdName in validIdps by EntityId. Hence any metadata processing shoudl
-103 * store the entityID.
-104 *
-105 */
-106PluginContext lookup(HttpServletRequest req,
-107 HttpServletResponse res,
-108PluginMetadataParameter parameter,
-109 Map<String, IdPSite> validIdps,
-110PluginContext context,
-111 List<IdPSite> idpList) throws WayfRequestHandled;
-112
-113/**
-114 * This method is called when the user specified a search operation. The processing is similar to
-115 * that described for {@link #lookup lookup}.
-116 * Two additional paramaters are provided, the search parameter which was provided, and the current
-117 * proposed list of candidate IdPs. The plugin is at liberty to alter both the list of hints and the
-118 * list of valid IdPs.
-119 *
-120 * @param req Describes the current request. The Plugin could use it to find any appropriate cookies
-121 * @param res Describes the result - this is needed if (for instance) a plung needs to change cookie values
-122 * @param parameter Describes the metadata
-123 * @param pattern The Search pattern provided
-124 * @param validIdps The list of IdPs which is currently views as possibly matches for the pattern.
-125 * The Key is the Idp Name an the value the idp
-126 * @param context Any processing context returned from a previous call.
-127 * @param searchResult the resukt of any search
-128 * @param idpList The set of Idps which are currently considered as potential hints. Each Idp is associated
-129 * with a numeric weight, where the lower the number is the more likely the IdP is to be a candidate.
-130 * As descibed above the WAYF uses this to provide hint list to the GUI (or even to dispatch
-131 * immediately to the IdP).
-132 * @return a context to hand to subsequent calls
-133 * @throws WayfRequestHandled if the plugin has handled the request (for instance it has
-134 * issues a redirect)
-135 */
-136PluginContext search(HttpServletRequest req,
-137 HttpServletResponse res,
-138PluginMetadataParameter parameter,
-139 String pattern,
-140 Map<String, IdPSite> validIdps,
-141PluginContext context,
-142 Collection<IdPSite> searchResult,
-143 List<IdPSite> idpList) throws WayfRequestHandled;
-144
-145/**
-146 * This method is called, for every plugin, after a user has selected an IdP. The plugin is expected
-147 * to use it to update any in memory state (via the {@link PluginMetadataParameter} parameter or permananent
-148 * state (for instance by writing back a cookie.
-149 * @param req Describes the current request.
-150 * @param res Describes the current response
-151 * @param parameter Describes the metadata
-152 * @throws WayfRequestHandled if the plugin has handled the request (for instance it has
-153 * issues a redirect)
-154 */
-155void selected(HttpServletRequest req,
-156 HttpServletResponse res,
-157PluginMetadataParameter parameter,
-158 String idP) throws WayfRequestHandled;
-159 }
-
-
-1/**
-2 * Copyright [2006] [University Corporation for Advanced Internet Development, Inc.]
-3 *
-4 * Licensed under the Apache License, Version 2.0 (the "License");
-5 * you may not use this file except in compliance with the License.
-6 * You may obtain a copy of the License at
-7 *
-8 * http://www.apache.org/licenses/LICENSE-2.0
-9 *
-10 * Unless required by applicable law or agreed to in writing, software
-11 * distributed under the License is distributed on an "AS IS" BASIS,
-12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-13 * See the License for the specific language governing permissions and
-14 * limitations under the License.
-15 */
-16
-17package edu.internet2.middleware.shibboleth.wayf.plugins;
-18
-19/**
-20 * This is a marker interface.
-21 * <p>
-22 * Objects which implement PluginContext are passed between sucessive calls to a plugins implementations of
-23 * {@link Plugin#lookup lookup} and {@link Plugin#search search} as the plugin
-24 * is called for each {@link org.opensaml.saml2.metadata.provider.MetadataProvider}.
-25 * <p>
-26 * @author Rod Widdowson
-27 * @version Discussion
-28 */
-29publicinterfacePluginContext {
-30
-31 }
-
-
-1/**
-2 * Copyright [2006] [University Corporation for Advanced Internet Development, Inc.]
-3 *
-4 * Licensed under the Apache License, Version 2.0 (the "License");
-5 * you may not use this file except in compliance with the License.
-6 * You may obtain a copy of the License at
-7 *
-8 * http://www.apache.org/licenses/LICENSE-2.0
-9 *
-10 * Unless required by applicable law or agreed to in writing, software
-11 * distributed under the License is distributed on an "AS IS" BASIS,
-12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-13 * See the License for the specific language governing permissions and
-14 * limitations under the License.
-15 */
-16package edu.internet2.middleware.shibboleth.wayf.plugins;
-17
-18
-19/**
-20 * The PluginParameter is a marker interface which a WAYF {@link Plugin} can use to associate extra information
-21 * with the metadata. Each plugin returns a PluginParameter from {@link Plugin#refreshMetadata RefreshMetadata}
-22 * and this is in turn presented back to then Plugin when it is called during WAYF processing.
-23 * <p>
-24 * @author Rod Widdowson
-25 * @version Discussion
-26 *
-27 */
-28publicinterfacePluginMetadataParameter {
-29
-30 }
-
-
-1package edu.internet2.middleware.shibboleth.wayf.plugins;
-2
-3/**
-4 *
-5 * This Exception can be signalled by a plugin to indicate to the WAYF that it has handled the
-6 * request and all processing should stop.
-7 *
-8 * @author Rod Widdowson
-9 */
-10publicclassWayfRequestHandledextends Exception {
-11
-12/**
-13 * Required Serialization constant.
-14 */
-15privatestaticfinallong serialVersionUID = 3022489208153734092L;
-16
-17 }
-
-
-1/*
-2 * Copyright 2008 University Corporation for Advanced Internet Development, Inc.
-3 *
-4 * Licensed under the Apache License, Version 2.0 (the "License");
-5 * you may not use this file except in compliance with the License.
-6 * You may obtain a copy of the License at
-7 *
-8 * http://www.apache.org/licenses/LICENSE-2.0
-9 *
-10 * Unless required by applicable law or agreed to in writing, software
-11 * distributed under the License is distributed on an "AS IS" BASIS,
-12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-13 * See the License for the specific language governing permissions and
-14 * limitations under the License.
-15 */
-16
-17package edu.internet2.middleware.shibboleth.wayf.plugins.provider;
-18
-19import java.util.Iterator;
-20import java.util.List;
-21
-22import org.opensaml.saml2.common.Extensions;
-23import org.opensaml.saml2.metadata.EntitiesDescriptor;
-24import org.opensaml.saml2.metadata.EntityDescriptor;
-25import org.opensaml.saml2.metadata.RoleDescriptor;
-26import org.opensaml.saml2.metadata.SPSSODescriptor;
-27import org.opensaml.saml2.metadata.provider.FilterException;
-28import org.opensaml.saml2.metadata.provider.MetadataFilter;
-29import org.opensaml.xml.XMLObject;
-30import org.slf4j.Logger;
-31import org.slf4j.LoggerFactory;
-32
-33import edu.internet2.middleware.shibboleth.wayf.DiscoveryResponseImpl;
-34import edu.internet2.middleware.shibboleth.wayf.HandlerConfig;
-35
-36/**
-37 * See SDSJ-48. If we get a DS endpoint then we need to check that the binding is provided
-38 * and that it is correct.
-39 *
-40 * @author Rod Widdowson
-41 *
-42 */
-43publicclassBindingFilter implements MetadataFilter {
-44
-45/**
-46 * Log for the warning.
-47 */
-48privatestaticfinal Logger LOG = LoggerFactory.getLogger(BindingFilter.class.getName());
-49
-50/**
-51 * Set if we just want to warn on failure.
-52 */
-53privatefinalboolean warnOnFailure;
-54
-55/**
-56 * Only the protected constructor should be visible.
-57 */
-58privateBindingFilter() {
-59this.warnOnFailure = false;
-60 }
-61
-62/**
-63 * Initialize the filter.
-64 * @param warn do we warn or do we fail if we see badness?
-65 */
-66publicBindingFilter(boolean warn) {
-67this.warnOnFailure = warn;
-68 }
-69
-70/**
-71 * Apply the filter.
-72 * @see org.opensaml.saml2.metadata.provider.MetadataFilter#doFilter(org.opensaml.xml.XMLObject)
-73 * @param metadata what to filter.
-74 * @throws FilterException if it sees any missed or bad bindings.
-75 */
-76publicvoid doFilter(XMLObject metadata) throws FilterException {
-77
-78if (metadata instanceof EntitiesDescriptor) {
-79
-80 checkEntities((EntitiesDescriptor) metadata);
-81
-82 } elseif (metadata instanceof EntityDescriptor) {
-83 EntityDescriptor entity = (EntityDescriptor) metadata;
-84
-85if (!checkEntity(entity)) {
-86if (warnOnFailure) {
-87 LOG.warn("Badly formatted binding for " + entity.getEntityID());
-88 } else {
-89 LOG.error("Badly formatted binding for top level entity " + entity.getEntityID());
-90 }
-91 }
-92 }
-93 }
-94
-95/**
-96 * If the entity has an SP characteristic, and it has a DS endpoint
-97 * then check its binding.
-98 *
-99 * @param entity what to check.
-100 * @return true if all is OK.
-101 */
-102privatestaticboolean checkEntity(EntityDescriptor entity) {
-103 List<RoleDescriptor> roles = entity.getRoleDescriptors();
-104
-105for (RoleDescriptor role:roles) {
-106
-107//
-108// Check every role
-109//
-110if (role instanceof SPSSODescriptor) {
-111
-112//
-113// Grab hold of all the extensions for SPSSO descriptors
-114//
-115
-116 Extensions exts = role.getExtensions();
-117if (exts != null) {
-118//
-119// We have some children check them form <DiscoveryResponse>
-120//
-121 List<XMLObject> children = exts.getOrderedChildren();
-122
-123for (XMLObject obj : children) {
-124if (obj instanceof DiscoveryResponseImpl) {
-125//
-126// And check or the binding
-127//
-128DiscoveryResponseImpl ds = (DiscoveryResponseImpl) obj;
-129 String binding = ds.getBinding();
-130
-131if (!DiscoveryResponseImpl.METADATA_NS.equals(binding)) {
-132return false;
-133 }
-134 }
-135 }
-136 }
-137 }
-138 }
-139returntrue;
-140 }
-141
-142/**
-143 * Check an EntitiesDescriptor call checkentities for the Entities and ourselves
-144 * recursively for the EntitesDescriptors.
-145 *
-146 * @param entities what to check.
-147 */
-148privatevoid checkEntities(EntitiesDescriptor entities) {
-149 List<EntitiesDescriptor> childEntities = entities.getEntitiesDescriptors();
-150 List<EntityDescriptor> children = entities.getEntityDescriptors();
-151
-152if (children != null) {
-153 Iterator<EntityDescriptor> itr;
-154 EntityDescriptor entity;
-155 itr = children.iterator();
-156
-157while (itr.hasNext()) {
-158 entity = itr.next();
-159if (!checkEntity(entity)) {
-160if (warnOnFailure) {
-161 LOG.warn("Badly formatted binding for " + entity.getEntityID());
-162 } else {
-163 LOG.error("Badly formatted binding for " + entity.getEntityID() + ". Entity has been removed");
-164 itr.remove();
-165 }
-166 }
-167 }
-168 }
-169
-170if (childEntities != null) {
-171for (EntitiesDescriptor descriptor : childEntities) {
-172 checkEntities(descriptor);
-173 }
-174 }
-175 }
-176 }
-
-
-1package edu.internet2.middleware.shibboleth.wayf.plugins.provider;
-2
-3import java.io.UnsupportedEncodingException;
-4import java.net.URLDecoder;
-5import java.net.URLEncoder;
-6import java.util.ArrayList;
-7import java.util.Collection;
-8import java.util.Iterator;
-9import java.util.List;
-10import java.util.Map;
-11
-12import javax.servlet.http.Cookie;
-13import javax.servlet.http.HttpServletRequest;
-14import javax.servlet.http.HttpServletResponse;
-15
-16import org.apache.log4j.Logger;
-17import org.opensaml.saml2.metadata.provider.MetadataProvider;
-18import org.opensaml.xml.util.Base64;
-19import org.w3c.dom.Element;
-20
-21import edu.internet2.middleware.shibboleth.wayf.DiscoveryServiceHandler;
-22import edu.internet2.middleware.shibboleth.wayf.IdPSite;
-23import edu.internet2.middleware.shibboleth.wayf.WayfException;
-24import edu.internet2.middleware.shibboleth.wayf.plugins.Plugin;
-25import edu.internet2.middleware.shibboleth.wayf.plugins.PluginContext;
-26import edu.internet2.middleware.shibboleth.wayf.plugins.PluginMetadataParameter;
-27import edu.internet2.middleware.shibboleth.wayf.plugins.WayfRequestHandled;
-28
-29/**
-30 * This is a test implementation of the saml cookie lookup stuff to
-31 * see whether it fits the plugin architecture.
-32 *
-33 * @author Rod Widdowson
-34 *
-35 */
-36publicclassSamlCookiePlugin implements Plugin {
-37
-38/**
-39 * The parameter which controls the cache.
-40 */
-41privatestaticfinal String PARAMETER_NAME = "cache";
-42
-43/**
-44 * Parameter to say make it last a long time.
-45 */
-46privatestaticfinal String PARAMETER_PERM = "perm";
-47
-48/**
-49 * Parameter to say just keep this as long as the brower is open.
-50 */
-51privatestaticfinal String PARAMETER_SESSION = "session";
-52
-53/**
-54 * Handle for logging.
-55 */
-56privatestatic Logger log = Logger.getLogger(SamlCookiePlugin.class.getName());
-57
-58/**
-59 * As specified in the SAML2 profiles specification.
-60 */
-61privatestaticfinal String COOKIE_NAME = "_saml_idp";
-62
-63/**
-64 * By default we keep the cookie around for a week.
-65 */
-66privatestaticfinalint DEFAULT_CACHE_EXPIRATION = 6048000;
-67
-68/**
-69 * Do we always go where the cookie tells us, or do we just provide the cookie as a hint.
-70 */
-71privateboolean alwaysFollow;
-72
-73/**
-74 * Is our job to clean up the cookie.
-75 */
-76privateboolean deleteCookie;
-77
-78/**
-79 * Lipservice towards having a common domain cookie.
-80 */
-81private String cacheDomain;
-82
-83/**
-84 * How long the cookie our will be active?
-85 */
-86privateint cacheExpiration;
-87
-88/**
-89 * This constructor is called during wayf initialization with it's
-90 * own little bit of XML config.
-91 *
-92 * @param element - further information to be gleaned from the DOM.
-93 */
-94publicSamlCookiePlugin(Element element) {
-95/*
-96 * <Plugin idenfifier="WayfCookiePlugin"
-97 * type="edu.internet2.middleware.shibboleth.wayf.plugins.provider.SamlCookiePlugin"
-98 * alwaysFollow = "FALSE"
-99 * deleteCookie = "FALSE"
-100 * cacheExpiration = "number"
-101 * cacheDomain = "string"/>
-102 */
-103 log.info("New plugin");
-104 String s;
-105
-106 s = element.getAttribute("alwaysFollow");
-107if (s != null && !s.equals("") ) {
-108 alwaysFollow = Boolean.valueOf(s).booleanValue();
-109 } else {
-110 alwaysFollow = true;
-111 }
-112
-113 s = element.getAttribute("deleteCookie");
-114if (s != null && !s.equals("")) {
-115 deleteCookie = Boolean.valueOf(s).booleanValue();
-116 } else {
-117 deleteCookie = false;
-118 }
-119
-120 s = element.getAttribute("cacheDomain");
-121if ((s != null) && !s.equals("")) {
-122 cacheDomain = s;
-123 } else {
-124 cacheDomain = "";
-125 }
-126
-127 s = element.getAttribute("cacheExpiration");
-128if ((s != null) && !s.equals("")) {
-129
-130try {
-131
-132 cacheExpiration = Integer.parseInt(s);
-133 } catch (NumberFormatException ex) {
-134
-135 log.error("Invalid CacheExpiration value - " + s);
-136 cacheExpiration = DEFAULT_CACHE_EXPIRATION;
-137 }
-138 } else {
-139 cacheExpiration = DEFAULT_CACHE_EXPIRATION;
-140 }
-141 }
-142
-143/**
-144 * Create a plugin with the hard-wired default settings.
-145 */
-146privateSamlCookiePlugin() {
-147 alwaysFollow = false;
-148 deleteCookie = false;
-149 cacheExpiration = DEFAULT_CACHE_EXPIRATION;
-150 }
-151
-152/**
-153 * This is the 'hook' in the lookup part of Discovery Service processing.
-154 *
-155 * @param req - Describes the current request. Used to find any appropriate cookies
-156 * @param res - Describes the current response. Used to redirect the request.
-157 * @param parameter - Describes the metadata.
-158 * @param context - Any processing context returned from a previous call. We set this on first call and
-159 * use non null to indicate that we don't go there again.
-160 * @param validIdps The list of IdPs which is currently views as possibly matches for the pattern.
-161 * The Key is the EntityId for the IdP and the value the object which describes
-162 * the Idp
-163 * @param idpList The set of Idps which are currently considered as potential hints.
-164 * @return a context to hand to subsequent calls
-165 * @throws WayfRequestHandled if the plugin has handled the request.
-166 * issues a redirect)
-167 *
-168 * @see edu.internet2.middleware.shibboleth.wayf.plugins.Plugin#lookup
-169 */
-170publicPluginContext lookup(HttpServletRequest req,
-171 HttpServletResponse res,
-172PluginMetadataParameter parameter,
-173 Map<String, IdPSite> validIdps,
-174PluginContext context,
-175 List <IdPSite> idpList) throws WayfRequestHandled {
-176
-177if (context != null) {
-178//
-179// We only need to be called once
-180//
-181return context;
-182 }
-183
-184if (deleteCookie) {
-185 deleteCookie(req, res);
-186//
-187// Only need to be called once - so set up a parameter
-188//
-189returnnewContext() ;
-190 }
-191 List <String> idps = getIdPCookie(req, res, cacheDomain).getIdPList();
-192
-193for (String idpName : idps) {
-194IdPSite idp = validIdps.get(idpName);
-195if (idp != null) {
-196if (alwaysFollow) {
-197try {
-198 DiscoveryServiceHandler.forwardRequest(req, res, idp);
-199 } catch (WayfException e) {
-200// Do nothing we are going to throw anyway
-201 ;
-202 }
-203thrownewWayfRequestHandled();
-204 }
-205//
-206// This IDP is ok
-207//
-208 idpList.add(idp);
-209 }
-210 }
-211
-212returnnull;
-213 }
-214
-215/**
-216 * Plugin point which is called when the data is refreshed.
-217 * @param metadata - where to get the data from.
-218 * @return the value which will be provided as input to subsequent calls
-219 * @see edu.internet2.middleware.shibboleth.wayf.plugins.Plugin#refreshMetadata
-220 */
-221publicPluginMetadataParameter refreshMetadata(MetadataProvider metadata) {
-222//
-223// We don't care about metadata - we are given all that we need
-224//
-225returnnull;
-226 }
-227
-228/**
-229 * Plgin point for searching.
-230 *
-231 * @throws WayfRequestHandled
-232 * @param req Describes the current request.
-233 * @param res Describes the current response.
-234 * @param parameter Describes the metadata.
-235 * @param pattern What we are searchign for.
-236 * @param validIdps The list of IdPs which is currently views as possibly matches for the pattern.
-237 * The Key is the EntityId for the IdP and the value the object which describes
-238 * the Idp
-239 * @param context Any processing context returned from a previous call. We set this on first call and
-240 * use non null to indicate that we don't go there again.
-241 * @param searchResult What the search yielded.
-242 * @param idpList The set of Idps which are currently considered as potential hints.
-243 * @return a context to hand to subsequent calls.
-244 * @see edu.internet2.middleware.shibboleth.wayf.plugins.Plugin#search
-245 * @throws WayfRequestHandled if the plugin has handled the request.
-246 *
-247 */
-248publicPluginContext search(HttpServletRequest req,
-249 HttpServletResponse res,
-250PluginMetadataParameter parameter,
-251 String pattern,
-252 Map<String, IdPSite> validIdps,
-253PluginContext context,
-254 Collection<IdPSite> searchResult,
-255 List<IdPSite> idpList) throws WayfRequestHandled {
-256//
-257// Don't distinguish between lookup and search
-258//
-259return lookup(req, res, parameter, validIdps, context, idpList);
-260 }
-261
-262/**
-263 * Plugin point for selection.
-264 *
-265 * @see edu.internet2.middleware.shibboleth.wayf.plugins.Plugin#selected(javax.servlet.http.HttpServletRequest.
-266 * javax.servlet.http.HttpServletResponse,
-267 * edu.internet2.middleware.shibboleth.wayf.plugins.PluginMetadataParameter,
-268 * java.lang.String)
-269 * @param req Describes the current request.
-270 * @param res Describes the current response.
-271 * @param parameter Describes the metadata.
-272 * @param idP Describes the idp.
-273 *
-274 */
-275publicvoid selected(HttpServletRequest req, HttpServletResponse res,
-276PluginMetadataParameter parameter, String idP) {
-277
-278SamlIdPCookie cookie = getIdPCookie(req, res, cacheDomain);
-279 String param = req.getParameter(PARAMETER_NAME);
-280
-281if (null == param || param.equals("")) {
-282return;
-283 } elseif (param.equalsIgnoreCase(PARAMETER_SESSION)) {
-284 cookie.addIdPName(idP, -1);
-285 } elseif (param.equalsIgnoreCase(PARAMETER_PERM)) {
-286 cookie.addIdPName(idP, cacheExpiration);
-287 }
-288 }
-289
-290//
-291// Private classes for internal use
-292//
-293
-294/**
-295 * This is just a marker tag.
-296 */
-297privatestaticclassContext implements PluginContext {}
-298
-299/**
-300 * Class to abstract away the saml cookie for us.
-301 */
-302publicfinalclassSamlIdPCookie {
-303
-304
-305/**
-306 * The associated request.
-307 */
-308privatefinal HttpServletRequest req;
-309/**
-310 * The associated response.
-311 */
-312privatefinal HttpServletResponse res;
-313/**
-314 * The associated domain.
-315 */
-316privatefinal String domain;
-317/**
-318 * The IdPs.
-319 */
-320privatefinal List <String> idPList = new ArrayList<String>();
-321
-322/**
-323 * Constructs a <code>SamlIdPCookie</code> from the provided string (which is the raw data.
-324 *
-325 * @param codedData
-326 * the information read from the cookie
-327 * @param request Describes the current request.
-328 * @param response Describes the current response.
-329 * @param domainName - if non null the domain for any *created* cookie.
-330 */
-331privateSamlIdPCookie(String codedData,
-332 HttpServletRequest request,
-333 HttpServletResponse response,
-334 String domainName) {
-335
-336this.req = request;
-337this.res = response;
-338this.domain = domainName;
-339
-340int start;
-341int end;
-342
-343if (codedData == null || codedData.equals("")) {
-344 log.info("Empty cookie");
-345return;
-346 }
-347//
-348// An earlier version saved the cookie without URL encoding it, hence there may be
-349// spaces which in turn means we may be quoted. Strip any quotes.
-350//
-351if (codedData.charAt(0) == '"' && codedData.charAt(codedData.length()-1) == '"') {
-352 codedData = codedData.substring(1,codedData.length()-1);
-353 }
-354
-355try {
-356 codedData = URLDecoder.decode(codedData, "UTF-8");
-357 } catch (UnsupportedEncodingException e) {
-358 log.error("could not decode cookie");
-359return;
-360 }
-361
-362 start = 0;
-363 end = codedData.indexOf(' ', start);
-364while (end > 0) {
-365 String value = codedData.substring(start, end);
-366 start = end + 1;
-367 end = codedData.indexOf(' ', start);
-368if (!value.equals("")) {
-369 idPList.add(new String(Base64.decode(value)));
-370 }
-371 }
-372if (start < codedData.length()) {
-373 String value = codedData.substring(start);
-374if (!value.equals("")) {
-375 idPList.add(new String(Base64.decode(value)));
-376 }
-377 }
-378 }
-379/**
-380 * Create a SamlCookie with no data inside.
-381 * @param domainName - if non null, the domain of the new cookie
-382 * @param request Describes the current request.
-383 * @param response Describes the current response.
-384 *
-385 */
-386privateSamlIdPCookie(HttpServletRequest request, HttpServletResponse response, String domainName) {
-387this.req = request;
-388this.res = response;
-389this.domain = domainName;
-390 }
-391
-392/**
-393 * Add the specified Shibboleth IdP Name to the cookie list or move to
-394 * the front and then write it back.
-395 *
-396 * We always add to the front (and remove from wherever it was)
-397 *
-398 * @param idPName - The name to be added
-399 * @param expiration - The expiration of the cookie or zero if it is to be unchanged
-400 */
-401privatevoid addIdPName(String idPName, int expiration) {
-402
-403 idPList.remove(idPName);
-404 idPList.add(0, idPName);
-405
-406 writeCookie(expiration);
-407 }
-408
-409/**
-410 * Delete the <b>entire<\b> cookie contents
-411 */
-412
-413
-414/**
-415 * Remove origin from the cachedata and write it back.
-416 *
-417 * @param origin what to remove.
-418 * @param expiration How long it will live.
-419 */
-420
-421publicvoid deleteIdPName(String origin, int expiration) {
-422 idPList.remove(origin);
-423 writeCookie(expiration);
-424 }
-425
-426/**
-427 * Write back the cookie.
-428 *
-429 * @param expiration How long it will live
-430 */
-431privatevoid writeCookie(int expiration) {
-432 Cookie cookie = getCookie(req);
-433
-434if (idPList.size() == 0) {
-435//
-436// Nothing to write, so delete the cookie
-437//
-438 cookie.setPath("/");
-439 cookie.setMaxAge(0);
-440 res.addCookie(cookie);
-441return;
-442 }
-443
-444//
-445// Otherwise encode up the cookie
-446//
-447 StringBuffer buffer = new StringBuffer();
-448 Iterator <String> it = idPList.iterator();
-449
-450while (it.hasNext()) {
-451 String next = it.next();
-452 String what = new String(Base64.encodeBytes(next.getBytes()));
-453 buffer.append(what).append(' ');
-454 }
-455
-456 String value;
-457try {
-458 value = URLEncoder.encode(buffer.toString(), "UTF-8");
-459 } catch (UnsupportedEncodingException e) {
-460 log.error("Could not encode cookie");
-461return;
-462 }
-463
-464if (cookie == null) {
-465 cookie = new Cookie(COOKIE_NAME, value);
-466 } else {
-467 cookie.setValue(value);
-468 }
-469 cookie.setComment("Used to cache selection of a user's Shibboleth IdP");
-470 cookie.setPath("/");
-471
-472
-473 cookie.setMaxAge(expiration);
-474
-475if (domain != null && domain != "") {
-476 cookie.setDomain(domain);
-477 }
-478 res.addCookie(cookie);
-479
-480 }
-481
-482/**
-483 * Return the list of Idps for this cookie.
-484 * @return The list.
-485 */
-486public List <String> getIdPList() {
-487return idPList;
-488 }
-489 }
-490
-491/**
-492 * Extract the cookie from a request.
-493 * @param req the request.
-494 * @return the cookie.
-495 */
-496privatestatic Cookie getCookie(HttpServletRequest req) {
-497
-498 Cookie[] cookies = req.getCookies();
-499if (cookies != null) {
-500for (int i = 0; i < cookies.length; i++) {
-501if (cookies[i].getName().equals(COOKIE_NAME)) {
-502return cookies[i];
-503 }
-504 }
-505 }
-506returnnull;
-507 }
-508
-509/**
-510 * Delete the cookie from the response.
-511 * @param req The request.
-512 * @param res The response.
-513 */
-514privatestaticvoid deleteCookie(HttpServletRequest req, HttpServletResponse res) {
-515 Cookie cookie = getCookie(req);
-516
-517if (cookie == null) {
-518return;
-519 }
-520
-521 cookie.setPath("/");
-522 cookie.setMaxAge(0);
-523 res.addCookie(cookie);
-524 }
-525/**
-526 * Load up the cookie and convert it into a SamlIdPCookie. If there is no
-527 * underlying cookie return a null one.
-528 * @param req The request.
-529 * @param res The response.
-530 * @param domain - if this is set then any <b>created</b> cookies are set to this domain
-531 * @return the new object.
-532 */
-533
-534privateSamlIdPCookie getIdPCookie(HttpServletRequest req, HttpServletResponse res, String domain) {
-535 Cookie cookie = getCookie(req);
-536
-537if (cookie == null) {
-538returnnewSamlIdPCookie(req, res, domain);
-539 } else {
-540returnnewSamlIdPCookie(cookie.getValue(), req, res, domain);
-541 }
-542 }
-543 }
-544
-
Note: failures are anticipated and checked for with assertions while errors are unanticipated.
-
-
-
-
-
-
-
-
diff --git a/endorsed/resolver-2.9.1.jar b/endorsed/resolver-2.9.1.jar
deleted file mode 100644
index e535bdc..0000000
Binary files a/endorsed/resolver-2.9.1.jar and /dev/null differ
diff --git a/endorsed/serializer-2.9.1.jar b/endorsed/serializer-2.9.1.jar
deleted file mode 100644
index de9b007..0000000
Binary files a/endorsed/serializer-2.9.1.jar and /dev/null differ
diff --git a/endorsed/xalan-2.7.1.jar b/endorsed/xalan-2.7.1.jar
deleted file mode 100644
index 458fa73..0000000
Binary files a/endorsed/xalan-2.7.1.jar and /dev/null differ
diff --git a/endorsed/xercesImpl-2.9.1.jar b/endorsed/xercesImpl-2.9.1.jar
deleted file mode 100644
index 8f762e1..0000000
Binary files a/endorsed/xercesImpl-2.9.1.jar and /dev/null differ
diff --git a/endorsed/xml-apis-2.9.1.jar b/endorsed/xml-apis-2.9.1.jar
deleted file mode 100644
index d42c0ea..0000000
Binary files a/endorsed/xml-apis-2.9.1.jar and /dev/null differ
diff --git a/install.bat b/install.bat
old mode 100644
new mode 100755
diff --git a/install.sh b/install.sh
old mode 100644
new mode 100755
diff --git a/lib/bcprov-ext-jdk15-1.40.jar b/lib/bcprov-ext-jdk15-1.40.jar
deleted file mode 100644
index 5fb6c1d..0000000
Binary files a/lib/bcprov-ext-jdk15-1.40.jar and /dev/null differ
diff --git a/lib/bcprov-jdk15-1.45.jar b/lib/bcprov-jdk15-1.45.jar
new file mode 100644
index 0000000..409070b
Binary files /dev/null and b/lib/bcprov-jdk15-1.45.jar differ
diff --git a/lib/endorsed/serializer-2.10.0.jar b/lib/endorsed/serializer-2.10.0.jar
new file mode 100644
index 0000000..de9b007
Binary files /dev/null and b/lib/endorsed/serializer-2.10.0.jar differ
diff --git a/lib/endorsed/xalan-2.7.1.jar b/lib/endorsed/xalan-2.7.1.jar
new file mode 100644
index 0000000..458fa73
Binary files /dev/null and b/lib/endorsed/xalan-2.7.1.jar differ
diff --git a/lib/endorsed/xercesImpl-2.10.0.jar b/lib/endorsed/xercesImpl-2.10.0.jar
new file mode 100644
index 0000000..9dcd8c3
Binary files /dev/null and b/lib/endorsed/xercesImpl-2.10.0.jar differ
diff --git a/lib/endorsed/xml-apis-2.10.0.jar b/lib/endorsed/xml-apis-2.10.0.jar
new file mode 100644
index 0000000..4673346
Binary files /dev/null and b/lib/endorsed/xml-apis-2.10.0.jar differ
diff --git a/lib/endorsed/xml-resolver-1.2.jar b/lib/endorsed/xml-resolver-1.2.jar
new file mode 100644
index 0000000..e535bdc
Binary files /dev/null and b/lib/endorsed/xml-resolver-1.2.jar differ
diff --git a/lib/esapi-2.0GA.jar b/lib/esapi-2.0GA.jar
new file mode 100644
index 0000000..7bd92fd
Binary files /dev/null and b/lib/esapi-2.0GA.jar differ
diff --git a/lib/jargs-1.0.jar b/lib/jargs-1.0.jar
deleted file mode 100644
index cdbc80b..0000000
Binary files a/lib/jargs-1.0.jar and /dev/null differ
diff --git a/lib/jcl-over-slf4j-1.5.5.jar b/lib/jcl-over-slf4j-1.5.5.jar
deleted file mode 100644
index f97cf3d..0000000
Binary files a/lib/jcl-over-slf4j-1.5.5.jar and /dev/null differ
diff --git a/lib/jcl-over-slf4j-1.6.1.jar b/lib/jcl-over-slf4j-1.6.1.jar
new file mode 100644
index 0000000..c44d8de
Binary files /dev/null and b/lib/jcl-over-slf4j-1.6.1.jar differ
diff --git a/lib/joda-time-1.5.2.jar b/lib/joda-time-1.5.2.jar
deleted file mode 100644
index 247898f..0000000
Binary files a/lib/joda-time-1.5.2.jar and /dev/null differ
diff --git a/lib/joda-time-1.6.2.jar b/lib/joda-time-1.6.2.jar
new file mode 100644
index 0000000..9b045c3
Binary files /dev/null and b/lib/joda-time-1.6.2.jar differ
diff --git a/lib/jul-to-slf4j-1.6.1.jar b/lib/jul-to-slf4j-1.6.1.jar
new file mode 100644
index 0000000..e240f3b
Binary files /dev/null and b/lib/jul-to-slf4j-1.6.1.jar differ
diff --git a/lib/log4j-over-slf4j-1.5.5.jar b/lib/log4j-over-slf4j-1.5.5.jar
deleted file mode 100644
index d329877..0000000
Binary files a/lib/log4j-over-slf4j-1.5.5.jar and /dev/null differ
diff --git a/lib/log4j-over-slf4j-1.6.1.jar b/lib/log4j-over-slf4j-1.6.1.jar
new file mode 100644
index 0000000..c4025f4
Binary files /dev/null and b/lib/log4j-over-slf4j-1.6.1.jar differ
diff --git a/lib/logback-classic-0.9.13.jar b/lib/logback-classic-0.9.13.jar
deleted file mode 100644
index e2c1bf8..0000000
Binary files a/lib/logback-classic-0.9.13.jar and /dev/null differ
diff --git a/lib/logback-classic-0.9.29.jar b/lib/logback-classic-0.9.29.jar
new file mode 100644
index 0000000..bf60161
Binary files /dev/null and b/lib/logback-classic-0.9.29.jar differ
diff --git a/lib/logback-core-0.9.13.jar b/lib/logback-core-0.9.13.jar
deleted file mode 100644
index cce9a6d..0000000
Binary files a/lib/logback-core-0.9.13.jar and /dev/null differ
diff --git a/lib/logback-core-0.9.29.jar b/lib/logback-core-0.9.29.jar
new file mode 100644
index 0000000..19eecac
Binary files /dev/null and b/lib/logback-core-0.9.29.jar differ
diff --git a/lib/not-yet-commons-ssl-0.3.9.jar b/lib/not-yet-commons-ssl-0.3.9.jar
index cb1bee3..9e38f97 100644
Binary files a/lib/not-yet-commons-ssl-0.3.9.jar and b/lib/not-yet-commons-ssl-0.3.9.jar differ
diff --git a/lib/opensaml-2.2.3.jar b/lib/opensaml-2.2.3.jar
deleted file mode 100644
index 2712f80..0000000
Binary files a/lib/opensaml-2.2.3.jar and /dev/null differ
diff --git a/lib/opensaml-2.5.1.jar b/lib/opensaml-2.5.1.jar
new file mode 100644
index 0000000..9142deb
Binary files /dev/null and b/lib/opensaml-2.5.1.jar differ
diff --git a/lib/openws-1.2.2.jar b/lib/openws-1.2.2.jar
deleted file mode 100644
index b66347c..0000000
Binary files a/lib/openws-1.2.2.jar and /dev/null differ
diff --git a/lib/openws-1.4.2.jar b/lib/openws-1.4.2.jar
new file mode 100644
index 0000000..108826e
Binary files /dev/null and b/lib/openws-1.4.2.jar differ
diff --git a/lib/shibboleth-discovery-service-1.1.0.jar b/lib/shibboleth-discovery-service-1.1.0.jar
deleted file mode 100644
index a2083c7..0000000
Binary files a/lib/shibboleth-discovery-service-1.1.0.jar and /dev/null differ
diff --git a/lib/shibboleth-discovery-service-1.1.3.jar b/lib/shibboleth-discovery-service-1.1.3.jar
new file mode 100644
index 0000000..cf5c648
Binary files /dev/null and b/lib/shibboleth-discovery-service-1.1.3.jar differ
diff --git a/lib/slf4j-api-1.5.6.jar b/lib/slf4j-api-1.5.6.jar
deleted file mode 100644
index d794252..0000000
Binary files a/lib/slf4j-api-1.5.6.jar and /dev/null differ
diff --git a/lib/slf4j-api-1.6.1.jar b/lib/slf4j-api-1.6.1.jar
new file mode 100644
index 0000000..f1f4fdd
Binary files /dev/null and b/lib/slf4j-api-1.6.1.jar differ
diff --git a/lib/xmlsec-1.4.2.jar b/lib/xmlsec-1.4.2.jar
deleted file mode 100644
index 6753cec..0000000
Binary files a/lib/xmlsec-1.4.2.jar and /dev/null differ
diff --git a/lib/xmlsec-1.4.5.jar b/lib/xmlsec-1.4.5.jar
new file mode 100644
index 0000000..ac432ba
Binary files /dev/null and b/lib/xmlsec-1.4.5.jar differ
diff --git a/lib/xmltooling-1.2.0.jar b/lib/xmltooling-1.2.0.jar
deleted file mode 100644
index 3837ea9..0000000
Binary files a/lib/xmltooling-1.2.0.jar and /dev/null differ
diff --git a/lib/xmltooling-1.3.2.jar b/lib/xmltooling-1.3.2.jar
new file mode 100644
index 0000000..66e5272
Binary files /dev/null and b/lib/xmltooling-1.3.2.jar differ
diff --git a/src/installer/lib/ant-extensions-13Apr2008.jar b/src/installer/lib/ant-extensions-13Apr2008.jar
new file mode 100644
index 0000000..8694196
Binary files /dev/null and b/src/installer/lib/ant-extensions-13Apr2008.jar differ
diff --git a/src/installer/lib/bcprov-jdk15-1.45.jar b/src/installer/lib/bcprov-jdk15-1.45.jar
new file mode 100644
index 0000000..409070b
Binary files /dev/null and b/src/installer/lib/bcprov-jdk15-1.45.jar differ
diff --git a/src/installer/resources/build.xml b/src/installer/resources/build.xml
old mode 100644
new mode 100755
index ae85dfa..32bfbd7
--- a/src/installer/resources/build.xml
+++ b/src/installer/resources/build.xml
@@ -1,46 +1,56 @@
+
-
-
-
-
+
+
+
+
-
+
-
+
+
+
+
-
-
+
+
+
+
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
-
+
+
+
+
+
-
+
-
+
@@ -49,20 +59,20 @@
-
+
-
-
-
+
+
+
-
+
-
\ No newline at end of file
+
diff --git a/src/installer/resources/install.properties b/src/installer/resources/install.properties
old mode 100644
new mode 100755
index c37d1c1..4b9d0de
--- a/src/installer/resources/install.properties
+++ b/src/installer/resources/install.properties
@@ -1 +1 @@
-ds.home = /etc/DiscoveryService
\ No newline at end of file
+ds.home = /opt/shibboleth-ds
\ No newline at end of file
diff --git a/src/installer/resources/logging.xml b/src/installer/resources/logging.xml
old mode 100644
new mode 100755
index 77fefd6..eff4799
--- a/src/installer/resources/logging.xml
+++ b/src/installer/resources/logging.xml
@@ -1,5 +1,4 @@
-
$DS_HOME$/logs/discoveryService.log
- true$DS_HOME$/logs/discovery-%d{yyyy-MM-dd}.log
-
- %date{HH:mm:ss.SSS} %level [%logger] %msg%n%ex{full}%n
-
+
+ UTF-8
+ %date{HH:mm:ss.SSS} - %level [%logger:%line] - %msg%n%ex{full}%n
+
- true
-
- %date{HH:mm:ss.SSS} %level [%logger] %msg%n%ex{full}%n
-
+
+ UTF-8
+ %date{HH:mm:ss.SSS} - %level [%logger:%line] - %msg%n%ex{full}%n
+
-
+
-
+
-
-
+
+
diff --git a/src/installer/resources/wayfconfig.xml b/src/installer/resources/wayfconfig.xml
old mode 100644
new mode 100755
index 1cd22d7..664cd0d
--- a/src/installer/resources/wayfconfig.xml
+++ b/src/installer/resources/wayfconfig.xml
@@ -1,7 +1,5 @@
-
-
+
+
-
+ InstitutionUniversity
@@ -69,14 +67,11 @@
NOTE - for windows installation with an explicit DOS device ("C:\etc\discoveryservice")
The url below should be "file://C:\program files/metadata/sites.xml
- -->
+-->
-
+
-
+
-
+
-
+
-
+
+ with the DS refers to this handler -->
-
+
diff --git a/src/main/webapp/Suggest.js b/src/main/webapp/Suggest.js
new file mode 100755
index 0000000..537064b
--- /dev/null
+++ b/src/main/webapp/Suggest.js
@@ -0,0 +1,362 @@
+function TypeAheadControl(list, box, orig, submit, optype, ie6hack)
+{
+ //
+ // Squirrel away the parameters we were given
+ //
+ this.elementList = list;
+ this.textBox = box;
+ this.origin = orig;
+ this.submit = submit;
+ this.optype = optype;
+ this.results = 0;
+ //
+ // Change these as needed
+ //
+ this.maxResults = 10; // How many to show
+ this.alwaysShowResult = true; // Show dropdown even if there are more that ,axResult results
+ this.ie6hack = ie6hack;
+ var myThis = this;
+
+ //
+ // Setup the lowercase names
+ //
+ var i = 0;
+ while (i < list.length) {
+ if (null == list[i]) {
+ list.length = i;
+ break;
+ }
+ list[i][2] = list[i][0].toLowerCase();
+ i++;
+ }
+ //
+ // Set up the 'dropDown'
+ //
+ this.dropDown = document.createElement('div');
+ this.dropDown.className = 'dropdown';
+ this.dropDown.style.visibility = 'hidden';
+ this.dropDown.style.width = box.offsetWidth;
+ this.dropDown.current = -1;
+ document.body.appendChild(this.dropDown);
+
+ //
+ // mouse listeners for the dropdown box
+ //
+ this.dropDown.onmouseover = function(event) {
+ if (!event) {
+ event = window.event;
+ }
+ target = event.target;
+ if (!target) {
+ target = event.srcElement;
+ }
+ myThis.select(target);
+ }
+
+ this.dropDown.onmousedown = function(event) {
+ if (-1 != myThis.dropDown.current) {
+ myThis.textBox.value = myThis.results[myThis.dropDown.current][0];
+ }
+ }
+
+ //
+ // Add the listeners to the text box
+ //
+ this.textBox.onkeyup = function(event) {
+ //
+ // get window even if needed (because of browser oddities)
+ //
+ if (!event) {
+ event = window.event;
+ }
+ myThis.handleKeyUp(event);
+ };
+
+ this.textBox.onkeydown = function(event) {
+ if (!event) {
+ event = window.event;
+ }
+
+ myThis.handleKeyDown(event);
+ };
+
+ this.textBox.onblur = function() {
+ myThis.hideDrop();
+ };
+
+ this.textBox.onfocus = function() {
+ myThis.handleChange();
+ };
+
+};
+//
+// Given a name return the first maxresults, or all possibles
+//
+TypeAheadControl.prototype.getPossible = function(name) {
+ var possibles = [];
+ var inIndex = 0;
+ var outIndex = 0;
+ name = name.toLowerCase();
+ var strIndex = 0;
+ var str;
+ var ostr;
+
+ while (outIndex <= this.maxResults && inIndex < this.elementList.length) {
+ strIndex = this.elementList[inIndex][2].indexOf(name);
+ if (-1 != strIndex) {
+ //
+ // a hit
+ //
+ str = this.elementList[inIndex][0];
+ possibles[outIndex] = new Array(str, this.elementList[inIndex][1]);
+ outIndex ++;
+ } else {
+ //
+ // Check entityId
+ strIndex = this.elementList[inIndex][1].indexOf(name);
+ if (-1 != strIndex) {
+ //
+ // a hit
+ //
+ str = this.elementList[inIndex][0];
+ possibles[outIndex] = new Array(str, this.elementList[inIndex][1]);
+ outIndex ++;
+ }
+ }
+ inIndex ++;
+ }
+ //
+ // reset the cursor to the top
+ //
+ this.dropDown.current = -1;
+
+ return possibles;
+};
+
+TypeAheadControl.prototype.handleKeyUp = function(event) {
+ var key = event.keyCode;
+
+ if (27 == key) {
+ //
+ // Escape - clear
+ //
+ this.textBox.value = '';
+ this.handleChange();
+ } else if (8 == key || 32 == key || (key >= 46 && key < 112) || key > 123) {
+ //
+ // Backspace, Space and >=Del to F12
+ //
+ this.handleChange();
+ }
+};
+
+TypeAheadControl.prototype.handleKeyDown = function(event) {
+
+ var key = event.keyCode;
+
+ if (38 == key) {
+ //
+ // up arrow
+ //
+ this.upSelect();
+
+ } else if (40 == key) {
+ //
+ // down arrow
+ //
+ this.downSelect();
+ }
+};
+
+TypeAheadControl.prototype.hideDrop = function() {
+ var i = 0;
+ if (null != this.ie6hack) {
+ while (i < this.ie6hack.length) {
+ this.ie6hack[i].style.visibility = 'visible';
+ i++;
+ }
+ }
+ this.dropDown.style.visibility = 'hidden';
+ if (-1 == this.dropDown.current) {
+ this.doUnselected();
+ }
+};
+
+TypeAheadControl.prototype.showDrop = function() {
+ var i = 0;
+ if (null != this.ie6hack) {
+ while (i < this.ie6hack.length) {
+ this.ie6hack[i].style.visibility = 'hidden';
+ i++;
+ }
+ }
+ this.dropDown.style.visibility = 'visible';
+};
+
+
+TypeAheadControl.prototype.doSelected = function() {
+ this.submit.value='Select';
+ this.optype.value = 'selection';
+};
+
+TypeAheadControl.prototype.doUnselected = function() {
+ this.submit.value='Search';
+
+ this.optype.value = 'search';
+};
+
+TypeAheadControl.prototype.handleChange = function() {
+
+ var val = this.textBox.value;
+ var res = this.getPossible(val);
+
+ if (0 == val.length ||
+ 0 == res.length ||
+ (!this.alwaysShowResult && this.maxResults < res.length)) {
+ this.hideDrop();
+ this.doUnselected();
+ this.results = [];
+ this.dropDown.current = -1;
+ } else {
+ this.results = res;
+ this.populateDropDown(res);
+ if (1 == res.length) {
+ this.select(this.dropDown.childNodes[0]);
+ this.doSelected();
+ } else {
+ this.doUnselected();
+ }
+ }
+};
+
+//
+// A lot of the stuff below comes from
+// http://www.webreference.com/programming/javascript/ncz/column2
+//
+// With thanks to Nicholas C Zakas
+//
+TypeAheadControl.prototype.populateDropDown = function(list) {
+ this.dropDown.innerHTML = '';
+ var i = 0;
+ var div;
+ while (i < list.length) {
+ div = document.createElement('div');
+ div.appendChild(document.createTextNode(list[i][0]));
+// div.style.zIndex = '1000';
+ this.dropDown.appendChild(div);
+ i++;
+ }
+ var off = this.getXY();
+ this.dropDown.style.left = off[0] + 'px';
+ this.dropDown.style.top = off[1] + 'px';
+ this.showDrop();
+};
+
+TypeAheadControl.prototype.getXY = function() {
+
+ var node = this.textBox;
+ var sumX = 0;
+ var sumY = node.offsetHeight;
+
+ while(node.tagName != 'BODY') {
+ sumX += node.offsetLeft;
+ sumY += node.offsetTop;
+ node = node.offsetParent;
+ }
+ //
+ // And add in the offset for the Body
+ //
+ sumX += node.offsetLeft;
+ sumY += node.offsetTop;
+
+ return [sumX, sumY];
+};
+
+TypeAheadControl.prototype.select = function(selected) {
+ var i = 0;
+ var node;
+ this.dropDown.current = -1;
+ this.doUnselected();
+ while (i < this.dropDown.childNodes.length) {
+ node = this.dropDown.childNodes[i];
+ if (node == selected) {
+ //
+ // Highlight it
+ //
+ node.className = 'current';
+ //
+ // turn on the button
+ //
+ this.doSelected();
+ //
+ // setup the cursor
+ //
+ this.dropDown.current = i;
+ //
+ // and the value for the Server
+ //
+ this.origin.value = this.results[i][1];
+ this.origin.textValue = this.results[i][0];
+ } else {
+ node.className = '';
+ }
+ i++;
+ }
+ this.textBox.focus();
+};
+
+TypeAheadControl.prototype.downSelect = function() {
+ if (this.results.length > 0) {
+
+ if (-1 == this.dropDown.current) {
+ //
+ // mimic a select()
+ //
+ this.dropDown.current = 0;
+ this.dropDown.childNodes[0].className = 'current';
+ this.doSelected();
+ this.origin.value = this.results[0][1];
+ this.origin.textValue = this.results[0][0];
+
+ } else if (this.dropDown.current < (this.results.length-1)) {
+ //
+ // turn off highlight
+ //
+ this.dropDown.childNodes[this.dropDown.current].className = '';
+ //
+ // move cursor
+ //
+ this.dropDown.current++;
+ //
+ // and 'select'
+ //
+ this.dropDown.childNodes[this.dropDown.current].className = 'current';
+ this.doSelected();
+ this.origin.value = this.results[this.dropDown.current][1];
+ this.origin.textValue = this.results[this.dropDown.current][0];
+ }
+ }
+};
+
+
+TypeAheadControl.prototype.upSelect = function() {
+ if ((this.results.length > 0) &&
+ (this.dropDown.current > 0)) {
+
+ //
+ // turn off highlight
+ //
+ this.dropDown.childNodes[this.dropDown.current].className = '';
+ //
+ // move cursor
+ //
+ this.dropDown.current--;
+ //
+ // and 'select'
+ //
+ this.dropDown.childNodes[this.dropDown.current].className = 'current';
+ this.doSelected();
+ this.origin.value = this.results[this.dropDown.current][1];
+ this.origin.textValue = this.results[this.dropDown.current][0];
+ }
+};
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/tlds/struts-bean.tld b/src/main/webapp/WEB-INF/tlds/struts-bean.tld
old mode 100644
new mode 100755
diff --git a/src/main/webapp/WEB-INF/tlds/struts-logic.tld b/src/main/webapp/WEB-INF/tlds/struts-logic.tld
old mode 100644
new mode 100755
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
old mode 100644
new mode 100755
index c938b16..ef5f00e
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -1,55 +1,50 @@
-
-
-
-
-
-
-
- WAYF
- Shibboleth WAYF Service
- edu.internet2.middleware.shibboleth.wayf.WayfService
-
- WAYFConfigFileLocation
- $DS_HOME$/conf/wayfconfig.xml
-
-
- WAYFLogConfig
- $DS_HOME$/conf/logging.xml
+
+
+
+
+ WAYF
+ Shibboleth WAYF Service
+ edu.internet2.middleware.shibboleth.wayf.WayfService
+
+ WAYFConfigFileLocation
+ $DS_HOME$/conf/wayfconfig.xml
+
+
+ WAYFLogConfig
+ $DS_HOME$/conf/logging.xmlWAYFLogConfigPollFrequency300000
-
-
-
-
-
-
- WAYF
- /WAYF
-
-
-
- WAYF
- *.wayf
-
-
-
- WAYF
- /DS
-
-
-
- WAYF
- *.ds
-
-
-
- css
- text/css
-
-
+
+
+
+
+
+
+ WAYF
+ /WAYF
+
+
+
+ WAYF
+ *.wayf
+
+
+
+ WAYF
+ /DS
+
+
+
+ WAYF
+ *.ds
+
+
+
+ css
+ text/css
+
+
diff --git a/src/main/webapp/images/incommon.gif b/src/main/webapp/images/incommon.gif
old mode 100644
new mode 100755
diff --git a/src/main/webapp/images/internet2.gif b/src/main/webapp/images/internet2.gif
old mode 100644
new mode 100755
diff --git a/src/main/webapp/images/logo.jpg b/src/main/webapp/images/logo.jpg
old mode 100644
new mode 100755
diff --git a/src/main/webapp/index.htm b/src/main/webapp/index.htm
old mode 100644
new mode 100755
diff --git a/src/main/webapp/static.html b/src/main/webapp/static.html
new file mode 100755
index 0000000..c35b8a3
--- /dev/null
+++ b/src/main/webapp/static.html
@@ -0,0 +1,163 @@
+
+
+
+Static Discovery Service with centralised hinting
+
+
+This is a boring, but static web page which shows how an signle SP can
+configure their own "Discovery Service" without recouse to a Java
+Container but taking full advantage of the centralised cookie server
+in the Federation Discovery Service.
+
+
This is not meant to be pretty - it is meant to be easy for SP's
+(who understand HTML) to understand and develop. It is however
+targetted at a single SP. Sites running multiple SPs and wanting a
+single Discovery will still need to deploy a real DS, or deploy this
+as an embedded wayf on each SP.
+
+
+There is obviously plenty of room for adding all the visual sugar and
+branding that we want at the three levels
+
+
A World Wide "This is a Discovery" look and feel
+
A Federation branding
+
"Corporate" Branding
+
+
+
Just for fun, this Discovery service points to the I2Wiki, a Shib 2
+SP (and so with an easier configuration). To make things even more
+fun it has access to metadata (mostly statically loaded) for 6
+Federations. (UK, InCommon, MAMS, Switch AcoNet and Renater)
+
+
+
+
+
+
Enter Organization Name
+
+
+
+
+
+
Configuring
+
+Details on how to set this up this are embedded as comments in this
+web page. Currently a lot of the configuration is manual. Future
+versions will be as automatic as possible and the only configuration
+required will be the link which is displayed when there is not
+javascript enabled.
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/static2.html b/src/main/webapp/static2.html
new file mode 100755
index 0000000..470b099
--- /dev/null
+++ b/src/main/webapp/static2.html
@@ -0,0 +1,160 @@
+
+
+
+Static Discovery Service with centralised hinting
+
+
+This is a boring, but static web page which shows how an signle SP can
+configure their own "Discovery Service" without recouse to a Java
+Container but taking full advantage of the centralised cookie server
+in the Federation Discovery Service.
+
+
+This DS points at a test SP in the UK Federation, and uses the
+Shib/SAML1 protocol. It is a lot harder to configure (a lot like
+setting up one a "WAYFless URLS". Consider it motivation to upgrade
+from SAML1 to SAML2...
+
+
+
+
+
+
Enter Organization Name
+
+
+
+
+
+
+
Configuring
+
+Details on how to set this up this are embedded as comments in this
+web page. Currently a lot of the configuration is manual. Although
+it would be feasible to automate this just as is planned for Shib2
+SPs, the duplication seems needless given that the product has a 9
+month shelf life.
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/wayf.css b/src/main/webapp/wayf.css
old mode 100644
new mode 100755
index 4056aa3..0eeb26c
--- a/src/main/webapp/wayf.css
+++ b/src/main/webapp/wayf.css
@@ -102,3 +102,21 @@ span.warning {
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.jsp b/src/main/webapp/wayf.jsp
old mode 100644
new mode 100755
index 74ba11d..12d72da
--- a/src/main/webapp/wayf.jsp
+++ b/src/main/webapp/wayf.jsp
@@ -2,6 +2,7 @@
<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ page language="java" import="java.util.*,edu.internet2.middleware.shibboleth.wayf.*,java.lang.*" %>
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
@@ -123,6 +124,7 @@
10 - Recently used sites hyperlinks
20 -
+ 25 - AutoSuggestion
30 Federation selection
40 IdP within Selection
50 Select button
@@ -158,15 +160,14 @@ Select an identity provider
The Service you are trying to reach requires that you
-authenticate with your home institution, please select it from the
-list below.
+authenticate with your home organization, enter the name below.
-Recently used institutions:
+Recently used organizations:
@@ -178,6 +179,7 @@ Recently used institutions:
simulating the user having specified a permanent cookie -->
+