Browse Source

Initial commit

RYang 5 years ago
commit
f9e1417519
100 changed files with 32880 additions and 0 deletions
  1. 14 0
      .gitignore
  2. 1 0
      .idea/.name
  3. 14 0
      .idea/compiler.xml
  4. 6 0
      .idea/encodings.xml
  5. 18 0
      .idea/misc.xml
  6. 6 0
      .idea/sbt.xml
  7. 6 0
      .idea/vcs.xml
  8. 457 0
      .idea/workspace.xml
  9. 102 0
      build.cmd
  10. 189 0
      build.sh
  11. 6 0
      etc/cas/config/cas.properties
  12. 117 0
      etc/cas/config/log4j2.xml
  13. BIN
      maven/maven-wrapper.jar
  14. 3 0
      maven/maven-wrapper.properties
  15. 3 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9.info
  16. 4 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/META-INF/spring.factories
  17. 2 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/apereo.properties
  18. 111 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/application.properties
  19. 0 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/application.yml
  20. 29 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/bootstrap.properties
  21. 3 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/cas-theme-default.properties
  22. 228 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/log4j2.xml
  23. 571 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages.properties
  24. 53 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_ar.properties
  25. 95 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_ca.properties
  26. 85 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_cs.properties
  27. 290 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_de.properties
  28. 94 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_es.properties
  29. 54 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_fa.properties
  30. 353 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_fr.properties
  31. 52 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_hr.properties
  32. 77 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_it.properties
  33. 52 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_ja.properties
  34. 50 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_mk.properties
  35. 44 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_nl.properties
  36. 395 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_pl.properties
  37. 46 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_pt_BR.properties
  38. 51 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_pt_PT.properties
  39. 88 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_ru.properties
  40. 180 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_sk.properties
  41. 43 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_sl.properties
  42. 50 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_sv.properties
  43. 47 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_tr.properties
  44. 84 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_uk.properties
  45. 48 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_ur.properties
  46. 241 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_vi.properties
  47. 89 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_zh_CN.properties
  48. 50 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_zh_TW.properties
  49. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/org/apereo/cas/CasTomcatBanner.class
  50. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/org/apereo/cas/config/CasEmbeddedContainerTomcatConfiguration$1.class
  51. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/org/apereo/cas/config/CasEmbeddedContainerTomcatConfiguration.class
  52. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/org/apereo/cas/config/CasEmbeddedContainerTomcatFiltersConfiguration.class
  53. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/org/apereo/cas/config/CasTomcatEmbeddedServletContainerFactory$ClusterMemberDesc.class
  54. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/org/apereo/cas/config/CasTomcatEmbeddedServletContainerFactory.class
  55. 9 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/services/Apereo-10000002.json
  56. 8 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/services/HTTPSandIMAPS-10000001.json
  57. 10382 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/css/admin.css
  58. 18 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/css/authnEvents.css
  59. 11792 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/css/cas.css
  60. 48 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/css/consentReview.css
  61. 55 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/css/loggingDashboard.css
  62. 110 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/css/ssosessions.css
  63. 18 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/css/trustedDevices.css
  64. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/favicon.ico
  65. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/apereo-logo.png
  66. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/cas-logo.png
  67. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/confirm.gif
  68. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/error.gif
  69. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/error.png
  70. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/green.gif
  71. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/info.gif
  72. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/info.png
  73. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/logo.png
  74. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/question.png
  75. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/red.gif
  76. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/success.png
  77. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/warning.png
  78. BIN
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/webapp.png
  79. 116 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/attrresolution.js
  80. 49 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/authnEvents.js
  81. 145 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/cas.js
  82. 45 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/consent.js
  83. 221 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/consentReview.js
  84. 1 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/duo/Duo-Web-v2.min.js
  85. 342 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/loggingDashboard.js
  86. 142 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/passwordMeter.js
  87. 2378 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/sockjs.js
  88. 351 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/ssosessions.js
  89. 208 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/statisticsview.js
  90. 474 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/stomp.js
  91. 59 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/trustedDevices.js
  92. 748 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/u2f/u2f-api.js
  93. 157 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/viewConfig.js
  94. 136 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/viewConfigMetadata.js
  95. 112 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/sass/admin.scss
  96. 19 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/sass/authnEvents.scss
  97. 83 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/sass/cas.scss
  98. 5 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/sass/components/_alerts.scss
  99. 48 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/sass/components/_buttons.scss
  100. 0 0
      overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/sass/components/_cas.scss

+ 14 - 0
.gitignore

@@ -0,0 +1,14 @@
+# Created by .ignore support plugin (hsz.mobi)
+### Maven template
+target/
+out/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+pom.xml.next
+release.properties
+dependency-reduced-pom.xml
+buildNumber.properties
+.mvn/timing.properties
+.mvn/wrapper/maven-wrapper.jar
+

+ 1 - 0
.idea/.name

@@ -0,0 +1 @@
+cas-overlay

+ 14 - 0
.idea/compiler.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <annotationProcessing>
+      <profile default="true" name="Default" enabled="true" />
+      <profile name="Maven default annotation processors profile" enabled="true">
+        <sourceOutputDir name="target/generated-sources/annotations" />
+        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+        <outputRelativeToContentRoot value="true" />
+        <module name="cas-overlay" />
+      </profile>
+    </annotationProcessing>
+  </component>
+</project>

+ 6 - 0
.idea/encodings.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding">
+    <file url="file://$PROJECT_DIR$" charset="UTF-8" />
+  </component>
+</project>

+ 18 - 0
.idea/misc.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="FrameworkDetectionExcludesConfiguration">
+    <file url="file://$PROJECT_DIR$/overlays" />
+    <file type="web" url="file://$PROJECT_DIR$" />
+  </component>
+  <component name="MavenProjectsManager">
+    <option name="originalFiles">
+      <list>
+        <option value="$PROJECT_DIR$/pom.xml" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/out" />
+  </component>
+</project>

+ 6 - 0
.idea/sbt.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ScalaSbtSettings">
+    <option name="customVMPath" />
+  </component>
+</project>

+ 6 - 0
.idea/vcs.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>

+ 457 - 0
.idea/workspace.xml

@@ -0,0 +1,457 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ArtifactsWorkspaceSettings">
+    <artifacts-to-build>
+      <artifact name="cas-overlay:war" />
+    </artifacts-to-build>
+  </component>
+  <component name="ChangeListManager">
+    <list default="true" id="67978886-34ca-4390-9e8f-77cfca18985d" name="Default" comment="">
+      <change afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/.idea/encodings.xml" afterDir="false" />
+      <change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9.info" beforeDir="false" afterPath="$PROJECT_DIR$/overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9.info" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/application.properties" beforeDir="false" afterPath="$PROJECT_DIR$/overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/application.properties" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_cs.properties" beforeDir="false" afterPath="$PROJECT_DIR$/overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_cs.properties" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_sl.properties" beforeDir="false" afterPath="$PROJECT_DIR$/overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_sl.properties" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_uk.properties" beforeDir="false" afterPath="$PROJECT_DIR$/overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_uk.properties" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_vi.properties" beforeDir="false" afterPath="$PROJECT_DIR$/overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_vi.properties" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/ldy/custom/MyAuthenticationHandler.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/ldy/custom/MyAuthenticationHandler.java" afterDir="false" />
+    </list>
+    <ignored path="$PROJECT_DIR$/target/" />
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="TRACKING_ENABLED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="FileEditorManager">
+    <leaf />
+  </component>
+  <component name="Git.Settings">
+    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
+  </component>
+  <component name="GradleLocalSettings">
+    <option name="projectSyncType">
+      <map>
+        <entry key="$USER_HOME$/Desktop/PAAS中标部署/app-cloud-master" value="PREVIEW" />
+        <entry key="$USER_HOME$/Desktop/PAAS中标部署/dcw-mgmt-server-master" value="PREVIEW" />
+        <entry key="$USER_HOME$/Desktop/apiplatform_2.1.0.201809200314" value="PREVIEW" />
+        <entry key="$USER_HOME$/Desktop/dcw-mgmt-server" value="PREVIEW" />
+        <entry key="$USER_HOME$/Desktop/i慧湖/cmsApi" value="PREVIEW" />
+        <entry key="$USER_HOME$/Desktop/proto-firechat/mars" value="PREVIEW" />
+        <entry key="$USER_HOME$/Desktop/sh-server" value="PREVIEW" />
+        <entry key="$USER_HOME$/Desktop/张家港E管家项目/GIT/bike-h5-zjg" value="PREVIEW" />
+        <entry key="$USER_HOME$/Desktop/张家港E管家项目/GIT/egj-dataserver" value="PREVIEW" />
+        <entry key="$USER_HOME$/Desktop/张家港E管家项目/GIT/egj-epay-server" value="PREVIEW" />
+        <entry key="$USER_HOME$/Desktop/张家港E管家项目/GIT/egj-manager-server" value="PREVIEW" />
+        <entry key="$USER_HOME$/Desktop/张家港E管家项目/GIT/steward-epay" value="PREVIEW" />
+        <entry key="$USER_HOME$/Desktop/智慧党建/GIT/gd-event-service" value="PREVIEW" />
+        <entry key="$USER_HOME$/Desktop/智慧党建/GIT/gd-infomation" value="PREVIEW" />
+        <entry key="$USER_HOME$/Desktop/智慧党建/GIT/partyaffairs" value="PREVIEW" />
+        <entry key="$USER_HOME$/Desktop/软著资料/dcw-mgmt-server" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/BigData/GIT/analysismgr" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/BigData/GIT/dataportal" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/analysismgr" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/cas" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/coupon-service" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/cspservice" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/dc-lcn" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/dc-tm-manager" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/dcw-boot" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/demoService" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/demoWebService" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/egj-manager-server" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/event-service" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/information-server" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/operationmgr" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/payment-server" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/points" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/securitycall" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/shopping-service" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/third-service" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/userservice" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/GIT/verifyserver" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/LCN事务管理器/GIT/test-tm-appa" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/LCN事务管理器/GIT/test-tm-appb" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/LCN事务管理器/GIT/test-tm-appc" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/developer/GIT/app-cloud" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/developer/GIT/dc-cas-server" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/developer/GIT/dc-cas-server/dc-cas-server-webapp" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/paycloud/GIT/dc-cas-server" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/sample/dc-lcn" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/sample/fescar-develop" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/sample/fescar-samples-master" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/sample/springboot-dubbo-fescar-master" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/sample/tx-lcn-5.0.2.RELEASE" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/sample/txlcn-demo-master" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/北京网/GIT/sh-server" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/大数据平台/GIT/analyflume" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/大数据平台/GIT/analysismgr" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/大数据平台/GIT/dataportal" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/开发者门户/GIT/app-cloud" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/开发者门户/GIT/dcw-mgmt-server" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../LIGHTINIT/00-项目资料/05-公租房/GIT/housing-common" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../LIGHTINIT/00-项目资料/05-公租房/GIT/housing-datasync" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../LCN事务管理器/GIT/mrf-lcn" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../LCN事务管理器/GIT/mrf-tm-manager" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../daas/GIT/apiOutService" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../daas/GIT/apiService" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../developer/GIT/dcw-mgmt-server" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../framework/GIT/csp-commons" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../framework/GIT/dc-cas-server" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../framework/GIT/demoService" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../framework/GIT/mrf-boot" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../framework/GIT/mrf-cas-server" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../platformBusiness/GIT/cas" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../platformBusiness/GIT/cspservice" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../platformBusiness/GIT/image" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../platformBusiness/GIT/operationmgr" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../platformBusiness/GIT/securitycall" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../platformBusiness/GIT/third-service" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../platformBusiness/GIT/userservice" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../platformBusiness/GIT/ytserver" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../product/鲜果多多/GIT/fruits-service" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../sample/GradleSide-master/20-plugin-proguard" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../sample/Installer-master" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../sample/confusion-master" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../sample/moco-master" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../sample/proguard-spring-boot-example-master" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../sample/sso-master/sso-client1" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../sample/sso-master/sso-client2" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../sample/sso-master/sso-server" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../sample/txlcn-demo-master" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../SR/framework/GIT/dcw-boot" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../TOOLS/lombok-intellij-plugin" value="PREVIEW" />
+      </map>
+    </option>
+  </component>
+  <component name="IdeDocumentHistory">
+    <option name="CHANGED_PATHS">
+      <list>
+        <option value="$PROJECT_DIR$/src/main/java/com/ldy/custom/MyAuthenticationHandler.java" />
+        <option value="$PROJECT_DIR$/.gitignore" />
+      </list>
+    </option>
+  </component>
+  <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsGulpfileManager">
+    <detection-done>true</detection-done>
+    <sorting>DEFINITION_ORDER</sorting>
+  </component>
+  <component name="LogFilters">
+    <option name="FILTER_ERRORS" value="false" />
+    <option name="FILTER_WARNINGS" value="false" />
+    <option name="FILTER_INFO" value="true" />
+    <option name="FILTER_DEBUG" value="true" />
+    <option name="CUSTOM_FILTER" />
+  </component>
+  <component name="NodePackageJsonFileManager">
+    <packageJsonPaths />
+  </component>
+  <component name="ProjectFrameBounds" extendedState="6">
+    <option name="width" value="1440" />
+    <option name="height" value="900" />
+  </component>
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true" />
+  <component name="ProjectView">
+    <navigator proportions="" version="1">
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="Scope" />
+      <pane id="PackagesPane" />
+      <pane id="AndroidView" />
+      <pane id="ProjectPane">
+        <subPane>
+          <expand>
+            <path>
+              <item name="cas-overlay" type="b2602c69:ProjectViewProjectNode" />
+              <item name="hsdataplatformsso" type="462c0819:PsiDirectoryNode" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="aspect.path.notification.shown" value="true" />
+    <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
+    <property name="nodejs_npm_path_reset_for_default_project" value="true" />
+    <property name="settings.editor.selected.configurable" value="preferences.pluginManager" />
+  </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
+  <component name="RunManager">
+    <configuration default="true" type="Application" factoryName="Application">
+      <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
+    </configuration>
+    <configuration default="true" type="JUnit" factoryName="JUnit">
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="PACKAGE_NAME" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="METHOD_NAME" />
+      <option name="TEST_OBJECT" value="class" />
+      <option name="VM_PARAMETERS" value="-ea" />
+      <option name="PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="%MODULE_WORKING_DIR%" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="singleModule" />
+      </option>
+      <patterns />
+    </configuration>
+    <configuration default="true" type="TestNG" factoryName="TestNG">
+      <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <option name="SUITE_NAME" />
+      <option name="PACKAGE_NAME" />
+      <option name="MAIN_CLASS_NAME" />
+      <option name="METHOD_NAME" />
+      <option name="GROUP_NAME" />
+      <option name="TEST_OBJECT" value="CLASS" />
+      <option name="VM_PARAMETERS" value="-ea" />
+      <option name="PARAMETERS" />
+      <option name="WORKING_DIRECTORY" value="%MODULE_WORKING_DIR%" />
+      <option name="OUTPUT_DIRECTORY" />
+      <option name="PASS_PARENT_ENVS" value="true" />
+      <option name="TEST_SEARCH_SCOPE">
+        <value defaultName="singleModule" />
+      </option>
+      <option name="USE_DEFAULT_REPORTERS" value="false" />
+      <option name="PROPERTIES_FILE" />
+      <properties />
+      <listeners />
+    </configuration>
+    <configuration name="Unnamed" type="#com.intellij.j2ee.web.tomcat.TomcatRunConfigurationFactory" factoryName="Local" APPLICATION_SERVER_NAME="Tomcat 8.0.30" ALTERNATIVE_JRE_ENABLED="false">
+      <option name="UPDATING_POLICY" value="restart-server" />
+      <deployment>
+        <artifact name="cas-overlay:war">
+          <settings>
+            <option name="CONTEXT_PATH" value="/" />
+          </settings>
+        </artifact>
+      </deployment>
+      <server-settings>
+        <option name="BASE_DIRECTORY_NAME" value="Unnamed_cas-overlay" />
+      </server-settings>
+      <predefined_log_file id="Tomcat" enabled="true" />
+      <predefined_log_file id="Tomcat Catalina" enabled="true" />
+      <predefined_log_file id="Tomcat Manager" enabled="false" />
+      <predefined_log_file id="Tomcat Host Manager" enabled="false" />
+      <predefined_log_file id="Tomcat Localhost Access" enabled="false" />
+      <RunnerSettings RunnerId="Debug">
+        <option name="DEBUG_PORT" value="52010" />
+      </RunnerSettings>
+      <ConfigurationWrapper VM_VAR="JAVA_OPTS" RunnerId="Cover">
+        <option name="USE_ENV_VARIABLES" value="true" />
+        <STARTUP>
+          <option name="USE_DEFAULT" value="true" />
+          <option name="SCRIPT" value="" />
+          <option name="VM_PARAMETERS" value="" />
+          <option name="PROGRAM_PARAMETERS" value="" />
+        </STARTUP>
+        <SHUTDOWN>
+          <option name="USE_DEFAULT" value="true" />
+          <option name="SCRIPT" value="" />
+          <option name="VM_PARAMETERS" value="" />
+          <option name="PROGRAM_PARAMETERS" value="" />
+        </SHUTDOWN>
+      </ConfigurationWrapper>
+      <ConfigurationWrapper VM_VAR="JAVA_OPTS" RunnerId="Debug">
+        <option name="USE_ENV_VARIABLES" value="true" />
+        <STARTUP>
+          <option name="USE_DEFAULT" value="true" />
+          <option name="SCRIPT" value="" />
+          <option name="VM_PARAMETERS" value="" />
+          <option name="PROGRAM_PARAMETERS" value="" />
+        </STARTUP>
+        <SHUTDOWN>
+          <option name="USE_DEFAULT" value="true" />
+          <option name="SCRIPT" value="" />
+          <option name="VM_PARAMETERS" value="" />
+          <option name="PROGRAM_PARAMETERS" value="" />
+        </SHUTDOWN>
+      </ConfigurationWrapper>
+      <ConfigurationWrapper VM_VAR="JAVA_OPTS" RunnerId="Run">
+        <option name="USE_ENV_VARIABLES" value="true" />
+        <STARTUP>
+          <option name="USE_DEFAULT" value="true" />
+          <option name="SCRIPT" value="" />
+          <option name="VM_PARAMETERS" value="" />
+          <option name="PROGRAM_PARAMETERS" value="" />
+        </STARTUP>
+        <SHUTDOWN>
+          <option name="USE_DEFAULT" value="true" />
+          <option name="SCRIPT" value="" />
+          <option name="VM_PARAMETERS" value="" />
+          <option name="PROGRAM_PARAMETERS" value="" />
+        </SHUTDOWN>
+      </ConfigurationWrapper>
+      <method>
+        <option name="BuildArtifacts" enabled="true">
+          <artifact name="cas-overlay:war" />
+        </option>
+      </method>
+    </configuration>
+  </component>
+  <component name="SbtLocalSettings">
+    <option name="projectSyncType">
+      <map>
+        <entry key="$PROJECT_DIR$/../../../../DCW/BigData/GIT/NewSparkApp-MySQL" value="PREVIEW" />
+        <entry key="$PROJECT_DIR$/../../../../DCW/大数据平台/GIT/NewSparkApp-MySQL" value="PREVIEW" />
+      </map>
+    </option>
+  </component>
+  <component name="SvnConfiguration">
+    <configuration />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="67978886-34ca-4390-9e8f-77cfca18985d" name="Default" comment="" />
+      <created>1575597387209</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1575597387209</updated>
+      <workItem from="1575597388512" duration="290000" />
+    </task>
+    <servers />
+  </component>
+  <component name="TimeTrackingManager">
+    <option name="totallyTimeSpent" value="290000" />
+  </component>
+  <component name="ToolWindowManager">
+    <frame x="0" y="23" width="1440" height="840" extended-state="6" />
+    <layout>
+      <window_info anchor="right" id="Palette" />
+      <window_info anchor="bottom" id="FindBugs-IDEA" />
+      <window_info anchor="bottom" id="Event Log" side_tool="true" />
+      <window_info anchor="bottom" id="Application Servers" weight="0.32969698" />
+      <window_info anchor="right" id="Maven Projects" />
+      <window_info anchor="bottom" id="Database Changes" show_stripe_button="false" />
+      <window_info id="Capture Tool" />
+      <window_info id="Designer" />
+      <window_info anchor="right" id="Database" />
+      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
+      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
+      <window_info id="UI Designer" />
+      <window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
+      <window_info anchor="bottom" id="TODO" order="6" />
+      <window_info anchor="bottom" id="Messages" />
+      <window_info anchor="right" id="Palette&#9;" />
+      <window_info id="Image Layers" />
+      <window_info anchor="bottom" id="Java Enterprise" />
+      <window_info anchor="right" id="Capture Analysis" />
+      <window_info anchor="bottom" id="Run" order="2" />
+      <window_info anchor="bottom" id="Version Control" />
+      <window_info anchor="bottom" id="Spring" />
+      <window_info anchor="bottom" id="Terminal" />
+      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.24964234" />
+      <window_info anchor="right" id="Bean Validation" />
+      <window_info id="Web" side_tool="true" />
+      <window_info anchor="right" id="Theme Preview" />
+      <window_info id="Favorites" side_tool="true" />
+      <window_info anchor="bottom" id="Find" order="1" />
+      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
+      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
+      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
+      <window_info anchor="bottom" id="Message" order="0" />
+      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
+    </layout>
+  </component>
+  <component name="TypeScriptGeneratedFilesManager">
+    <option name="version" value="1" />
+  </component>
+  <component name="VcsContentAnnotationSettings">
+    <option name="myLimit" value="2678400000" />
+  </component>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/src/main/resources/META-INF/spring.factories">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/etc/cas/config/cas.properties">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="90">
+          <caret line="6" lean-forward="true" selection-start-line="6" selection-end-line="6" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/ldy/custom/MyAuthenticationHandler.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="315">
+          <caret line="35" column="63" selection-start-line="35" selection-start-column="63" selection-end-line="35" selection-end-column="63" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/ldy/config/MyAuthenticationConfiguration.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="225">
+          <caret line="26" lean-forward="true" selection-start-line="26" selection-end-line="26" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/maven/maven-wrapper.properties">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/build.cmd">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-682">
+          <caret line="10" column="33" lean-forward="true" selection-start-line="10" selection-start-column="33" selection-end-line="10" selection-end-column="33" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/build.sh">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-2017">
+          <caret line="9" column="1" lean-forward="true" selection-start-line="9" selection-start-column="1" selection-end-line="9" selection-end-column="1" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/pom.xml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-3328">
+          <caret line="10" column="11" lean-forward="true" selection-start-line="10" selection-start-column="11" selection-end-line="10" selection-end-column="11" />
+        </state>
+      </provider>
+      <provider editor-type-id="MavenHelperPluginDependencyAnalyzer" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/.gitignore">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="45">
+          <caret line="3" column="4" lean-forward="true" selection-start-line="3" selection-start-column="4" selection-end-line="3" selection-end-column="4" />
+        </state>
+      </provider>
+    </entry>
+  </component>
+  <component name="masterDetails">
+    <states>
+      <state key="ProjectJDKs.UI">
+        <settings>
+          <last-edited>1.8</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+    </states>
+  </component>
+</project>

+ 102 - 0
build.cmd

@@ -0,0 +1,102 @@
+@echo off
+
+@set JAVA_ARGS=-Xms500m -Xmx1g
+@set CAS_DIR=\etc\cas
+@set CONFIG_DIR=\etc\cas\config
+
+@rem Call this script with DNAME and CERT_SUBJ_ALT_NAMES already set to override
+@if "%DNAME%" == "" set DNAME=CN=cas.example.org,OU=Example,OU=Org,C=US
+@rem List other host names or ip addresses you want in your certificate, may help with host name verification, 
+@rem   if client apps make https connection for ticket validation and compare name in cert (include sub. alt. names) 
+@rem   to name used to access CAS
+@if "%CERT_SUBJ_ALT_NAMES%" == "" set CERT_SUBJ_ALT_NAMES=dns:example.org,dns:localhost,dns:%COMPUTERNAME%,ip:127.0.0.1
+
+@rem Check for mvn in path, use it if found, otherwise use maven wrapper
+@set MAVEN_CMD=mvn
+@where /q mvn
+@if %ERRORLEVEL% neq 0 set MAVEN_CMD=.\mvnw.bat
+
+@if "%1" == "" call:help
+@if "%1" == "copy" call:copy
+@if "%1" == "clean" call:clean %2 %3 %4
+@if "%1" == "package" call:package %2 %3 %4
+@if "%1" == "bootrun"  call:bootrun %2 %3 %4
+@if "%1" == "debug" call:debug %2 %3 %4
+@if "%1" == "run" call:run %2 %3 %4
+@if "%1" == "runalone" call:runalone %2 %3 %4
+@if "%1" == "help" call:help
+@if "%1" == "gencert" call:gencert
+@if "%1" == "cli" call:runcli %2 %3 %4
+
+@rem function section starts here
+@goto:eof
+
+:copy
+    @echo "Creating configuration directory under %CONFIG_DIR%"
+    if not exist %CONFIG_DIR% mkdir %CONFIG_DIR%
+
+    @echo "Copying configuration files from etc/cas to /etc/cas"
+    xcopy /S /Y etc\cas\* \etc\cas
+@goto:eof
+
+:help
+    @echo "Usage: build.bat [copy|clean|package|run|debug|bootrun|gencert|cli] [optional extra args for maven or cli]"
+    @echo "To get started on a clean system, run "build.bat copy" and "build.bat gencert", then "build.bat run"
+    @echo "Note that using the copy or gencert arguments will create and/or overwrite the %CAS_DIR% which is outside this project"
+@goto:eof
+
+:clean
+    call %MAVEN_CMD% clean %1 %2 %3
+    exit /B %ERRORLEVEL%
+@goto:eof
+
+:package
+    call %MAVEN_CMD% clean package -T 5 %1 %2 %3
+    exit /B %ERRORLEVEL%
+@goto:eof
+
+:bootrun
+    call %MAVEN_CMD% clean package spring-boot:run -T 5 %1 %2 %3
+    exit /B %ERRORLEVEL%
+@goto:eof
+
+:debug
+    call:package %1 %2 %3 & java %JAVA_ARGS% -Xdebug -Xrunjdwp:transport=dt_socket,address=5000,server=y,suspend=n -jar target/cas.war
+@goto:eof
+
+:run
+    call:package %1 %2 %3 & java %JAVA_ARGS% -jar target/cas.war
+@goto:eof
+
+:runalone
+    call:package %1 %2 %3 & target/cas.war
+@goto:eof
+
+:gencert
+    where /q keytool
+    if ERRORLEVEL 1 (
+        @echo Java keytool.exe not found in path. 
+        exit /b 1
+    ) else (
+        if not exist %CAS_DIR% mkdir %CAS_DIR%
+        @echo on
+        @echo Generating self-signed SSL cert for %DNAME% in %CAS_DIR%\thekeystore
+        keytool -genkeypair -alias cas -keyalg RSA -keypass changeit -storepass changeit -keystore %CAS_DIR%\thekeystore -dname %DNAME% -ext SAN=%CERT_SUBJ_ALT_NAMES%
+        @echo Exporting cert for use in trust store (used by cas clients)
+        keytool -exportcert -alias cas -storepass changeit -keystore %CAS_DIR%\thekeystore -file %CAS_DIR%\cas.cer
+    )
+@goto:eof
+
+:runcli
+    for /f %%i in ('call %MAVEN_CMD% -q --non-recursive "-Dexec.executable=cmd" "-Dexec.args=/C echo ${cas.version}" "org.codehaus.mojo:exec-maven-plugin:1.3.1:exec"') do set CAS_VERSION=%%i
+    @set CAS_VERSION=%CAS_VERSION: =%
+    @set DOWNLOAD_DIR=target
+    @set COMMAND_FILE=cas-server-support-shell-%CAS_VERSION%.jar
+    @if not exist %DOWNLOAD_DIR% mkdir %DOWNLOAD_DIR%
+    @if not exist %DOWNLOAD_DIR%\%COMMAND_FILE% ( 
+        @call mvn org.apache.maven.plugins:maven-dependency-plugin:3.0.2:get -DgroupId=org.apereo.cas -DartifactId=cas-server-support-shell -Dversion=%CAS_VERSION% -Dpackaging=jar -DartifactItem.outputDirectory=%DOWNLOAD_DIR% -DartifactItem.destFileName=%COMMAND_FILE% -DremoteRepositories=central::default::http://repo1.maven.apache.org/maven2,snapshots::::https://oss.sonatype.org/content/repositories/snapshots -Dtransitive=false
+        @call mvn org.apache.maven.plugins:maven-dependency-plugin:3.0.2:copy -Dmdep.useBaseVersion=true -Dartifact=org.apereo.cas:cas-server-support-shell:%CAS_VERSION%:jar -DoutputDirectory=%DOWNLOAD_DIR%
+    )
+    @call java %JAVA_ARGS% -jar %DOWNLOAD_DIR%\%COMMAND_FILE% %1 %2 %3
+
+@goto:eof

+ 189 - 0
build.sh

@@ -0,0 +1,189 @@
+#!/bin/bash
+
+
+function copy() {
+	echo -e "Creating configuration directory under /etc/cas"
+	mkdir -p /etc/cas/config
+
+	echo -e "Copying configuration files from etc/cas to /etc/cas"
+	cp -rfv etc/cas/* /etc/cas
+}
+
+function help() {
+	echo "Usage: build.sh [copy|clean|package|run|debug|bootrun|gencert]"
+	echo "	copy: Copy config from ./etc/cas/config to /etc/cas/config"
+	echo "	clean: Clean Maven build directory"
+	echo "	package: Clean and build CAS war"
+	echo "	run: Build and run cas.war via Java (i.e. java -jar target/cas.war)"
+	echo "	runalone: Build and run cas.war on its own as a standalone executable (target/cas.war)"
+	echo "	debug: Run CAS.war and listen for Java debugger on port 5000"
+	echo "	bootrun: Run with maven spring boot plugin"
+	echo "	listviews: List all CAS views that ship with the web application and can be customized in the overlay"
+	echo "	getview: Ask for a view name to be included in the overlay for customizations"
+	echo "	gencert: Create keystore with SSL certificate in location where CAS looks by default"
+	echo "	cli: Run the CAS command line shell and pass commands"
+}
+
+function clean() {
+    shift
+	./mvnw clean "$@"
+}
+
+function package() {
+    shift
+	./mvnw clean package -T 5 "$@"
+	# copy
+}
+
+function bootrun() {
+    shift
+	./mvnw clean package spring-boot:run -P bootiful -T 5 "$@"
+}
+
+function debug() {
+	package && java -Xdebug -Xrunjdwp:transport=dt_socket,address=5000,server=y,suspend=n -jar target/cas.war
+}
+
+function run() {
+	package && java -jar target/cas.war
+}
+
+function runalone() {
+	shift
+   ./mvnw clean package -P default,exec  "$@"
+    chmod +x target/cas.war
+   target/cas.war
+}
+
+function listviews() {
+	shift
+	explodeapp
+	find $PWD/target/cas -type f -name "*.html" | xargs -n 1 basename | sort | more
+}
+
+function explodeapp() {
+	if [ ! -d $PWD/target/cas ];then
+		echo "Building the CAS web application and exploding the final war file..."
+		./mvnw clean package war:exploded "$@"
+	fi
+	echo "Exploded the CAS web application file."
+}
+
+function getview() {
+	shift
+	explodeapp
+	echo "Searching for view name $@..."
+	results=`find $PWD/target/cas -type f -name "*.html" | grep -i "$@"`
+	echo -e "Found view(s): \n$results"
+	count=`wc -w <<< "$results"`
+	if [ "$count" -eq 1 ];then
+		# echo "Found view $results to include in the overlay"
+		firststring="target/cas/WEB-INF/classes"
+		secondstring="src/main/resources"
+		overlayfile=`echo "${results/$firststring/$secondstring}"`
+		overlaypath=`dirname "${overlayfile}"`
+		# echo "Overlay file is $overlayfile to be created at $overlaypath"
+		mkdir -p $overlaypath
+		cp $results $overlaypath
+		echo "Created view at $overlayfile"
+		ls $overlayfile
+	else
+		echo "More than one view file is found. Narrow down the search query..."
+	fi
+}
+
+
+function gencert() {
+	if [[ ! -d /etc/cas ]] ; then
+		copy
+	fi
+	which keytool
+	if [[ $? -ne 0 ]] ; then
+		echo Error: Java JDK \'keytool\' is not installed or is not in the path
+		exit 1
+	fi
+	# override DNAME and CERT_SUBJ_ALT_NAMES before calling or use dummy values
+	DNAME="${DNAME:-CN=cas.example.org,OU=Example,OU=Org,C=US}"
+	CERT_SUBJ_ALT_NAMES="${CERT_SUBJ_ALT_NAMES:-dns:example.org,dns:localhost,ip:127.0.0.1}"
+	echo "Generating keystore for CAS with DN ${DNAME}"
+	keytool -genkeypair -alias cas -keyalg RSA -keypass changeit -storepass changeit -keystore /etc/cas/thekeystore -dname ${DNAME} -ext SAN=${CERT_SUBJ_ALT_NAMES}
+	keytool -exportcert -alias cas -storepass changeit -keystore /etc/cas/thekeystore -file /etc/cas/cas.cer
+}
+
+function cli() {
+
+	CAS_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${cas.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.3.1:exec 2>/dev/null)
+	# echo "CAS version: $CAS_VERSION"
+	JAR_FILE_NAME="cas-server-support-shell-${CAS_VERSION}.jar"
+	# echo "JAR name: $JAR_FILE_NAME"
+	JAR_PATH="org/apereo/cas/cas-server-support-shell/${CAS_VERSION}/${JAR_FILE_NAME}"
+	# echo "JAR path: $JAR_PATH"
+
+	JAR_FILE_LOCAL="$HOME/.m2/repository/$JAR_PATH";
+	# echo "Local JAR file path: $JAR_FILE_LOCAL";
+	if [ -f "$JAR_FILE_LOCAL" ]; then
+		# echo "Using JAR file locally at $JAR_FILE_LOCAL"
+		java -jar $JAR_FILE_LOCAL "$@"
+		exit 0;
+	fi
+
+	DOWNLOAD_DIR=./target
+	COMMAND_FILE="${DOWNLOAD_DIR}/${JAR_FILE_NAME}"
+	if [ ! -f "$COMMAND_FILE" ]; then
+		mkdir -p $DOWNLOAD_DIR
+		./mvnw org.apache.maven.plugins:maven-dependency-plugin:3.0.2:get -DgroupId=org.apereo.cas -DartifactId=cas-server-support-shell -Dversion=$CAS_VERSION -Dpackaging=jar -DartifactItem.outputDirectory=$DOWNLOAD_DIR -DremoteRepositories=central::default::http://repo1.maven.apache.org/maven2,snapshots::::https://oss.sonatype.org/content/repositories/snapshots -Dtransitive=false
+		./mvnw org.apache.maven.plugins:maven-dependency-plugin:3.0.2:copy -Dmdep.useBaseVersion=true -Dartifact=org.apereo.cas:cas-server-support-shell:$CAS_VERSION:jar -DoutputDirectory=$DOWNLOAD_DIR
+	fi
+	java -jar $COMMAND_FILE "$@"
+	exit 0;
+
+}
+
+if [ $# -eq 0 ]; then
+    echo -e "No commands provided. Defaulting to [run]\n"
+    run
+    exit 0
+fi
+
+case "$1" in
+"copy")
+    copy
+    ;;
+"clean")
+	shift
+    clean "$@"
+    ;;
+"package")
+	shift
+    package "$@"
+    ;;
+"bootrun")
+	shift
+    bootrun "$@"
+    ;;
+"debug")
+    debug "$@"
+    ;;
+"run")
+    run "$@"
+    ;;
+"runalone")
+    runalone "$@"
+    ;;
+"listviews")
+    listviews "$@"
+    ;;
+"gencert")
+    gencert "$@"
+    ;;
+"getview")
+    getview "$@"
+    ;;
+"cli")
+    shift
+    cli "$@"
+    ;;
+*)
+    help
+    ;;
+esac

+ 6 - 0
etc/cas/config/cas.properties

@@ -0,0 +1,6 @@
+cas.server.name: https://cas.example.org:8443
+cas.server.prefix: https://cas.example.org:8443/cas
+
+cas.adminPagesSecurity.ip=127\.0\.0\.1
+
+logging.config: file:/etc/cas/config/log4j2.xml

+ 117 - 0
etc/cas/config/log4j2.xml

@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- Specify the refresh internal in seconds. -->
+<Configuration monitorInterval="5" packages="org.apereo.cas.logging">
+    <Properties>
+        <!-- 
+        Default log directory is the current directory but that can be overridden with -Dcas.log.dir=<logdir>
+        Or you can change this property to a new default
+        -->
+        <Property name="cas.log.dir" >.</Property>
+        <!-- To see more CAS specific logging, adjust this property to info or debug or run server with -Dcas.log.leve=debug -->
+        <Property name="cas.log.level" >warn</Property>
+    </Properties>
+    <Appenders>
+        <Console name="console" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d %p [%c] - &lt;%m&gt;%n"/>
+        </Console>
+        <RollingFile name="file" fileName="${sys:cas.log.dir}/cas.log" append="true"
+                     filePattern="${sys:cas.log.dir}/cas-%d{yyyy-MM-dd-HH}-%i.log">
+            <PatternLayout pattern="%d %p [%c] - &lt;%m&gt;%n"/>
+            <Policies>
+                <OnStartupTriggeringPolicy />
+                <SizeBasedTriggeringPolicy size="10 MB"/>
+                <TimeBasedTriggeringPolicy />
+            </Policies>
+        </RollingFile>
+        <RollingFile name="auditlogfile" fileName="${sys:cas.log.dir}/cas_audit.log" append="true"
+                     filePattern="${sys:cas.log.dir}/cas_audit-%d{yyyy-MM-dd-HH}-%i.log">
+            <PatternLayout pattern="%d %p [%c] - %m%n"/>
+            <Policies>
+                <OnStartupTriggeringPolicy />
+                <SizeBasedTriggeringPolicy size="10 MB"/>
+                <TimeBasedTriggeringPolicy />
+            </Policies>
+        </RollingFile>
+
+        <RollingFile name="perfFileAppender" fileName="${sys:cas.log.dir}/perfStats.log" append="true"
+                     filePattern="${sys:cas.log.dir}/perfStats-%d{yyyy-MM-dd-HH}-%i.log">
+            <PatternLayout pattern="%m%n"/>
+            <Policies>
+                <OnStartupTriggeringPolicy />
+                <SizeBasedTriggeringPolicy size="10 MB"/>
+                <TimeBasedTriggeringPolicy />
+            </Policies>
+        </RollingFile>
+
+        <CasAppender name="casAudit">
+            <AppenderRef ref="auditlogfile" />
+        </CasAppender>
+        <CasAppender name="casFile">
+            <AppenderRef ref="file" />
+        </CasAppender>
+        <CasAppender name="casConsole">
+            <AppenderRef ref="console" />
+        </CasAppender>
+        <CasAppender name="casPerf">
+            <AppenderRef ref="perfFileAppender" />
+        </CasAppender>
+    </Appenders>
+    <Loggers>
+        <!-- If adding a Logger with level set higher than warn, make category as selective as possible -->
+        <!-- Loggers inherit appenders from Root Logger unless additivity is false -->
+        <AsyncLogger name="org.apereo" level="${sys:cas.log.level}" includeLocation="true"/>
+        <AsyncLogger name="org.apereo.services.persondir" level="${sys:cas.log.level}" includeLocation="true"/>
+        <AsyncLogger name="org.apereo.cas.web.flow" level="info" includeLocation="true"/>
+        <AsyncLogger name="org.apache" level="warn" />
+        <AsyncLogger name="org.apache.http" level="error" />
+        <AsyncLogger name="org.springframework" level="warn" />
+        <AsyncLogger name="org.springframework.cloud.server" level="warn" />
+        <AsyncLogger name="org.springframework.cloud.client" level="warn" />
+        <AsyncLogger name="org.springframework.cloud.bus" level="warn" />
+        <AsyncLogger name="org.springframework.aop" level="warn" />
+        <AsyncLogger name="org.springframework.boot" level="warn" />
+        <AsyncLogger name="org.springframework.boot.actuate.autoconfigure" level="warn" />
+        <AsyncLogger name="org.springframework.webflow" level="warn" />
+        <AsyncLogger name="org.springframework.session" level="warn" />
+        <AsyncLogger name="org.springframework.amqp" level="error" />
+        <AsyncLogger name="org.springframework.integration" level="warn" />
+        <AsyncLogger name="org.springframework.messaging" level="warn" />
+        <AsyncLogger name="org.springframework.web" level="warn" />
+        <AsyncLogger name="org.springframework.orm.jpa" level="warn" />
+        <AsyncLogger name="org.springframework.scheduling" level="warn" />
+        <AsyncLogger name="org.springframework.context.annotation" level="error" />
+        <AsyncLogger name="org.springframework.boot.devtools" level="error" />
+        <AsyncLogger name="org.springframework.web.socket" level="warn" />
+        <AsyncLogger name="org.thymeleaf" level="warn" />
+        <AsyncLogger name="org.pac4j" level="warn" />
+        <AsyncLogger name="org.opensaml" level="warn"/>
+        <AsyncLogger name="net.sf.ehcache" level="warn" />
+        <AsyncLogger name="com.couchbase" level="warn" includeLocation="true"/>
+        <AsyncLogger name="com.ryantenney.metrics" level="warn" />
+        <AsyncLogger name="net.jradius" level="warn" />
+        <AsyncLogger name="org.openid4java" level="warn" />
+        <AsyncLogger name="org.ldaptive" level="warn" />
+        <AsyncLogger name="com.hazelcast" level="warn" />
+        <AsyncLogger name="org.apereo.spring" level="warn" />
+
+        <!-- Log perf stats only to perfStats.log -->
+        <AsyncLogger name="perfStatsLogger" level="info" additivity="false" includeLocation="true">
+            <AppenderRef ref="casPerf"/>
+        </AsyncLogger>
+
+        <!-- Log audit to all root appenders, and also to audit log (additivity is not false) -->
+        <AsyncLogger name="org.apereo.inspektr.audit.support" level="info" includeLocation="true" >
+            <AppenderRef ref="casAudit"/>
+        </AsyncLogger>
+
+        <!-- All Loggers inherit appenders specified here, unless additivity="false" on the Logger -->
+        <AsyncRoot level="warn">
+            <AppenderRef ref="casFile"/>
+            <!-- 
+                 For deployment to an application server running as service, 
+                 delete the casConsole appender below
+            -->
+            <AppenderRef ref="casConsole"/>
+        </AsyncRoot>
+    </Loggers>
+</Configuration>

BIN
maven/maven-wrapper.jar


+ 3 - 0
maven/maven-wrapper.properties

@@ -0,0 +1,3 @@
+#Maven download properties
+#Fri Dec 01 21:35:11 MST 2017
+distributionUrl=https\://repository.apache.org/content/repositories/releases/org/apache/maven/apache-maven/3.5.2/apache-maven-3.5.2-bin.zip

+ 3 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9.info

@@ -0,0 +1,3 @@
+1564995798000
+(?:[^/]+/)*?[^/]*?
+META-INF(?:$|/.+)

+ 4 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/META-INF/spring.factories

@@ -0,0 +1,4 @@
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+  org.apereo.cas.config.CasEmbeddedContainerTomcatConfiguration,\
+  org.apereo.cas.config.CasEmbeddedContainerTomcatFiltersConfiguration
+

+ 2 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/apereo.properties

@@ -0,0 +1,2 @@
+cas.javascript.file=/themes/apereo/js/cas.js
+cas.standard.css.file=themes/apereo/css/cas.css

+ 111 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/application.properties

@@ -0,0 +1,111 @@
+##
+# CAS Server Context Configuration
+#
+server.context-path=/cas
+server.port=8443
+
+server.ssl.key-store=file:/etc/cas/thekeystore
+server.ssl.key-store-password=changeit
+server.ssl.key-password=changeit
+
+server.max-http-header-size=2097152
+server.use-forward-headers=true
+server.connection-timeout=20000
+server.error.include-stacktrace=ALWAYS
+
+server.compression.enabled=true
+server.compression.mime-types=application/javascript,application/json,application/xml,text/html,text/xml,text/plain
+
+server.tomcat.max-http-post-size=2097152
+server.tomcat.basedir=build/tomcat
+server.tomcat.accesslog.enabled=true
+server.tomcat.accesslog.pattern=%t %a "%r" %s (%D ms)
+server.tomcat.accesslog.suffix=.log
+server.tomcat.min-spare-threads=10
+server.tomcat.max-threads=200
+server.tomcat.port-header=X-Forwarded-Port
+server.tomcat.protocol-header=X-Forwarded-Proto
+server.tomcat.protocol-header-https-value=https
+server.tomcat.remote-ip-header=X-FORWARDED-FOR
+server.tomcat.uri-encoding=UTF-8
+
+spring.http.encoding.charset=UTF-8
+spring.http.encoding.enabled=true
+spring.http.encoding.force=true
+
+##
+# CAS Cloud Bus Configuration
+#
+spring.cloud.bus.enabled=false
+
+# Indicates that systemPropertiesOverride can be used.
+# Set to false to prevent users from changing the default accidentally. Default true.
+spring.cloud.config.allow-override=true
+
+# External properties should override system properties.
+spring.cloud.config.override-system-properties=false
+
+# When allowOverride is true, external properties should take lowest priority, and not override any
+# existing property sources (including local config files).
+spring.cloud.config.override-none=false
+
+# spring.cloud.bus.refresh.enabled=true
+# spring.cloud.bus.env.enabled=true
+# spring.cloud.bus.destination=CasCloudBus
+# spring.cloud.bus.ack.enabled=true
+
+endpoints.enabled=false
+endpoints.sensitive=true
+
+endpoints.restart.enabled=false
+endpoints.shutdown.enabled=false
+
+# Control the security of the management/actuator endpoints
+# The 'enabled' flag below here controls the rendering of details for the health endpoint amongst other things.
+management.security.enabled=true
+management.security.roles=ACTUATOR,ADMIN
+management.security.sessions=if_required
+management.context-path=/status
+management.add-application-context-header=false
+
+# Define a CAS-specific "WARN" status code and its order
+management.health.status.order=WARN, DOWN, OUT_OF_SERVICE, UNKNOWN, UP
+
+# Control the security of the management/actuator endpoints
+# With basic authentication, assuming Spring Security and/or relevant modules are on the classpath.
+security.basic.authorize-mode=role
+security.basic.path=/cas/status/**
+# security.basic.enabled=true
+# security.user.name=casuser
+# security.user.password=
+
+##
+# CAS Web Application Session Configuration
+#
+server.session.timeout=300
+server.session.cookie.http-only=true
+server.session.tracking-modes=COOKIE
+
+##
+# CAS Thymeleaf View Configuration
+#
+spring.thymeleaf.encoding=UTF-8
+spring.thymeleaf.cache=true
+spring.thymeleaf.mode=HTML
+spring.thymeleaf.template-resolver-order=100
+##
+# CAS Log4j Configuration
+#
+# logging.config=file:/etc/cas/log4j2.xml
+server.context-parameters.isLog4jAutoInitializationDisabled=true
+
+##
+# CAS AspectJ Configuration
+#
+spring.aop.auto=true
+spring.aop.proxy-target-class=true
+
+##
+# CAS Authentication Credentials
+#
+cas.authn.accept.users=casuser::Mellon

+ 0 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/application.yml


+ 29 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/bootstrap.properties

@@ -0,0 +1,29 @@
+##
+# CAS Spring Cloud Config Client
+#
+# Name of the application for which environment settings and properties should be fetched.
+# This should map to a cas.yml or cas.properties file.
+spring.application.name=cas
+spring.profiles.active=standalone
+
+# Define where the configuration server is running
+# and what credentials are used to access it.
+# By default, basic authN is used.
+spring.cloud.config.uri=http://casuser:Mellon@localhost:8888/casconfigserver
+spring.cloud.config.profile=native
+
+# Configuration server is off by default.
+spring.cloud.config.enabled=false
+        
+spring.cloud.config.watch.enabled=true
+spring.cloud.config.watch.initialDelay=30000
+spring.cloud.config.watch.delay=1000
+
+spring.cloud.config.fail-fast=true
+health.config.enabled=true
+
+# Do NOT modify this line below.
+# If you wish to change the configuration directory, it's best to not
+# overlay this file, but specify the directory location via command-line
+# parameters or system properties via -D.
+# cas.standalone.configurationDirectory=/etc/cas/config

+ 3 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/cas-theme-default.properties

@@ -0,0 +1,3 @@
+cas.standard.css.file=/css/cas.css
+cas.admin.css.file=/css/admin.css
+cas.javascript.file=/js/cas.js

+ 228 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/log4j2.xml

@@ -0,0 +1,228 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!-- Specify the refresh internal in seconds. -->
+<Configuration monitorInterval="5" packages="org.apereo.cas.logging">
+    <Properties>
+        <Property name="baseDir">/etc/cas/logs</Property>
+    </Properties>
+    <Appenders>
+        <Console name="console" target="SYSTEM_OUT">
+            <PatternLayout pattern="%d %p [%c] - &lt;%m&gt;%n"/>
+        </Console>
+
+        <RollingFile name="file" fileName="${baseDir}/cas.log" append="true"
+                     filePattern="${baseDir}/cas-%d{yyyy-MM-dd-HH}-%i.log">
+            <PatternLayout pattern="%highlight{%d %p [%c] - &lt;%m&gt;}%n"/>
+            <Policies>
+                <OnStartupTriggeringPolicy />
+                <SizeBasedTriggeringPolicy size="10 MB"/>
+                <TimeBasedTriggeringPolicy />
+            </Policies>
+            <DefaultRolloverStrategy max="5" compressionLevel="9">
+                <Delete basePath="${baseDir}" maxDepth="2">
+                    <IfFileName glob="*/*.log.gz" />
+                    <IfLastModified age="7d" />
+                </Delete>
+            </DefaultRolloverStrategy>
+        </RollingFile>
+        <RollingFile name="auditlogfile" fileName="${baseDir}/cas_audit.log" append="true"
+                     filePattern="${baseDir}/cas_audit-%d{yyyy-MM-dd-HH}-%i.log">
+            <PatternLayout pattern="%d %p [%c] - %m%n"/>
+            <Policies>
+                <OnStartupTriggeringPolicy />
+                <SizeBasedTriggeringPolicy size="10 MB"/>
+                <TimeBasedTriggeringPolicy />
+            </Policies>
+            <DefaultRolloverStrategy max="5" compressionLevel="9">
+                <Delete basePath="${baseDir}" maxDepth="2">
+                    <IfFileName glob="*/*.log.gz" />
+                    <IfLastModified age="7d" />
+                </Delete>
+            </DefaultRolloverStrategy>
+        </RollingFile>
+
+        <RollingFile name="perfFileAppender" fileName="${baseDir}/perfStats.log" append="true"
+                     filePattern="${baseDir}/perfStats-%d{yyyy-MM-dd-HH}-%i.log">
+            <PatternLayout pattern="%m%n"/>
+            <Policies>
+                <OnStartupTriggeringPolicy />
+                <SizeBasedTriggeringPolicy size="10 MB"/>
+                <TimeBasedTriggeringPolicy />
+            </Policies>
+            <DefaultRolloverStrategy max="5" compressionLevel="9">
+                <Delete basePath="${baseDir}" maxDepth="2">
+                    <IfFileName glob="*/*.log.gz" />
+                    <IfLastModified age="7d" />
+                </Delete>
+            </DefaultRolloverStrategy>
+        </RollingFile>
+
+        <CasAppender name="casAudit">
+            <AppenderRef ref="auditlogfile" />
+        </CasAppender>
+        <CasAppender name="casFile">
+            <AppenderRef ref="file" />
+        </CasAppender>
+        <CasAppender name="casConsole">
+            <AppenderRef ref="console" />
+        </CasAppender>
+        <CasAppender name="casPerf">
+            <AppenderRef ref="perfFileAppender" />
+        </CasAppender>
+    </Appenders>
+    <Loggers>
+        <AsyncLogger name="com.couchbase" level="off" additivity="false" includeLocation="true">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.apereo.cas.web.CasWebApplication" level="info" additivity="false" includeLocation="true">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.security" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.boot.autoconfigure.security" level="info" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.jasig.cas.client" level="info" additivity="false" includeLocation="true">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.apereo" level="info" additivity="false" includeLocation="true">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.apereo.services.persondir" level="off" additivity="false" includeLocation="true">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.apache" level="error" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.cloud" level="info" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.cloud.context" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.boot" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.aop" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.boot.actuate.autoconfigure" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.webflow" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.session" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.amqp" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.integration" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.messaging" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.web" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.orm.jpa" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.scheduling" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.thymeleaf" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.pac4j" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.opensaml" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="net.sf.ehcache" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="com.ryantenney.metrics" level="off" additivity="false">
+            <AppenderRef ref="console"/>
+            <AppenderRef ref="file"/>
+        </AsyncLogger>
+        <AsyncLogger name="net.jradius" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.openid4java" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.ldaptive" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="com.hazelcast" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.context.annotation" level="off" additivity="false" />
+        <AsyncLogger name="org.springframework.boot.devtools" level="off" additivity="false" />
+        <AsyncLogger name="org.jasig.spring" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.springframework.web.socket" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.apache.cxf" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.apache.http" level="off" additivity="false">
+            <AppenderRef ref="casConsole"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="perfStatsLogger" level="info" additivity="false" includeLocation="true">
+            <AppenderRef ref="casPerf"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.apereo.cas.web.flow" level="info" additivity="true" includeLocation="true">
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncLogger name="org.apereo.inspektr.audit.support" level="info" includeLocation="true">
+            <AppenderRef ref="casAudit"/>
+            <AppenderRef ref="casFile"/>
+        </AsyncLogger>
+        <AsyncRoot level="error">
+            <AppenderRef ref="casConsole"/>
+        </AsyncRoot>
+    </Loggers>
+</Configuration>

+ 571 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages.properties

@@ -0,0 +1,571 @@
+screen.welcome.welcome=Congratulations on bringing CAS online!  To learn how to authenticate, please review the default authentication handler configuration.
+screen.welcome.security=For security reasons, please <a href="logout">log out</a> and exit your web browser when you are done accessing \
+  services that require authentication!
+screen.welcome.instructions=Enter your Username and Password
+screen.welcome.label.netid=<span class="accesskey">U</span>sername:
+screen.welcome.label.netid.accesskey=u
+screen.welcome.label.password=<span class="accesskey">P</span>assword:
+screen.welcome.label.password.accesskey=p
+screen.welcome.label.publicstation=I am at a public workstation.
+screen.welcome.label.warn=<span class="accesskey">W</span>arn me!
+screen.welcome.label.warn.accesskey=w
+screen.welcome.label.warnremove=Do not warn me again
+screen.welcome.button.login=LOGIN
+screen.welcome.button.logout=LOGOUT
+screen.welcome.button.loginwip=One moment please...
+screen.welcome.button.register=Register
+screen.welcome.button.print=Print
+screen.welcome.button.clear=CLEAR
+screen.welcome.label.loginwith=Or login with:
+
+screen.cookies.disabled.title=Browser cookies disabled
+screen.cookies.disabled.message=Your browser does not accept cookies. Single Sign On WILL NOT WORK.
+
+screen.pm.button.submit=SUBMIT
+screen.pm.button.cancel=CANCEL
+screen.pm.button.forgotpwd=<a href="https://pwd.example.org">Forgot your password? </a>
+screen.pm.button.resetPassword=Reset your password
+screen.pm.reset.username=Username:
+screen.pm.reset.heading=Password Reset Failed
+screen.pm.reset.message=We were unable to process your password reset request at this time.
+screen.pm.reset.qstitle=Answer Security Questions
+screen.pm.reset.qsmsg=Welcome <strong>{0}</strong>. Before you can reset your password, you must answer the following security questions.
+screen.pm.reset.sentInstructions=You should shortly receive an email with follow-instructions to reset your password. Please do not take \
+  long as the password reset instructions may expire.
+screen.pm.reset.sent=Password Reset Instructions Sent Successfully.
+screen.pm.reset.title=Reset your password
+screen.pm.reset.instructions=Please provide your username. You will receive an email with follow-up instructions on how to reset \
+  your password.
+screen.pm.password.policyViolation=Password does not match the password policy requirement.
+screen.pm.password.confirmMismatch=Passwords do not match.
+screen.pm.password.strength=Strength:
+screen.pm.password.strength.0=Worst
+screen.pm.password.strength.1=Bad
+screen.pm.password.strength.2=Weak
+screen.pm.password.strength.3=Good
+screen.pm.password.strength.4=Strong
+
+screen.aup.heading=Acceptable Usage Policy
+screen.aup.button.accept=ACCEPT
+screen.aup.button.cancel=CANCEL
+
+screen.consent.confirm=CONFIRM
+screen.consent.cancel=CANCEL
+screen.consent.title=Attribute Consent
+screen.consent.attributes=Attributes
+screen.consent.options=Options
+screen.consent.attributes.header=The following attributes will be released to <strong>[{0}]</strong>:
+screen.consent.attributes.attribute=Attribute
+screen.consent.attributes.values=Value(s)
+screen.consent.attributes.data.info=Showing _START_ to _END_ of _TOTAL_ entries
+screen.consent.options.header=How should I be prompted for consent again?
+screen.consent.options.always=<strong>Every Time</strong>
+screen.consent.options.desc.always=Show the consent screen every time I attempt to log into {0}.
+screen.consent.options.attributename=<strong>Attribute Name</strong>
+screen.consent.options.desc.attributename=Show the consent screen, if an attribute is added or removed from the collection of attributes released to {0}.
+screen.consent.options.attributevalue=<strong>Attribute Value</strong>
+screen.consent.options.desc.attributevalue.intro=Show the consent screen, if:
+screen.consent.options.desc.attributevalue.first=A new attribute is authorized for release to {0}.
+screen.consent.options.desc.attributevalue.second=An attribute is removed from the attribute bundle previously released to {0}.
+screen.consent.options.desc.attributevalue.third=The value of an attribute authorized for release to {0} has changed.
+screen.consent.options.reminder.header=How often should I be reminded to consent again?
+screen.consent.options.reminder.expl=Show the consent screen, as a reminder, in the event that there is no change to the collection of attributes released to {0}.
+screen.consent.options.timeunit.seconds=Seconds
+screen.consent.options.timeunit.minutes=Minutes
+screen.consent.options.timeunit.hours=Hours
+screen.consent.options.timeunit.days=Days
+screen.consent.options.timeunit.weeks=Weeks
+screen.consent.options.timeunit.months=Months
+screen.consent.options.timeunit.years=Years
+
+screen.consent.review.header=Review Attribute Consent
+screen.consent.review.loading=Loading consent decisions...
+screen.consent.review.noconsentdecisions=There are no consent decisions registered for you.
+screen.consent.review.success=Consent decision was deleted successfully.
+screen.consent.review.error=There was an error!
+screen.consent.review.confirm=Delete consent decision for [{}]?
+screen.consent.review.yes=Yes
+screen.consent.review.no=No
+screen.consent.review.date=Date
+screen.consent.review.service=Service
+screen.consent.review.delete=DELETE
+screen.consent.review.createddate=Created Date:
+screen.consent.review.reminder=Reminder:
+screen.consent.review.option=Option:
+screen.consent.review.options.attributename=Attribute Name
+screen.consent.review.options.attributevalue=Attribute Value
+screen.consent.review.options.always=Always
+screen.consent.review.options.desc.always=Show the consent screen every time I attempt to log in.
+screen.consent.review.options.desc.attributename=Show the consent screen, if an attribute is added or removed from the collection of attributes released.
+screen.consent.review.options.desc.attributevalue=Show the consent screen, if 1) a new attribute is authorized for release, 2) an attribute is removed from the attribute bundle previously released, 3) the value of an attribute authorized for release has changed.
+screen.consent.review.attributes=Attributes:
+screen.consent.review.data.search=Search
+screen.consent.review.data.zerorecords=No matching decisions found
+screen.consent.review.data.info=Showing _START_ to _END_ of _TOTAL_ entries
+screen.consent.review.data.infofiltered=(filtered from _MAX_ total entries)
+screen.consent.review.data.infoempty=No decisions to show
+screen.consent.review.logout.success=You have successfully logged out of the Consent Review page. You may completely <a href="../logout">log out</a> of the Central Authentication Service and end your single sign-on session.
+
+screen.nonsecure.title=Non-secure Connection
+screen.nonsecure.message=You are currently accessing CAS over a non-secure connection. Single Sign On WILL NOT WORK. In order to have single sign on work, you MUST log in over HTTPS.
+
+screen.defaultauthn.title=Static Authentication
+screen.defaultauthn.heading=CAS is configured to accept a static list of users for primary authentication. Please be advised that this is ONLY useful for \
+  demo purposes. It is recommended that you connect CAS to LDAP, JDBC, etc instead.
+logo.title=go to Apereo home page
+copyright=Copyright &copy; 2005&ndash;2018 Apereo, Inc.
+screen.capslock.on = CAPSLOCK key is turned on!
+screen.button.continue=Continue
+screen.post.response.message=You are being redirected to {0}.
+
+screen.interrupt.title=Authentication Interrupt
+screen.interrupt.message=The authentication flow has been interrupted. CAS has not yet established a single sign-on session for <strong>{0}</strong>.
+
+screen.mdui.infolink.text=<a href="{0}" target="_blank">More information about this application</a>.
+screen.mdui.privacylink.text=<a href="{0}" target="_blank">Privacy statement for application</a>.
+
+screen.interrupt.btn.proceed=Proceed
+screen.interrupt.btn.cancel=Cancel
+
+# Generic Error Pages 401, 404, 500, etc
+########################################
+screen.error.page.heading=Error
+screen.error.page.title.accessdenied=Error - 401
+screen.error.page.title.permissiondenied=Error - Permission Denied
+screen.error.page.title.pagenotfound=Error - Page Not Found
+screen.error.page.title.requestunsupported=Error - Unsupported Request
+screen.error.page.accessdenied=Access Denied
+screen.error.page.permissiondenied=You do not have permission to view this page.
+screen.error.page.requestunsupported=The request type or syntax is not supported.
+screen.error.page.loginagain=Login Again
+screen.error.page.notfound=Page Not Found
+screen.error.page.doesnotexist=The page you are attempting to access does not exist at the moment.
+screen.error.page.authdenied=Authorization Denied
+
+# Remember-Me Authentication
+screen.rememberme.checkbox.title=Remember Me
+
+# Gua
+screen.gua.confirm.message=If you do not recognize this image as yours, do NOT continue.
+
+# Blocked Errors Page
+screen.error.page.title.blocked=Error - Permission Denied
+screen.blocked.header=Access Denied
+screen.blocked.message=You've entered the wrong password for the user too many times. You've been throttled.
+AbstractAccessDecisionManager.accessDenied=You are not authorized to access this resource. Contact your CAS administrator for more info.
+
+#Confirmation Screen Messages
+screen.confirmation.message=You asked to be warned before logging into applications. Please proceed.
+screen.authentication.warning=Authentication Succeeded with Warnings
+
+#Generic Success Screen Messages
+screen.success.header=Log In Successful
+screen.success.success=You, <strong>{0}</strong>, have successfully logged into the Central Authentication Service. However, you are seeing \
+  this page because CAS does not know about your target destination and how to get you there. Examine the authentication request again and \
+  make sure a target service/application that is authorized and registered with CAS is specified.
+screen.success.security=When you are finished, for security reasons, please <a href="logout">log out</a> and exit your web browser.
+
+#Logout Screen Messages
+screen.logout.confirm.header=Do you want to log out completely?
+screen.logout.confirm.text=An application may have redirected you to the Central Authentication Service \
+  to completely log you out and destroy your single sign-on session. If you choose to log out, you will be asked again \
+  to provide your credentials and re-autheticate once you attempt to access an application.<p><p><br>Do you want to proceed?
+
+screen.logout.header=Logout successful
+screen.logout.success=You have successfully logged out of the Central Authentication Service. You may <a href="login">log in</a> again.
+screen.logout.fc.success=You have successfully logged out of the Central Authentication Service. Given single logout is enabled with CAS, \
+  the following list of applications are <strong> only notified</strong> to log you out and destroy your user session. Remember that this \
+  is just a notification, not a guarantee. It is up the application itself to honor these notifications and properly take action to log you \
+  out.
+screen.logout.security=For security reasons, exit your web browser.
+
+screen.service.sso.error.header=Re-Authentication Required to Access this Service
+screen.service.sso.error.message=You attempted to access a service that requires authentication without re-authenticating.  Please try authenticating again</a>.
+screen.service.required.message=You attempted authentication without specifying the target application. Please re-examine the request and try again.
+
+captchaError=reCAPTCHA validation failed.
+username.required=Username is a required field.
+password.required=Password is a required field.
+
+# Password Management
+confirmedPassword.required=Password must be confirmed.
+pm.passwordsMustMatch=Provided passwords do not match.
+pm.passwordFailedCriteria=Provided password does not satisfy the password security policy. Please try again.
+pm.updateFailure=Account password could not be modified. Please try again.
+
+# Authentication failure messages
+authenticationFailure.AccountDisabledException=This account has been disabled.
+authenticationFailure.AccountLockedException=This account has been locked.
+authenticationFailure.AccountExpiredException=This account has expired and is forbidden to login at this time.
+authenticationFailure.CredentialExpiredException=Your password has expired.
+authenticationFailure.InvalidLoginLocationException=You cannot login from this workstation.
+authenticationFailure.InvalidLoginTimeException=Your account is forbidden to login at this time.
+authenticationFailure.AccountNotFoundException=Invalid credentials.
+authenticationFailure.FailedLoginException=Invalid credentials.
+authenticationFailure.SurrogateAuthenticationException=You are not authorized to impersonate the indicated user at this time.
+authenticationFailure.AccountPasswordMustChangeException=Your account password has expired and must be changed.
+authenticationFailure.UnauthorizedServiceForPrincipalException=Service access denied due to missing privileges.
+authenticationFailure.UNKNOWN=Invalid credentials.
+authenticationFailure.AuthenticationException=Credentials are rejected/invalid and authentication attempt has failed.
+
+INVALID_REQUEST_PROXY=The request is incorrectly formatted. Ensure all required parameters are properly encoded and included.
+INVALID_TICKET_SPEC=Ticket failed validation specification. Possible errors could include attempting to validate a Proxy Ticket via a Service Ticket validator, or not complying with the renew true request.
+INVALID_REQUEST=service and ticket parameters are both required
+INVALID_AUTHENTICATION_CONTEXT=The validation request for [''{0}''] cannot be satisfied. The request is either unrecognized or unfulfilled.
+INVALID_TICKET=Ticket ''{0}'' not recognized
+INVALID_PROXY_GRANTING_TICKET=PGT already generated for this ST. Cannot grant more than one PGT for ST
+INVALID_SERVICE=Ticket ''{0}'' does not match supplied service. The original service was ''{1}'' and the supplied service was ''{2}''.
+INVALID_PROXY_CALLBACK=The supplied proxy callback url ''{0}'' could not be authenticated. Either ''{0}'' cannot be reached, it is not \
+  allowed to exercise proxy authentication.
+UNAUTHORIZED_SERVICE_PROXY=The supplied service ''{0}'' is not authorized to use CAS proxy authentication.
+UNSATISFIED_AUTHN_POLICY=Service access denied due to an unsatisfied authentication policy.
+
+screen.service.error.header=Application Not Authorized to Use CAS
+service.principal.resolution.error=CAS is unable to determine the correct authentication principal. \
+  Either the principal could not be resolved correctly as a single unique entity or CAS has found \
+  mixed/multiple candidate principals and is unable to decide which should be used, with accuracy. \
+  This error may also be caused if the authenticated principal is not allowed to access the target application \
+  due to missing privileges set by the CAS server authorization policies.
+service.not.authorized.missing.attr=You are not authorized to access the application as your account \
+is missing privileges required by the CAS server to authenticate into this service. Please notify your support desk.
+screen.service.error.message=The application you attempted to authenticate to is not authorized to use CAS. \
+  This usually indicates that the application is not registered with CAS, or its authorization policy defined in its registration record \
+  prevents it from leveraging CAS functionality, or it's malformed and unrecognized by CAS. \
+  Contact your CAS administrator to learn how you might register and integrate your application with CAS.
+screen.service.empty.error.message=The services registry of CAS is empty and has no service definitions. \
+Applications that wish to authenticate with CAS must explicitly be defined in the services registry.
+
+# Surrogate Account Selection
+screen.surrogates.account.selection.header=Surrogate Account Selection
+screen.surrogates.choose.account=Choose Account
+screen.surrogates.message=<p>You are provided with a list of accounts on behalf of which you are allowed to authenticate.</p> \
+<p>Select one and continue.</p>
+screen.surrogates.button.cancel=Cancel
+
+
+# Password policy
+password.expiration.warning=Your password expires in {0} day(s). Please <a href="https://pm.example.edu">change your password</a> now.
+password.expiration.loginsRemaining=You have {0} login(s) remaining before you <strong>MUST</strong> change your password.
+screen.accountdisabled.heading=This account has been disabled.
+screen.accountdisabled.message=Please contact the system administrator to regain access.
+screen.accountlocked.heading=This account has been locked.
+screen.accountlocked.message=Please contact the system administrator to regain access.
+screen.expiredpass.heading=Your password has expired.
+screen.expiredpass.message=Please <a href="https://changepsw.exampple.org">change your password</a>.
+screen.mustchangepass.heading=You must change your password.
+screen.mustchangepass.message=Please <a href="https://changepsw.exampple.org">change your password</a>.
+screen.badhours.heading=Your account is forbidden to login at this time.
+screen.badhours.message=Please try again later.
+screen.authnblocked.heading=Authentication attempt is blocked.
+screen.authnblocked.message=Your authentication attempt is untrusted and unauthorized from your current workstation.
+screen.risk.authnblocked.heading=Authentication attempt is blocked.
+screen.risk.authnblocked.message=Your authentication attempt is untrusted and unauthorized from your current workstation.
+screen.badworkstation.heading=You cannot login from this workstation.
+screen.badworkstation.message=Please contact the system administrator to regain access.
+screen.button.changePassword=Change Password
+
+screen.pm.success.header=Password Change Successful
+screen.pm.success.message=Your account password is successfully updated.
+
+screen.pm.confirmpsw=Confirm Password:
+screen.pm.enterpsw=Enter Password:
+
+screen.pac4j.unauthz.pagetitle=Unauthorized Access
+screen.pac4j.unauthz.gotoapp=Goto Application
+screen.pac4j.unauthz.login=Back to CAS
+screen.pac4j.unauthz.heading=Unauthorized Access
+screen.pac4j.unauthz.message=Either the authentication request was rejected/cancelled, or the authentication provider denied access due \
+  to permissions, etc. Review logs to find the root cause of the issue.
+
+# GAuth
+screen.authentication.gauth.register=Your account is not registered. Use the below settings to register your device with CAS.
+screen.authentication.gauth.key=Secret key to register is {0}
+
+# OAuth
+screen.oauth.confirm.header=Authorization
+screen.oauth.confirm.message=Do you want to grant access to "{0}" ?
+screen.oauth.confirm.allow=Allow
+screen.oauth.confirm.deny=Deny
+cas.oauth.confirm.pagetitle=Approve Access
+
+# OIDC
+screen.oidc.confirm.infourl=Learn more about {0}.
+screen.oidc.confirm.privacyurl=Learn about {0} privacy rules.
+
+screen.oidc.confirm.scope.profile=This requests access to the profile claims excluding the address and email claims.
+screen.oidc.confirm.scope.email=This requests access to the email claims.
+screen.oidc.confirm.scope.address=This requests access to the address claims.
+screen.oidc.confirm.scope.openid=This indicates an OpenID Connect authorization request.
+screen.oidc.confirm.scope.phone=This requests access to the phone claims.
+screen.oidc.confirm.scope.offline_access=This requests access for a refresh token used for offline access.
+
+screen.oidc.confirm.asksinfo=The client is asking for the following information:
+screen.oidc.confirm.dynamic=This client was dynamically registered at <code>{0}</code>.
+
+# Unavailable
+screen.unavailable.header=CAS error
+screen.unavailable.heading=CAS is unable to process this request: "{0}:{1}"
+screen.unavailable.message=There was an error trying to complete your request. \
+<strong>Please notify your support desk or try again.</strong> \
+<div>Apereo is a non-profit open source software governance foundation. The CAS software is an Apereo sponsored project \
+and is freely downloadable and usable by anyone. However, Apereo does not operate the systems of anyone using the \
+software and in most cases doesn't even know who is using it or how to contact them unless they are an active part \
+of the Apereo community.<br/></br>If you are having problems logging in using CAS, \
+<strong>you will need to contact the IT staff or Help Desk of your organization for assistance</strong>. \
+<br/><br/>We wish we could be more directly helpful to you.</div>
+
+screen.mfaDenied.header=MFA Denied
+screen.mfaDenied.heading=MFA attempt has been denied by provider
+screen.mfaDenied.message=Your MFA provider has denied your attempt at second factor \
+authentication. Contact your system administrator for help in restoring your account.
+
+screen.mfaUnavailable.header=MFA Provider Unavailable
+screen.mfaUnavailable.heading=MFA Provider Unavailable
+screen.mfaUnavailable.message=CAS was unable to reach your configured MFA provider at this time. \
+  Due to failure policies configured for the service you are attempting to access, authentication can not \
+  be granted at this time.
+
+#####################################################################
+# SSO Sessions View
+#####################################################################
+# No sessions found screen
+cas.ssosessions.loading=Loading SSO Sessions...
+cas.ssosessions.nosessionsfound=No sessions found.
+cas.ssosessions.button.refresh=Refresh Page
+
+# Report View
+cas.ssosessions.report.pagetitle=SSO Sessions Report
+cas.ssosessions.report.panel.totalactiveprincipals=Total Active Principals
+cas.ssosessions.report.panel.usagecountsessions=Usage Count Sessions
+cas.ssosessions.report.panel.totalssosessions=Total SSO Sessions
+
+cas.ssosessions.buttons.removeall=Remove All Sessions
+
+cas.ssosessions.buttons.filter.all=All
+cas.ssosessions.buttons.filter.proxied=Proxied
+cas.ssosessions.buttons.filter.nonproxied=Non-Proxied
+
+cas.ssosessions.table.header.principal=Principal
+cas.ssosessions.table.header.ticketgrantingticket=Ticket Granting Ticket
+cas.ssosessions.table.header.authenticationdate=Authentication Date
+cas.ssosessions.table.header.usagecount=Usage Count
+
+
+# Remove Session AJAX messages
+cas.sessions.ajax.error=There appears to be an error. Please try your request again.
+
+#####################################################################
+# Statistics View
+#####################################################################
+# Ticket Registry Section
+cas.statistics.pagetitle=Statistics View
+cas.statistics.loading=Loading...
+cas.statistics.section.ticket.title=Ticket Statistics
+cas.statistics.section.ticket.panel.unexpiredtgts.title=Unexpired TGTs
+cas.statistics.section.ticket.panel.unexpiredsts.title=Unexpired STs
+cas.statistics.section.ticket.panel.expiredtgts.title=Expired TGTs
+cas.statistics.section.ticket.panel.expiredsts.title=Expired STs
+cas.statistics.section.ticket.button=View SSO Sessions
+
+# JVM Section
+cas.statistics.section.serverstatistics.title=JVM Server Statistics
+
+## memory gauges
+cas.statistics.section.serverstatistics.freememorygauge.label=Total JVM Memory
+cas.statistics.section.serverstatistics.maxmemorygauge.label=Max Memory
+
+## Uptime
+cas.statistics.section.serverstatistics.panel.uptime.title=Uptime
+
+## Server Info
+cas.statistics.section.serverstatistics.panel.serverinfo.title=Server Info
+cas.statistics.section.serverstatistics.panel.serverinfo.table.property.label=Property
+cas.statistics.section.serverstatistics.panel.serverinfo.table.value.label=Value
+
+## Property Names
+cas.statistics.section.serverstatistics.panel.serverinfo.table.property.server.label=Server
+cas.statistics.section.serverstatistics.panel.serverinfo.table.property.casticketsuffix.label=CAS Ticket Suffix
+cas.statistics.section.serverstatistics.panel.serverinfo.table.property.starttime.label=Server Start Time
+cas.statistics.section.serverstatistics.panel.serverinfo.table.property.uptime.label=Uptime
+cas.statistics.section.serverstatistics.panel.serverinfo.table.property.memory.label=Memory
+cas.statistics.section.serverstatistics.panel.serverinfo.table.property.free=free
+cas.statistics.section.serverstatistics.panel.serverinfo.table.property.total=total
+cas.statistics.section.serverstatistics.panel.serverinfo.table.property.maxmemory.label=Maximum Memory
+cas.statistics.section.serverstatistics.panel.serverinfo.table.property.availprocessors.label=Available Processors
+
+##
+## End Statistics View
+#####################################################################
+
+
+
+#####################################################################
+# Logging Dashboard View
+#####################################################################
+## General
+cas.loggingdashboard.title=Logging Dashboard
+cas.loggingdashboard.warning=Modifications applied to the logging configuration are not persisted, and will be lost upon server restarts.
+cas.loggingdashboard.loading=Reading logging configuration
+cas.loggingdashboard.loading.error=Error loading log configuration. Please try again.
+cas.loggingdashboard.button.refresh=Refresh
+cas.loggingdashboard.configuration=Configuration
+cas.loggingdashboard.loggers=Loggers
+cas.loggingdashboard.logger=Logger
+cas.loggingdashboard.state=State
+cas.loggingdashboard.additive=Additive
+cas.loggingdashboard.level=Level
+
+## Log Levels
+cas.loggingdashboard.level.off=OFF
+cas.loggingdashboard.level.fatal=FATAL
+cas.loggingdashboard.level.error=ERROR
+cas.loggingdashboard.level.warn=WARN
+cas.loggingdashboard.level.info=INFO
+cas.loggingdashboard.level.debug=DEBUG
+cas.loggingdashboard.level.trace=TRACE
+cas.loggingdashboard.level.all=ALL
+
+cas.loggingdashboard.activeloggers=Active Loggers
+cas.loggingdashboard.state.on=On
+cas.loggingdashboard.state.off=Off
+cas.loggingdashboard.state.enabled=Enabled
+cas.loggingdashboard.state.disabled=Disabled
+
+
+
+
+##
+## End Logging Dashboard View
+#####################################################################
+
+#####################################################################
+# Configuration View
+#####################################################################
+# Error loading screen
+cas.viewconfig.loading=Loading Configuration...
+cas.viewconfig.persistence=Changes to application configuration are applied immediately, though at this time they are only persisted in runtime memory \
+  and last for as long as the CAS server is up and running. Be sure to apply any and all \
+  changes directly to the underlying configuration if you wish for them to stay with you through server restarts.
+cas.viewconfig.errormessage=Error reading configuration
+cas.viewconfig.button.refresh=Refresh
+
+# Report View
+cas.viewconfig.pagetitle=View CAS Configuration
+cas.viewconfig.table.column.key=Setting
+cas.viewconfig.table.column.value=Value
+
+##
+## End Configuration View
+#####################################################################
+
+#####################################################################
+# Configuration Metadata View
+#####################################################################
+cas.configmetadata.pagetitle=Configuration Metadata
+
+##
+## End Configuration Metadata View
+#####################################################################
+
+#####################################################################
+# Dashboard View
+#####################################################################
+cas.dashboard.pagetitle=Dashboard View
+cas.dashboard.loading=Loading...
+cas.dashboard.section.dashboard.title=CAS Dashboard
+cas.dashboard.section.configuration.title=Configuration Profiles
+cas.dashboard.section.server.functions.title=Server Functions
+cas.dashboard.action.button.refresh=Reload CAS Application Context
+cas.dashboard.action.button.refresh.modal.title=Refreshing CAS Configuration server to pick up changes to properties and settings.
+cas.dashboard.action.button.refresh.modal.message=The server is refreshing your changes. Please give it a few minutes and refresh the page.
+
+cas.dashboard.action.button.reboot=Reboot
+cas.dashboard.action.button.reboot.modal.title=Rebooting Server
+cas.dashboard.action.button.reboot.modal.message=The server is rebooting. Please give it a few minutes and refresh the page.
+
+cas.dashboard.action.button.shutdown=Shutdown
+cas.dashboard.action.button.shutdown.modal.title=Shutdown Server
+cas.dashboard.action.button.shutdown.modal.message=The server will shut down. You will need to manually restart it.
+
+cas.dashboard.tooltip.autoconfiguration=Displays an auto-configuration report showing all auto-configuration candidates and the reason why they ‘were’ or ‘were not’ applied.
+cas.dashboard.tooltip.beans=Displays a complete list of all the Spring beans in your application.
+cas.dashboard.tooltip.mappings=Displays a collated list of all request mapping paths.
+cas.dashboard.tooltip.configprops=Displays a collated list of all configuration properties.
+cas.dashboard.tooltip.trace=Displays trace information (by default the last 100 HTTP requests).
+cas.dashboard.tooltip.metrics=Shows ‘metrics’ information for the CAS application
+cas.dashboard.tooltip.info=Displays CAS application info.
+cas.dashboard.tooltip.configmetadata=Displays CAS configuration metadata and documentation for configuration settings and properties.
+cas.dashboard.tooltip.discovery=Produces the current CAS server profile which contains capabilities and features supported by this deployment.
+cas.dashboard.tooltip.attrresolution=Allows CAS administrators to resolve and examine attributes associated with a given CAS principal. \
+  Alternatively, examine the bundle of attributes that may be released to a given registered application by CAS.
+cas.dashboard.tooltip.health=Shows application health information (when the application is secure, a simple ‘status’ when accessed over an unauthenticated connection or full message details when authenticated).
+cas.dashboard.tooltip.env=Exposes properties from Spring container’s environment.
+cas.dashboard.tooltip.dump=Performs a thread dump.
+cas.dashboard.tooltip.services=Reports back the collection of registered services and applications.
+cas.dashboard.tooltip.status=Performs a health check on CAS configured monitors and provides status.
+cas.dashboard.tooltip.stats=Reports back ticket statistics and memory stats.
+cas.dashboard.tooltip.configpanel=Control and configure CAS settings and properties.
+cas.dashboard.tooltip.logging=Configure the CAS logging machinery and auto-monitor logs.
+cas.dashboard.tooltip.ssostatus=Reports whether the CAS server still maintains an active single sign-on status for this session.
+cas.dashboard.tooltip.ssosessions=Display and control the current active SSO sessions.
+cas.dashboard.tooltip.authnevents=Reports back a listing of authentication events that have commenced
+cas.dashboard.tooltip.trusteddevs=Shows a listing of current registered and trusted devices, relevant to multifactor authentication.
+cas.dashboard.tooltip.swf=Shows the current collection of Spring Webflow states, actions, flows and transitions.
+
+#####################################################################
+# Login View
+#####################################################################
+#Resources Labels
+cas.login.pagetitle=Login
+cas.login.resources.header=Links to CAS Resources
+cas.login.resources.wiki=Documentation
+cas.login.resources.pulls=Pull Requests
+cas.login.resources.mailinglist=Mailing Lists
+cas.login.resources.chat=Chatroom
+cas.login.resources.blog=Blog
+cas.login.resources.dashboard=Dashboard
+cas.login.resources.contribguide=Contributor Guidelines
+
+####
+# Acceptable Usage Policy View
+#
+cas.acceptableusagepolicyview.pagetitle=Acceptable Usage Policy View
+
+####
+# Attribute Resolution View
+#
+cas.attrresolutionview.pagetitle=Attribute Resolution
+cas.attrreleaseview.pagetitle=Attribute Release
+cas.attrresolutionview.label.uid=Username:
+cas.attrresolutionview.button.submit=SUBMIT
+
+##
+# MFA
+##
+cas.mfa.duologin.pagetitle=DuoSecurity Login
+cas.mfa.googleauth.pagetitle=Google Authenticator
+cas.mfa.googleauth.label.token=Token:
+cas.mfa.azure.pagetitle=Microsoft Authenticator
+cas.mfa.radius.pagetitle=Radius Authentication
+cas.mfa.yubikey.pagetitle=YubiKey Authentication
+cas.mfa.yubikey.authenticate=Use your registered YubiKey device to authenticate.
+cas.mfa.yubikey.register=Your device is not yet registered. Use the below form to register your device with CAS.
+cas.mfa.yubikey.label.token=Token:
+cas.mfa.u2f.pagetitle=U2F Authentication
+cas.mfa.u2f.authentication.device=Authentication Device
+cas.mfa.u2f.authentication.message=<p><strong>Please touch the flashing U2F device now.</strong></p><p> You may be prompted to allow \
+ the site permission to access your security keys. After granting permission, the device will start to blink.</p>
+cas.mfa.u2f.register.device=Register Device
+cas.mfa.u2f.register.message=<p><strong>Please touch the flashing U2F device now.</strong></p><p> You may be prompted to allow \
+ the site permission to access your security keys. After granting permission, the device will start to blink.</p>
+cas.mfa.authy.pagetitle=Authy Login
+cas.mfa.swivel.pagetitle=Swivel Authentication
+cas.mfa.swivel.label.token=Token:
+cas.mfa.swivel.label.header=Swivel Authentication
+
+cas.mfa.registerdevice.label.title=Register Device
+cas.mfa.registerdevice.label.intro=Please name the current device.
+cas.mfa.registerdevice.pagetitle=Register Device
+cas.mfa.registerdevice.label.name=Name
+cas.mfa.registerdevice.button.register=Register
+

File diff suppressed because it is too large
+ 53 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_ar.properties


+ 95 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_ca.properties

@@ -0,0 +1,95 @@
+#Author: Evili del Rio i Silvan and Alex Henrie
+
+#Welcome Screen Messages
+
+
+screen.welcome.welcome=Felicitats per engegar el CAS correctament! Per a aprendre com autenticar, si us plau, repasseu la configuració del gestor d'autenticació per defecte.
+screen.welcome.security=Per raons de seguretat, si us plau, tanqueu la sessió i el vostre navegador web quan hàgiu acabat d'accedir als serveis que requereixen autenticació.
+screen.welcome.instructions=Introduïu el vostre nom d'usuari i contrasenya.
+screen.welcome.label.netid=Nom d'<span class="accesskey">u</span>suari:
+screen.welcome.label.netid.accesskey=u
+screen.welcome.label.password=<span class="accesskey">C</span>ontrasenya:
+screen.welcome.label.password.accesskey=c
+screen.welcome.label.warn=<span class="accesskey">A</span>viseu-me abans d'obrir sessió en altres llocs.
+screen.welcome.label.warn.accesskey=a
+screen.welcome.button.login=INICIA SESSIÓ
+screen.welcome.button.clear=NETEJA
+
+logo.title=vés a la pàgina principal de l'Apereo
+copyright=Copyright &copy; 2005&ndash;2015 Apereo, Inc. Es reserven tots els drets.
+screen.capslock.on = La tecla BLOQ MAJ està activada!
+
+# Blocked Errors Page
+screen.blocked.header=Accés denegat
+screen.blocked.message=Heu introduïda una contrasenya equivocada per al usuari massa vegades. Se us ha restringit.
+
+#Confirmation Screen Messages
+screen.confirmation.message=Feu clic <a href="{0}">aquí</a> per a anar a l'aplicació.
+
+#Generic Success Screen Messages
+screen.success.header=Inici de sessió reeixit
+screen.success.success=Vós, {0}, heu iniciat amb èxit la sessió al Servei Central d''Autenticació (CAS).
+screen.success.security=Per raons de seguretat, si us plau, tanqueu la sessió i el vostre navegador web quan hàgiu terminat.
+
+#Logout Screen Messages
+screen.logout.header=Tancament de sessió reeixit
+screen.logout.success=Heu tancat amb èxit la sessió al Servei Central d'Autenticació (CAS).
+screen.logout.security=Per raons de seguretat, tanqueu el vostre navegador web.
+
+
+screen.service.sso.error.header=Cal reautenticar per a accedir a aquest servei
+screen.service.sso.error.message=Heu intentat accedir a un servei que requereix autenticació sense reautenticar. Si us plau, intenteu <a href="{0}">autenticar de nou</a>.
+
+
+username.required=El nom d'usuari és un camp obligatori.
+password.required=La contrasenya és un camp obligatori.
+
+# Authentication failure messages
+authenticationFailure.AccountDisabledException=S'ha deshabilitat aquest compte.
+authenticationFailure.AccountLockedException=S'ha bloquejat aquest compte.
+authenticationFailure.CredentialExpiredException=La vostra contrasenya ha caducada.
+authenticationFailure.InvalidLoginLocationException=No podeu iniciar sessió des d'aquesta estació de treball.
+authenticationFailure.InvalidLoginTimeException=Està prohibit iniciar sessió amb el vostre compte en aquest moment.
+authenticationFailure.AccountNotFoundException=Les credencials són invàlides.
+authenticationFailure.FailedLoginException=Les credencials són invàlides.
+authenticationFailure.UNKNOWN=Les credencials són invàlides.
+
+INVALID_REQUEST_PROXY=calen ambdós dels paràmetres 'pgt' i 'targetService'
+INVALID_TICKET_SPEC=El tiquet ha fallat l'especificació de validació. Els errors possibles poden incloure intentar validar un tiquet d'intermediari mitjançant un validador de tiquets de servei, o no complir amb la petició de renovació (renew true).
+INVALID_REQUEST=calen ambdós dels paràmetres 'service' i 'ticket'
+INVALID_TICKET=No s''ha reconegut el tiquet ''{0}''
+INVALID_SERVICE=El tiquet ''{0}'' no coincideix amb el servei proporcionat. El servei original era ''{1}'' i el servei proporcionat era ''{2}''.
+INVALID_PROXY_CALLBACK=L''adreça de retrotrucada d''intermediari proveïda ''{0}'' no s''ha pogut autenticar.
+UNAUTHORIZED_SERVICE_PROXY=El servei proporcionat ''{0}'' no està autoritzat a utilitzar l''autenticació intermediària del CAS.
+
+screen.service.error.header=Aplicació no autoritzada a utilitzar el CAS
+service.not.authorized.missing.attr=No esteu autoritzat a accedir a l'aplicació perquè al vostre compte \
+li manquen els privilegis que el servidor CAS requereix per a autenticar a aquest servei. Si us plau, notifiqueu al vostre suport tècnic.
+screen.service.error.message=L'aplicació a que heu intentat autenticar no està autoritzada a utilitzar el CAS.
+screen.service.empty.error.message=El registre de serveis del CAS està buit i no té definicions de servei. \
+Les aplicacions que volen autenticar amb el CAS han de ser explícitament definides en el registre de serveis.
+
+# Password policy
+password.expiration.warning=La vostra contrasenya caduca en {0} dies. Si us plau, <a href="{1}">canvieu la vostra contrasenya</a> ara.
+password.expiration.loginsRemaining=Teniu {0} inicis de sessió restant abans que <strong>HEU</strong> de canviar la vostra contrasenya.
+screen.accountdisabled.heading=S'ha deshabilitat aquest compte.
+screen.accountdisabled.message=Si us plau, contacteu a l'administrador de sistema per a recobrar accés.
+screen.accountlocked.heading=S'ha bloquejat aquest compte.
+screen.accountlocked.message=Si us plau, contacteu a l'administrador de sistema per a recobrar accés.
+screen.expiredpass.heading=La vostra contrasenya ha caducada.
+screen.expiredpass.message=Si us plau, <a href="{0}">canvieu la vostra contrasenya</a>.
+screen.mustchangepass.heading=Heu de canviar la vostra contrasenya.
+screen.mustchangepass.message=Si us plau, <a href="{0}">canvieu la vostra contrasenya</a>.
+screen.badhours.heading=Està prohibit iniciar sessió amb el vostre compte en aquest moment.
+screen.badhours.message=Si us plau, intenteu més tard.
+screen.badworkstation.heading=No podeu iniciar sessió des d'aquesta estació de treball.
+screen.badworkstation.message=Si us plau, contacteu a l'administrador de sistema per a recobrar accés.
+
+# OAuth
+screen.oauth.confirm.header=Autorització
+screen.oauth.confirm.message=Voleu concedir accés al vostre perfil complet a "{0}"?
+screen.oauth.confirm.allow=Permet
+
+# Unavailable
+screen.unavailable.heading=El CAS no està disponible
+screen.unavailable.message=Ha hagut un error al intentar complir amb la vostra petició. Si us plau, notifiqueu al vostre suport tècnic o intenteu de nou.

+ 85 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_cs.properties

@@ -0,0 +1,85 @@
+#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
+#Welcome Screen Messages
+
+INVALID_PROXY_CALLBACK = Poskytnut\u00E9 URL proxy callbacku ''{0}'' nelze autentifikovat.
+
+INVALID_REQUEST = Parametry 'service' a 'ticket' jsou povinn\u00E9
+
+INVALID_REQUEST_PROXY = Parametry 'pgt' a 'targetService' jsou povinn\u00E9
+
+INVALID_SERVICE = Ticket ''{0}'' nesouhlas\u00ED s poskytovanou slu\u017Ebou. P\u016Fvodn\u00ED slu\u017Eba byla ''{1}'', poskytnut\u00E1 je ''{2}''.
+
+INVALID_TICKET = Ticket ''{0}'' nebyl rozpozn\u00E1n
+
+INVALID_TICKET_SPEC = Ticket neporo\u0161el kontrolou validity. Mo\u017En\u00E9 chyby zahrnuj\u00ED pokus o ov\u011B\u0159en\u00ED Proxy Ticketu pomoc\u00ED ov\u011B\u0159en\u00ED Service Ticketu nebo nedodr\u017Een\u00ED po\u017Eadavku na renew.
+
+UNAUTHORIZED_SERVICE_PROXY = Poskytnut\u00E1 slu\u017Eba ''{0}'' nen\u00ED opr\u00E1vn\u011Bn\u00ED k pou\u017Eit\u00ED CAS proxy autentizace.
+
+authenticationFailure.AccountDisabledException      = Tento \u00FA\u010Det byl zak\u00E1z\u00E1n.
+authenticationFailure.AccountLockedException        = Tento \u00FA\u010Det byl uzam\u010Den.
+authenticationFailure.AccountNotFoundException      = Nezn\u00E1m\u00E9 p\u0159ihla\u0161ovac\u00ED \u00FAdaje.
+authenticationFailure.CredentialExpiredException    = Va\u0161e heslo ji\u017E nen\u00ED platn\u00E9.
+authenticationFailure.FailedLoginException          = Neplatn\u00E9 p\u0159ihla\u0161ovac\u00ED \u00FAdaje.
+authenticationFailure.InvalidLoginLocationException = Z tohoto po\u010D\u00EDta\u010De se nem\u016F\u017Eete p\u0159ihl\u00E1sit.
+authenticationFailure.InvalidLoginTimeException     = P\u0159ihl\u00E1\u0161en\u00ED v tento \u010Das pro V\u00E1\u0161 \u00FA\u010Det povoleno.
+authenticationFailure.UNKNOWN                       = Neplatn\u00E9 p\u0159ihla\u0161ovac\u00ED \u00FAdaje.
+
+copyright = Copyright &copy; 2005&ndash;2012 Apereo, Inc. V\u0161echna pr\u00E1va vyhrazena.
+
+
+logo.title = j\u00EDt na str\u00E1nky Apereo
+
+password.expiration.loginsRemaining = Zb\u00FDv\u00E1 V\u00E1m {0} p\u0159ihl\u00E1\u0161en\u00ED, ne\u017E budete <strong>MUSET</strong> zm\u011Bnit sv\u00E9 heslo.
+password.expiration.warning         = Va\u0161e heslo vypr\u0161\u00ED za {0} dn\u00ED. <a href="{1}">Zm\u011B\u0148te pros\u00EDm ihned sv\u00E9 heslo</a>.
+
+required.password = Heslo je povinn\u00FD \u00FAdaj.
+required.username = U\u017Eivatelsk\u00E9 jm\u00E9no je povinn\u00FD \u00FAdaj.
+
+screen.accountdisabled.heading          = Tento \u00FA\u010Det byl zak\u00E1z\u00E1n.
+screen.accountdisabled.message          = Pro obnoven\u00ED p\u0159\u00EDstupu kontaktujte pros\u00EDm sv\u00E9ho syst\u00E9mov\u00E9ho administr\u00E1tora.
+screen.accountlocked.heading            = Tento \u00FA\u010Det byl uzam\u010Den.
+screen.accountlocked.message            = Pro obnoven\u00ED p\u0159\u00EDstupu kontaktujte pros\u00EDm sv\u00E9ho syst\u00E9mov\u00E9ho administr\u00E1tora.
+screen.badhours.heading                 = V\u00E1\u0161 \u00FA\u010Det nem\u00E1 povolen\u00ED k p\u0159ihl\u00E1\u0161en\u00ED v tomto \u010Dase.
+screen.badhours.message                 = Zkuste to pros\u00EDm pozd\u011Bji.
+screen.badworkstation.heading           = Z tohoto po\u010D\u00EDta\u010De se nem\u016F\u017Eete p\u0159ihl\u00E1sit.
+screen.badworkstation.message           = Pro obnoven\u00ED p\u0159\u00EDstupu kontaktujte pros\u00EDm sv\u00E9ho syst\u00E9mov\u00E9ho administr\u00E1tora.
+screen.blocked.header                   = P\u0159\u00EDstup odep\u0159en
+screen.blocked.message                  = Zadal(a) jste \u0161patn\u00E9 heslo p\u0159\u00EDli\u0161 \u010Dasto. P\u0159\u00EDtsup byl do\u010Dasn\u011B zablokov\u00E1n.
+#Confirmation Screen Messages
+screen.confirmation.message             = Pro p\u0159echod na web <a href="{0}">klikn\u011Bte zde</a>.
+screen.expiredpass.heading              = Va\u0161e heslo ji\u017E n\u011Bn\u00ED platn\u00E9.
+screen.expiredpass.message              = <a href="{0}">Zm\u011B\u0148te pros\u00EDm sv\u00E9 heslo</a>.
+#Logout Screen Messages
+screen.logout.header                    = \u00DAsp\u011B\u0161n\u00E9 odhl\u00E1\u0161en\u00ED
+
+screen.logout.security                  = Z bezpe\u010Dnostn\u00EDch d\u016Fvod\u016F uzav\u0159ete v\u0161echna okna prohl\u00ED\u017Ee\u010De.
+screen.logout.success                   = \u00DAsp\u011B\u0161n\u011B jste se odhl\u00E1sili od Centr\u00E1ln\u00ED Autentiza\u010Dn\u00ED Slu\u017Eby.
+screen.mustchangepass.heading           = Mus\u00EDte zm\u011Bnit sv\u00E9 heslo.
+screen.mustchangepass.message           = <a href="{0}">Zm\u011B\u0148te pros\u00EDm sv\u00E9 heslo</a>.
+screen.oauth.confirm.allow              = Povolit
+screen.oauth.confirm.header             = Autorizace
+screen.oauth.confirm.message            = Chcete povolit p\u0159\u00EDstup ke sv\u00E9mu profilu pro "{0}"?
+screen.service.empty.error.message      = Registr slu\u017Eeb CASu je pr\u00E1zdn\u00FD a nem\u00E1 definovan\u00E9 \u017E\u00E1dn\u00E9 slu\u017Eby. Aplikace, kter\u00E9 chcete autentizovat pomoc\u00ED CASu mus\u00EDte explicitn\u011B uv\u00E9st v registru slu\u017Eeb.
+#Service Error Messages
+screen.service.error.header             = Aplikace nen\u00ED autorizovan\u00E1 k pou\u017Eit\u00ED p\u0159ihl\u0161ov\u00E1n\u00ED pomoc\u00ED CASu.
+screen.service.error.message            = Aplikace ke kter\u00E9 se sna\u017E\u00EDte p\u0159ihl\u00E1sit nen\u00ED opr\u00E1vn\u011Bna k vyu\u017Eit\u00ED CASu.
+screen.service.sso.error.header         = Pro tuto slu\u017Ebu je po\u017Eadov\u00E1no op\u011Btovn\u00E9 p\u0159ihl\u00E1\u0161en\u00ED
+screen.service.sso.error.message        = Pokou\u0161\u00EDte se p\u0159istoupit ke slu\u017Eb\u011B, kter\u00E1 vy\u017Eaduje op\u011Btovn\u00E9 p\u0159ihl\u00E1\u0161en\u00ED. Zkuste se pros\u00EDm <a href="{0}">p\u0159ihl\u00E1sit znovu</a>.
+#Generic Success Screen Messages
+screen.success.header                   = \u00DAsp\u011B\u0161n\u00E9 p\u0159ihl\u00E1\u0161en\u00ED
+screen.success.security                 = Z bezpe\u010Dnostn\u00EDch d\u016Fvod\u016F se po ukon\u010Den\u00ED pr\u00E1ce odhla\u0161te a zav\u0159ete v\u0161echna okna prohl\u00ED\u017Ee\u010De!
+screen.success.success                  = \u00DAsp\u011B\u0161n\u011B jste se p\u0159ihl\u00E1sili k Centr\u00E1ln\u00ED Autentika\u010Dn\u00ED Slu\u017Eb\u011B.
+screen.unavailable.heading              = CAS nen\u00ED dostupn\u00FD
+screen.unavailable.message              = P\u0159i zpracov\u00E1n\u00ED Va\u0161eho po\u017Eadavku do\u0161lo k chyb\u011B. Uv\u011Bdomte pros\u00EDm syst\u00E9movou podporu nebo to zkuste znovu.
+screen.welcome.button.clear             = VY\u010CISTIT
+screen.welcome.button.login             = P\u0158IHL\u00C1SIT
+screen.welcome.instructions             = Zadejte sv\u00E9 u\u017Eivatelsk\u00E9 jm\u00E9no a heslo
+screen.welcome.label.netid              = <span class="accesskey">U</span>\u017Eivatelsk\u00E9 jm\u00E9no
+screen.welcome.label.netid.accesskey    = u
+screen.welcome.label.password           = <span class="accesskey">H</span>eslo:
+screen.welcome.label.password.accesskey = h
+screen.welcome.label.warn               = Upo<span class="accesskey">z</span>ornit p\u0159ed p\u0159ihl\u00E1\u0161en\u00ED k jin\u00E9 aplikaci.
+screen.welcome.label.warn.accesskey     = z
+screen.welcome.security                 = Z bezpe\u010Dnostn\u00EDch d\u016Fvod\u016F se po ukon\u010Den\u00ED pr\u00E1ce odhla\u0161te a zav\u0159ete v\u0161echna okna prohl\u00ED\u017Ee\u010De!
+
+screen.welcome.welcome                  = Gratulujeme, \u00FAsp\u011B\u0161n\u011B jste zprovoznili CAS! Pro zji\u0161t\u011Bn\u00ED, jak se p\u0159ihl\u00E1sit, prohl\u00E1dn\u011Bte si v\u00FDchoz\u00ED konfiguraci autentifika\u010Dn\u00EDho handleru.

+ 290 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_de.properties

@@ -0,0 +1,290 @@
+# Welcome Screen Messages GERMAN
+
+screen.welcome.welcome=Glückwunsch, Sie haben Ihr CAS System zum Laufen gebracht! Der voreingestellte Authentication Handler gewährt Einlass, wenn der Benutzername dem Passwort entspricht: Nur zu, probieren Sie es aus.
+screen.welcome.security=Aus Sicherheitsgründen sollten Sie bei Verlassen der passwortgeschützten Bereiche sich explizit ausloggen und Ihren Webbrowser schließen!
+screen.welcome.instructions=Bitte geben Sie Ihre Apereo NetID und Ihr Passwort ein.
+screen.welcome.label.netid=<span class="accesskey">N</span>etID:
+screen.welcome.label.netid.accesskey=n
+screen.welcome.label.password=<span class="accesskey">P</span>asswort:
+screen.welcome.label.password.accesskey=p
+screen.welcome.label.warn=Ich möchte ge<span class="accesskey">w</span>arnt werden, bevor ich mich in einen anderen Bereich einlogge.
+screen.welcome.label.warn.accesskey=w
+screen.welcome.label.warnremove=Nicht noch einmal warnen
+screen.welcome.button.login=ANMELDEN
+screen.welcome.button.logout=ABMELDEN
+screen.welcome.button.loginwip=Einen Moment bitte...
+screen.welcome.button.register=Registrieren
+screen.welcome.button.print=Drucken
+screen.welcome.button.clear=LÖSCHEN
+screen.welcome.label.loginwith=Oder einloggen über:
+
+screen.cookies.disabled.title=Cookies im Browser deaktiviert
+screen.cookies.disabled.message=Ihr Browser akzeptiert keine Cookies. Das Single Sign-On wird NICHT FUNKTIONIEREN.
+
+screen.pm.button.submit=ABSENDEN
+screen.pm.button.cancel=ABBRECHEN
+screen.pm.button.forgotpwd=<a href="https://pwd.example.org">Passwort vergessen?</a>
+screen.pm.button.resetPassword=Passwort zurücksetzen
+screen.pm.reset.username=Benutzername:
+screen.pm.reset.heading=Zurücksetzen des Passworts fehlgeschlagen
+screen.pm.reset.message=Ihre Anfrage zum Zurücksetzen des Passwortes kann aktuell nicht verarbeitet werden.
+screen.pm.reset.qstitle=Beantworten Sie die Sicherheitsfragen
+screen.pm.reset.qsmsg=Willkommen <strong>{0}</strong>. Bevor Sie Ihr Passwort zurücksetzen können, müssen Sie die folgenden Sicherheitsfragen beantworten.
+screen.pm.reset.sentInstructions=Sie werden in Kürze eine E-Mail mit Anweisungen zum weiteren Vorgehen erhalten, um Ihr Passwort zurückzusetzen. Bitte führen Sie diese Anweisungen \
+  möglichst schnell aus, das sie nach einer gewissen Zeit ungültig werden können.
+screen.pm.reset.sent=Anweisungen zum Zurücksetzen des Passworts erfolgreich versandt.
+screen.pm.reset.title=Passwort zurücksetzen
+screen.pm.reset.instructions=Bitte geben Sie Ihren Benutzernamen ein. Sie werden eine E-Mail mit Anweisungen zum weiteren Vorgehen erhalten.
+screen.pm.password.policyViolation=Das Passwort entspricht nicht der Passwortrichtlinie.
+screen.pm.password.confirmMismatch=Die Passwörter stimmen nicht überein.
+screen.pm.password.strength=Passwort-Stärke:
+screen.pm.password.strength.0=Grauenhaft
+screen.pm.password.strength.1=Schlecht
+screen.pm.password.strength.2=Schwach
+screen.pm.password.strength.3=Gut
+screen.pm.password.strength.4=Stark
+
+screen.aup.heading=Nutzungsbedingungen
+screen.aup.button.accept=AKZEPTIEREN
+screen.aup.button.cancel=ABBRECHEN
+
+screen.consent.confirm=OK
+screen.consent.cancel=ABBRECHEN
+screen.consent.title=Zustimmung
+screen.consent.attributes=Attribute
+screen.consent.options=Optionen
+screen.consent.attributes.header=Folgende Attribute werden an <strong>[{0}]</strong> übermittelt:
+screen.consent.attributes.attribute=Attribut
+screen.consent.attributes.values=Wert(e)
+screen.consent.attributes.data.info=Zeigt _START_ bis _END_ von _TOTAL_ Einträgen
+screen.consent.options.header=Wie soll ich wieder nach Zustimmung gefragt werden?
+screen.consent.options.always=<strong>Immer</strong>
+screen.consent.options.desc.always=Bei jedem Login bei {0} nach Zustimmung fragen.
+screen.consent.options.attributename=<strong>Attributnamen</strong>
+screen.consent.options.desc.attributename=Nach Zustimmung fragen, wenn ein Attribut zur Freigabe an {0} hinzugefügt oder entfernt wird.
+screen.consent.options.attributevalue=<strong>Attributwerte</strong>
+screen.consent.options.desc.attributevalue.intro=Nach Zustimmung fragen, wenn:
+screen.consent.options.desc.attributevalue.first=Ein neues Attribut zur Freigabe an {0} hinzugefügt oder entfernt wird.
+screen.consent.options.desc.attributevalue.second=Ein zuvor freigegebenes Attribut von der Freigabe an {0} entfernt wird.
+screen.consent.options.desc.attributevalue.third=Der Wert eines für {0} freigegebenen Attributs sich ändert.
+screen.consent.options.reminder.header=Wie oft soll ich wieder nach Zustimmung gefragt werden?
+screen.consent.options.reminder.expl=Als Erinnerung nach Zustimmung fragen, wenn sich an den für {0} freigegebenen Attributen nichts ändert.
+screen.consent.options.timeunit.seconds=Sekunden
+screen.consent.options.timeunit.minutes=Minuten
+screen.consent.options.timeunit.hours=Stunden
+screen.consent.options.timeunit.days=Tage
+screen.consent.options.timeunit.weeks=Wochen
+screen.consent.options.timeunit.months=Monate
+screen.consent.options.timeunit.years=Jahre
+
+screen.consent.review.header=Zustimmungen bearbeiten
+screen.consent.review.loading=Lade Zustimmungen...
+screen.consent.review.noconsentdecisions=Es sind keine Zustimmungen vorhanden.
+screen.consent.review.success=Zustimmung wurde erfolgreich gelöscht.
+screen.consent.review.error=Es gab einen Fehler.
+screen.consent.review.confirm=Lösche Zustimmung für [{}]?
+screen.consent.review.yes=Ja
+screen.consent.review.no=Nein
+screen.consent.review.date=Datum
+screen.consent.review.service=Dienst
+screen.consent.review.delete=LÖSCHEN
+screen.consent.review.createddate=Erteilt am:
+screen.consent.review.reminder=Erinnerung:
+screen.consent.review.option=Option:
+screen.consent.review.options.attributename=Attributnamen
+screen.consent.review.options.attributevalue=Attributwerte
+screen.consent.review.options.always=Immer
+screen.consent.review.options.desc.always=Bei jedem Login nach Zustimmung fragen.
+screen.consent.review.options.desc.attributename=Nach Zustimmung fragen, wenn ein Attribut zur Freigabe hinzugefügt oder entfernt wird.
+screen.consent.review.options.desc.attributevalue=Nach Zustimmung fragen, wenn 1) ein neues Attribut zur Freigabe hinzugefügt wird, 2) ein zuvor freigegebenes Attribut von der Freigabe entfernt wird, 3) der Wert eines freigegebenen Attributs sich ändert.
+screen.consent.review.attributes=Attribute:
+screen.consent.review.data.search=Suchen
+screen.consent.review.data.zerorecords=Keine passenden Zustimmungen gefunden
+screen.consent.review.data.info=Zeigt _START_ bis _END_ von _TOTAL_ Einträgen
+screen.consent.review.data.infofiltered=(von insgesamt _MAX_ Einträgen)
+screen.consent.review.data.infoempty=Keine Einträge anzuzeigen
+screen.consent.review.logout.success=Sie haben sich erfolgreich abgemeldet. Sie können sich zusätzlich vollständig vom Zentralen Authentifizierungsdienst <a href="../logout">abmelden</a> und Ihre Single Sign-On Sitzung beenden.
+
+screen.nonsecure.title=Unsichere Verbindung
+screen.nonsecure.message=Sie greifen auf CAS über eine unsichere Verbindung zu. Das Single Sign-On wird NICHT FUNKTIONIEREN. Damit es funktioniert, muss der Login über HTTPS erfolgen.
+
+screen.defaultauthn.title=Statische Anmeldung
+screen.defaultauthn.heading=CAS ist so konfiguriert, dass eine statische Liste von Benutzern zur primären Anmeldung akzeptiert wird. Bitte beachten Sie, dass dies NUR zu Demonstrationszwecken nützlich ist. \
+  Es wird empfohlen, statt dessen CAS an LDAP, JDBC, usw. anzubinden.
+logo.title=zur Apereo Seite wechseln
+copyright=Copyright &copy; 2005&ndash;2018 Apereo, Inc.
+screen.capslock.on = Die Feststelltaste (CAPSLOCK) ist aktiviert!
+screen.button.continue=Weiter
+screen.post.response.message=Sie werden weitergleitet zu {0}.
+
+screen.interrupt.title=Authentikationsunterbrechnung
+screen.interrupt.message=Die Anmeldung wurde unterbrochen. CAS hat noch keine Single Sign-On Sitzung eingerichtet <strong>{0}</strong>.
+
+screen.mdui.infolink.text=<a href="{0}" target="_blank">Mehr Informationen über diese Anwendung</a>.
+screen.mdui.privacylink.text=<a href="{0}" target="_blank">Datenschutzerklärung dieser Anwendung</a>.
+
+screen.interrupt.btn.proceed=Fortfahren
+screen.interrupt.btn.cancel=Abbrechen
+
+# Generic Error Pages 401, 404, 500, etc
+########################################
+screen.error.page.heading=Fehler
+screen.error.page.title.accessdenied=Fehler - 401
+screen.error.page.title.permissiondenied=Fehler - Berechtigung verweigert
+screen.error.page.title.pagenotfound=Fehler - Seite nicht gefunden
+screen.error.page.title.requestunsupported=Fehler - Nicht unterstützte Anfrage
+screen.error.page.accessdenied=Zugriff verweigert
+screen.error.page.permissiondenied=Sie haben nicht die Berechtigung diese Seite zu sehen.
+screen.error.page.requestunsupported=Die Art oder die Syntay der Anfrage wird nicht unterstützt.
+screen.error.page.loginagain=Erneut anmelden
+screen.error.page.notfound=Seite nicht gefunden
+screen.error.page.doesnotexist=Die Seite, auf die Sie zugreifen möchten, existiert aktuell nicht.
+screen.error.page.authdenied=Anmeldung fehlgeschlagen
+
+# Remember-Me Authentication
+screen.rememberme.checkbox.title=Angemeldet bleiben
+
+# Gua
+screen.gua.confirm.message=Wenn Sie dieses Bild nicht als das Ihre erkennen, fahren Sie NICHT fort.
+
+# Blocked Errors Page
+screen.error.page.title.blocked=Fehler - Berechtigung verweigert
+screen.blocked.header=Zugriff verweigert
+screen.blocked.message=Das Kennwort für den Benutzer wurde zu oft falsch eingegeben. Ihr Zugriff wird gedrosselt.
+AbstractAccessDecisionManager.accessDenied=Sie sind nicht berechtigt auf diese Ressource zuzugrifen. Kontaktieen Sie Ihren CAS-Administrator für weitere Informationen.
+
+#Confirmation Screen Messages
+screen.confirmation.message=Klicken Sie <a href="{0}">hier</a> um zu der zuvor angeforderten Seite zurückzukehren.
+screen.authentication.warning=Anmeldung mit Warnungen erfolgreich
+
+#Generic Success Screen Messages
+screen.success.header=Anmeldung erfolgreich
+screen.success.success=Sie haben sich erfolgreich am Central Authentication Service angemeldet.
+screen.success.security=Aus Sicherheitsgründen sollten Sie bei Verlassen der passwortgeschützten Bereiche sich explizit ausloggen und Ihren Webbrowser schliessen!
+
+#Logout Screen Messages
+screen.logout.confirm.header=Möchten sie sich wirklich ganz abmelden?
+screen.logout.confirm.text=Eine Anwendung könnte Sie zum Zentralen Authentifizierungsdienst weitergeleitet haben, \
+  um sich ganz abzumelden und Ihre Single Sign-On Sitzung zu beenden. Wenn Sie sich abmelden, werden Sie erneut aufgefordert Ihre \
+  Zugangsdaten einzugeben und sich erneut anzumelden, sobald Sie auf eine Anwendung zugreifen.<p><p><br>Möchten Sie fortfahren?
+
+screen.logout.header=Abmeldung erfolgreich
+screen.logout.success=Sie haben sich erfolgreich vom Zentralen Authentifizierungsdienst abgemeldet.
+screen.logout.fc.success=Sie haben sich erfolgreich vom Zentralen Authentifizierungsdienst abgemeldet. Für den Fall, dass Single Logout in CAS aktiviert ist, \
+  werden die folgenden Anwendungen <strong>nur benachrichtigt</strong> Sie auszuloggen und Ihre Sitzung zu beenden. Denken Sie daran, dass es sich nur um eine \
+  Benachrichtigung handelt, nicht um eine Garantie. Es obliegt der Anwendung selbst auf diese Benachrichtigungen zu reagieren und angemessene Schritte zu unternehmen, um Sie abzumelden.
+screen.logout.security=Aus Sicherheitsgründen sollten Sie den Browser schliessen.
+
+screen.service.sso.error.header=Eine Neuanmeldung ist erforderlich, um auf den Service zuzugreifen.
+screen.service.sso.error.message=Der Service, für den Sie versucht haben, sich zu authentifizieren, hat nicht das Recht, CAS zu benutzen.
+screen.service.required.message=Sie versuchen sich anzumelden ohne die Ziel-Anwendung anzugeben. Bitte untersuchen Sie Ihre Anfrage und versuchen Sie es erneut.
+
+captchaError=reCAPTCHA Bestätigung fehlgeschlagen.
+username.required=Benutzername ist ein Pflichtfeld.
+password.required=Passwort ist ein Pflichtfeld.
+
+# Password Management
+confirmedPassword.required=Das Passwort muss bestätigt werden.
+pm.passwordsMustMatch=Die eingegebenen Passwörter stimmen nicht überein.
+pm.passwordFailedCriteria=Das eingegebene Passwort entspricht nicht der Passwortrichtlinie. Bitte versuchen Sie es erneut.
+pm.updateFailure=Das Passwort konnte nicht geändert werden. Bitte versuchen Sie es erneut.
+
+# Authentication failure messages
+authenticationFailure.AccountDisabledException=Dieses Konto wurde deaktiviert.
+authenticationFailure.AccountLockedException=Dieses Konto wurde gesperrt.
+authenticationFailure.AccountExpiredException=Dieses Konto ist abgelaufen und zu keiner Zeit mehr zur Anmeldung berechtigt.
+authenticationFailure.CredentialExpiredException=Ihr Kennwort ist abgelaufen.
+authenticationFailure.InvalidLoginLocationException=Sie können sich von dieser Workstation nicht anmelden.
+authenticationFailure.InvalidLoginTimeException=Ihrem Konto ist es nicht gestattet sich zu diesem Zeitpunkt anzumelden.
+authenticationFailure.AccountNotFoundException=Ungültige Anmeldedaten.
+authenticationFailure.FailedLoginException=Ungültige Anmeldedaten.
+authenticationFailure.SurrogateAuthenticationException=Sie sind aktuell nicht berechtigt, die Identität des angegebene Benutzers anzunehmen.
+authenticationFailure.AccountPasswordMustChangeException=Ihr Passwort ist abgelaufen und muss geändert werden.
+authenticationFailure.UnauthorizedServiceForPrincipalException=Zugriff auf die Anwendung aufgrund fehlender Berechtigungen verweigert.
+authenticationFailure.UNKNOWN=Ungültige Anmeldedaten.
+authenticationFailure.AuthenticationException=Die Zugangsdaten sind ungültig und der Anmeldeversuch ist fehlgeschlagen.
+
+INVALID_REQUEST_PROXY='pgt' und 'targetService' Parameter werden beide benötigt
+INVALID_TICKET_SPEC=Das Ticket entspricht nicht den Überprüfungsregeln. Ein möglicher Fehler könnte sein, dass versucht wurde, ein Proxy Ticket mit einem Service Ticket Validierer zu überprüfen, oder man sich nicht an den renew true Request gehalten hat.
+INVALID_REQUEST='service' und 'ticket' Parameter werden beide benötigt
+INVALID_AUTHENTICATION_CONTEXT=Die Validierungsanfrage für [''{0}''] kann nicht bedient werden. Die Anfrage ist entweder unerkannt oder unerfüllt.
+INVALID_TICKET=Ticket ''{0}'' wurde nicht anerkannt
+INVALID_PROXY_GRANTING_TICKET=PGT bereits generiert für dieses ST. Es kann nicht mehr als ein PGT für ein ST generiert werden
+INVALID_SERVICE=Ticket ''{0}'' passt nicht zum angegebenen Service. Der ursprüngliche Service war ''{1}'' und der übermittelte Service war ''{2}''.
+INVALID_PROXY_CALLBACK=Die angegebene Proxy-Callback-Url ''{0}'' kann nicht authentifiziert werden. Entweder ist ''{0}'' nicht erreichbar \
+   oder nicht berechtigt, eine Proxy-Authentifikation durchzuführen.
+UNAUTHORIZED_SERVICE_PROXY=Dem angegebenen Service ''{0}'' ist es nicht gestattet eine CAS Proxy Authentifizierung zu verwenden.
+UNSATISFIED_AUTHN_POLICY=Der Zugriff auf die Anwendung wurde aufgrund einer nicht erfüllten Authentifkationsrichtlinie (authentication policy) verweigert.
+
+screen.service.error.header=Anwendung nicht berechtigt CAS zu verwenden
+service.principal.resolution.error=CAS ist es nicht möglich den korrekten Prinzipal zu bestimmen. \
+  Enweder konnte der Prinzipal nicht korrekt als einzelne, eindeutige Entität aufgelöst werden oder CAS hat \
+  mehrere Entitäten gefunden und ist nicht in der Lage präzise zu entscheiden, welche davon genutzt werden soll. \
+  Dieser Fehler kann auch auftreten, wenn der authentifizierte Prinzipal keine Berechtigung zum Zugriff auf die Ziel-Anwendung \
+  hat, weil die von der Authentifikationsrichtlinie (policy) geforderten Berechtigungen fehlen.
+service.not.authorized.missing.attr=Sie sind nicht berichtigt auf diese Anwednung zuzugreifen, da Ihrem Konto \
+  die Berechtigung fehlt, um Sie bei der Anwendung anzumelden. Bitte wenden Sie sich an Ihren IT-Support.
+screen.service.error.message=Die Anwendung, an die Sie sich anmelden möchten, ist nicht berechtigt CAS zu verwenden. \
+  Dies ist typischer Weise in Hinweis darauf, dass die Anwendung nicht bei CAS registiert ist, die Authentifikationsrichtlinie (policy) ihres Registierungseintrags \
+  die Nutzung von CAS-Funktionalität verhindert oder der Eintrag nicht wohlgeformt ist. \
+  Kontaktieren Sie Ihren CAS-Administrator, um in Erfahrung zu bringen, wie Sie Ihre Anwendung ggf. bei CAS registieren und mit CAS integrieren können.
+screen.service.empty.error.message=Die Service-Registrierung des CAS Server ist leer und hat keine Service-Definitionen.\
+  Anwendungen, welche über CAS authentifizieren möchten, müssen in der Services-Registrierung definiert werden.
+
+# Surrogate Account Selection
+screen.surrogates.account.selection.header=Auswahl des Surrogate-Kontos
+screen.surrogates.choose.account=Wählen Sie das Konto
+screen.surrogates.message=<p>Ihnen wir eine liste der Konten angezeigt, für die es Ihnen erlaubt ist, sich in dessen Namen anzumelden.</p> \
+  <p>Wählen Sie ein Konto aus und fahren Sie fort.</p>
+screen.surrogates.button.cancel=Abbrechen
+
+
+# Password policy
+password.expiration.warning=Ihr Kennwort läuft in {0} Tagen ab. Bitte <a href\="{1}">ändern Sie Ihr Kennwort</a>.
+password.expiration.loginsRemaining=Sie haben {0} Anmeldungen übrig, bevor Sie Ihr Kennwort ändern <strong>müssen</strong>.
+screen.accountdisabled.heading=Dieses Konto wurde deaktiviert.
+screen.accountdisabled.message=Bitte kontaktieren Sie Ihren System Administrator um wieder Zugriff zu erhalten.
+screen.accountlocked.heading=Dieses Konto wurde gesperrt.
+screen.accountlocked.message=Bitte kontaktieren Sie den Systemadministrator um wieder Zugang zu erlangen.
+screen.expiredpass.heading=Ihr Kennwort ist abgelaufen.
+screen.expiredpass.message=Bitte <a href="{0}">ändern Sie Ihr Kennwort</a>.
+screen.mustchangepass.heading=Sie müssen Ihr Kennwort ändern.
+screen.mustchangepass.message=Bitte <a href="{0}">ändern Sie Ihr Kennwort</a>.
+screen.badhours.heading=Ihrem Konto ist es nicht gestattet sich zu diesem Zeitpunkt anzumelden.
+screen.badhours.message=Bitte versuchen Sie es später noch einmal.
+screen.authnblocked.heading=Anmeldeversuch blockiert.
+screen.authnblocked.message=Der Anmeldeversuch von Ihrer aktuellen Workstation ist nicht vertrauenswürdig und unbefugt.
+screen.risk.authnblocked.heading=Anmeldeversuch blockiert.
+screen.risk.authnblocked.message=Der Anmeldeversuch von Ihrer aktuellen Workstation ist nicht vertrauenswürdig und unbefugt.
+screen.badworkstation.heading=Sie können sich von dieser Workstation aus nicht anmelden.
+screen.badworkstation.message=Bitte kontaktieren Sie Ihren System Administrator um Zugriff zu erhalten.
+screen.button.changePassword=Passwort ändern
+
+screen.pm.success.header=Passwortänderung erfolgreich
+screen.pm.success.message=Das Passwort Ihres Kontos wurde erfolgreich geändert.
+
+screen.pm.confirmpsw=Passwort bestätigen:
+screen.pm.enterpsw=Passwort eingeben:
+
+screen.pac4j.unauthz.pagetitle=Unbefugter Zugriff
+screen.pac4j.unauthz.gotoapp=Zur Anwendung
+screen.pac4j.unauthz.login=Zurück zu CAS
+screen.pac4j.unauthz.heading=Unbefugter Zugriff
+screen.pac4j.unauthz.message=Entweder wurde Ihre Anmeldeversuch abgewiesen/abgebrochen oder die Authentifikationsstelle (authentication provider) hat den Zugriff verweigert, da \
+  Berechtigungen fehlen, usw. Untersuchen Sie die Logs, um den ursprünglichen Auslöser dieses Fehlers zu finden.
+
+# GAuth
+screen.authentication.gauth.register=Ihr Konto ist nicht registiert. Nutzen Sie die Einstellungen unten, um Ihr Gerät bei CAS zu registieren.
+screen.authentication.gauth.key=Der geheime Schlüssel (secret key) zur Registerung lautet {0}
+
+# OAuth
+screen.oauth.confirm.header=Authorisierung
+screen.oauth.confirm.message=Wollen Sie "{0}" Zugriff auf Ihr Profil gestatten?
+screen.oauth.confirm.allow=Erlauben
+screen.oauth.confirm.deny=Verbieten
+cas.oauth.confirm.pagetitle=Zugriff genehmigen
+
+# Unavailable
+screen.unavailable.header=CAS Fehler
+screen.unavailable.heading=CAS ist nicht verfügbar
+screen.unavailable.message=Beim Verarbeiten Ihrer Anfrage ist ein Fehler aufgetreten. Bitte informieren Sie Ihren Support oder versuchen Sie es noch einmal.

+ 94 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_es.properties

@@ -0,0 +1,94 @@
+#Author: Joaquin Recio, Jose Luis Huertas, Juan Paulo Soto, and Alex Henrie
+
+#Welcome Screen Messages
+
+
+screen.welcome.welcome=¡Felicidades por iniciar CAS correctamente! Para aprender cómo autenticar, por favor repase la configuración del gestor de configuración por defecto.
+screen.welcome.security=Por razones de seguridad, ¡por favor cierre su sesión y su navegador web cuando haya terminado de acceder a los servicios que requieren autenticación!
+screen.welcome.instructions=Introduzca su nombre de usuario y contraseña.
+screen.welcome.label.netid=Nombre de <span class="accesskey">u</span>suario:
+screen.welcome.label.netid.accesskey=u
+screen.welcome.label.password=<span class="accesskey">C</span>ontraseña:
+screen.welcome.label.password.accesskey=c
+screen.welcome.label.warn=<span class="accesskey">A</span>visarme antes de abrir sesión en otros sitios.
+screen.welcome.label.warn.accesskey=a
+screen.welcome.button.login=INICIAR SESIÓN
+screen.welcome.button.clear=LIMPIAR
+
+logo.title=ir a la página principal de Apereo
+copyright=Copyright &copy; 2005&ndash;2015 Apereo, Inc. Se reservan todos los derechos.
+screen.capslock.on = ¡La tecla BLOQ MAYÚS está activada!
+
+# Blocked Errors Page
+screen.blocked.header=Acceso denegado
+screen.blocked.message=Ha introducido una contraseña equivocada para el usuario demasiadas veces. Se le ha restringido.
+
+#Confirmation Screen Messages
+screen.confirmation.message=Haga clic <a href="{0}">aquí</a> para ir a la aplicación.
+
+#Generic Success Screen Messages
+screen.success.header=Inicio de sesión exitoso
+screen.success.success=Usted, {0}, ha iniciado con éxito su sesión en el Servicio de Autenticación Central.
+screen.success.security=Por razones de seguridad, por favor cierre su sesión y su navegador web cuando haya terminado de acceder a los servicios que requieren autenticación.
+
+#Logout Screen Messages
+screen.logout.header=Cierre de sesión exitoso
+screen.logout.success=Ha cerrado con éxito su sesión del Servicio de Autenticación Central.
+screen.logout.security=Por razones de seguridad, cierre su navegador web.
+
+
+screen.service.sso.error.header=Reautenticación requerida para acceder a este servicio
+screen.service.sso.error.message=Intentó acceder a un servicio que requiere autenticación sin reautenticar. Por favor intente <a href="{0}">autenticar de nuevo</a>.
+
+username.required=El nombre de usuario es un campo requerido.
+password.required=La contraseña es un campo requerido.
+
+# Authentication failure messages
+authenticationFailure.AccountDisabledException=Se ha deshabilitado esta cuenta.
+authenticationFailure.AccountLockedException=Se ha bloqueado esta cuenta.
+authenticationFailure.CredentialExpiredException=Su contraseña ha caducado.
+authenticationFailure.InvalidLoginLocationException=No puede iniciar sesión desde esta estación de trabajo.
+authenticationFailure.InvalidLoginTimeException=Está prohibido iniciar sesión con su cuenta en este momento.
+authenticationFailure.AccountNotFoundException=Credenciales inválidas.
+authenticationFailure.FailedLoginException=Credenciales inválidas.
+authenticationFailure.UNKNOWN=Credenciales inválidas.
+
+INVALID_REQUEST_PROXY=ambos de los parámetros 'pgt' y 'targetService' se requieren
+INVALID_TICKET_SPEC=El tique falló la especificación de validación. Los errores posibles pueden incluir intentar validar un tique de proxy mediante un validador de tiques de servicio, o no cumplir con la petición de renovación (renew true).
+INVALID_REQUEST=ambos de los parámetros 'service' y 'ticket' se requieren
+INVALID_TICKET=No se ha reconocido el tique ''{0}''
+INVALID_SERVICE=El tique ''{0}'' no coincide con el servicio proporcionado. El servicio original era ''{1}'' y el servicio proporcionado era ''{2}''.
+INVALID_PROXY_CALLBACK=La dirección web de retrollamada de proxy ''{0}'' no se pudo autenticar.
+UNAUTHORIZED_SERVICE_PROXY=El servicio proporcionado ''{0}'' no está autorizado a usar la autenticación de proxy CAS.
+
+screen.service.error.header=Aplicación no autorizada a usar CAS
+service.not.authorized.missing.attr=No está autorizado a accedir a la aplicación porque a su cuenta \
+le faltan privilegios que el servidor CAS requiere para autenticar a este servicio. Por favor, notifique a su soporte técnico.
+screen.service.error.message=La aplicación que usted ha intentado autenticar no está autorizada a usar CAS.
+screen.service.empty.error.message=El registro de servicios del CAS está vacío y no tiene definiciones de servicio. \
+Las aplicaciones que quieren autenticar con CAS deben ser explícitamente definidas en el registro de servicios.
+
+# Password policy
+password.expiration.warning=Su contraseña caduca en {0} días. Por favor <a href="{1}">cambie su contraseña</a> ahora.
+password.expiration.loginsRemaining=Tiene {0} inicios de sesión restantes antes que <strong>DEBE</strong> cambiar su contraseña.
+screen.accountdisabled.heading=Se ha deshabilitado esta cuenta.
+screen.accountdisabled.message=Por favor contacte al administrador de sistema para recobrar acceso.
+screen.accountlocked.heading=Se ha bloqueado esta cuenta.
+screen.accountlocked.message=Por favor contacte al administrador de sistema para recobrar acceso.
+screen.expiredpass.heading=Su contraseña ha caducado.
+screen.expiredpass.message=Por favor <a href="{0}">cambie su contraseña</a>.
+screen.mustchangepass.heading=Debe cambiar su contraseña.
+screen.mustchangepass.message=Por favor <a href="{0}">cambie su contraseña</a>.
+screen.badhours.heading=Está prohibido iniciar sesión con su cuenta en este momento.
+screen.badhours.message=Por favor intente más tarde.
+screen.badworkstation.heading=No puede iniciar sesión desde esta estación de trabajo.
+screen.badworkstation.message=Por favor contacte al administrador de sistema para recobrar acceso.
+
+# OAuth
+screen.oauth.confirm.header=Autorización
+screen.oauth.confirm.message=¿Quiere conceder acceso a su perfil completo a "{0}"?
+screen.oauth.confirm.allow=Permitir
+
+# Unavailable
+screen.unavailable.heading=CAS no está disponible
+screen.unavailable.message=Hubo un error al intentar cumplir con su petición. Por favor notifique a su soporte técnico o intente otra vez.

File diff suppressed because it is too large
+ 54 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_fa.properties


+ 353 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_fr.properties

@@ -0,0 +1,353 @@
+screen.welcome.welcome=Félicitations, votre serveur est en ligne ! Pour savoir comment vous authentifier, merci de regarder la méthode d'authentification définie par défaut.
+screen.welcome.security=Pour des raisons de sécurité, veuillez vous <a href="logout">déconnecter</a> et fermer votre navigateur lorsque vous avez fini d'accéder aux services authentifiés.
+screen.welcome.instructions=Entrez votre identifiant et votre mot de passe.
+screen.welcome.label.netid=<span class="accesskey">I</span>dentifiant :
+screen.welcome.label.netid.accesskey=i
+screen.welcome.label.password=<span class="accesskey">M</span>ot de passe :
+screen.welcome.label.password.accesskey=m
+screen.welcome.label.publicstation=Je suis sur un ordinateur public.
+screen.welcome.label.warn=<span class="accesskey">P</span>révenez-moi avant d'accéder à d'autres services.
+screen.welcome.label.warn.accesskey=p
+screen.welcome.label.warnremove=Ne plus me prévenir
+screen.welcome.button.login=SE CONNECTER
+screen.welcome.button.logout=SE DECONNECTER
+screen.welcome.button.loginwip=Veuillez patienter...
+screen.welcome.button.register=S'enregistrer
+screen.welcome.button.print=Imprimer
+screen.welcome.button.clear=EFFACER
+screen.welcome.label.loginwith=Ou authentifiez-vous avec :
+
+screen.cookies.disabled.title=Cookies navigateur désactivés
+screen.cookies.disabled.message=Votre navigateur ne supporte pas les cookies. L'authentification centralisée NE FONCTIONNERA PAS.
+
+screen.pm.button.submit=SOUMETTRE
+screen.pm.button.cancel=ANNULER
+screen.pm.button.forgotpwd=<a href="https://pwd.example.org">Mot de passe oublié ?</a>
+screen.pm.button.resetPassword=Réinitialiser votre mot de passe
+screen.pm.reset.username=Identifiant :
+screen.pm.reset.heading=Echec de la réinitialisation du mot de passe
+screen.pm.reset.message=Votre demande de réinitialisation du mot de passe ne peut pas être traitée à l'heure actuelle
+screen.pm.reset.qstitle=Répondez aux questions de sécurité
+screen.pm.reset.qsmsg=Bienvenue <strong>{0}</strong>. Avant de pouvoir réinitialiser votre mot de passe, vous devez répondre aux questions de sécurité suivantes.
+screen.pm.reset.sentInstructions=Vous devriez bientôt recevoir un e-mail contenant les instructions à suivre pour réinitialiser votre mot de passe. Veuillez en tenir compte rapidement car leur validité pourrait être limitée dans le temps.
+screen.pm.reset.sent=Instructions de réinitialisation de mot de passe envoyées avec succès.
+screen.pm.reset.title=Réinitialiser votre mot de passe
+screen.pm.reset.instructions=Veuillez indiquer votre identifiant. Vous recevrez un e-mail avec les instructions à suivre pour réinitialiser votre mot de passe.
+
+screen.aup.heading=Politique d'utilisation acceptable
+screen.aup.button.accept=ACCEPTER
+screen.aup.button.cancel=ANNULER
+
+screen.consent.confirm=CONFIRMER
+screen.consent.cancel=ANNULER
+screen.consent.title=Consentement
+screen.consent.attributes=Attributs
+screen.consent.options=Options
+screen.consent.attributes.header=Les attributs suivants seront fournis à <strong>[{0}]</strong> :
+screen.consent.attributes.attribute=Attribut
+screen.consent.attributes.values=Valeur(s)
+screen.consent.attributes.data.info=Affichage de _START_ à _END_ éléments sur _TOTAL_
+screen.consent.options.header=A quelle fréquence devrais-je donner mon consentement à l'avenir ?
+screen.consent.options.always=<strong>A chaque fois</strong>
+screen.consent.options.desc.always=Afficher l''écran de consentement à chaque fois que j''accède à {0}.
+screen.consent.options.attributename=<strong>Ajout/suppression d'attribut</strong>
+screen.consent.options.desc.attributename=Afficher l''écran de consentement si un attribut est ajouté ou supprimé de la liste des attributs fournis à {0}.
+screen.consent.options.attributevalue=<strong>Ajout/suppression/modification d'attribut</strong>
+screen.consent.options.desc.attributevalue.intro=Afficher l'écran de consentement si :
+screen.consent.options.desc.attributevalue.first=Un nouvel attribut est ajouté à la liste des attributs fournis à {0}.
+screen.consent.options.desc.attributevalue.second=Un attribut est supprimé de la liste des attributs fournis à {0}.
+screen.consent.options.desc.attributevalue.third=La valeur d''un attribut fourni à {0} a changé.
+screen.consent.options.reminder.header=A quelle fréquence devrais-je être rappelé de donner mon consentement ?
+screen.consent.options.reminder.expl=Afficher l''écran de consentement, sous forme de rappel, dans le cas où la liste des attributs fournis à {0} n''a pas changé.
+screen.consent.options.timeunit.seconds=Secondes
+screen.consent.options.timeunit.minutes=Minutes
+screen.consent.options.timeunit.hours=Heures
+screen.consent.options.timeunit.days=Jours
+screen.consent.options.timeunit.weeks=Semaines
+screen.consent.options.timeunit.months=Mois
+screen.consent.options.timeunit.years=Années
+
+screen.consent.review.header=Vérification du consentement
+screen.consent.review.loading=Chargement des choix de consentement ...
+screen.consent.review.noconsentdecisions=Aucune décision de consentement n'a été enregistrée vous concernant.
+screen.consent.review.success=La décision de consentement a été supprimée avec succès.
+screen.consent.review.error=Une erreur est survenue
+screen.consent.review.confirm=Supprimer la décision de consentement pour [{}] ?
+screen.consent.review.yes=Oui
+screen.consent.review.no=Non
+screen.consent.review.date=Date
+screen.consent.review.service=Service
+screen.consent.review.delete=SUPPRIMER
+screen.consent.review.createddate=Date de création :
+screen.consent.review.reminder=Rappel :
+screen.consent.review.option=Option :
+screen.consent.review.options.attributename=Ajout/suppression d'attribut
+screen.consent.review.options.attributevalue=Ajout/suppression/modification d'attribut
+screen.consent.review.options.always=A chaque fois
+screen.consent.review.options.desc.always=Afficher l'écran de consentement à chaque fois que je me connecte.
+screen.consent.review.options.desc.attributename=Afficher l'écran de consentement si un attribut est ajouté ou supprimé de la liste des attributs.
+screen.consent.review.options.desc.attributevalue=Afficher l'écran de consentement si 1) un nouvel attribut est ajouté à la liste, 2) un attribut est supprimé de la liste, 3) la valeur d'un attribut a changé.
+screen.consent.review.attributes=Attributs :
+screen.consent.review.data.search=Rechercher
+screen.consent.review.data.zerorecords=Aucune décision correspondante n'a été trouvée
+screen.consent.review.data.info=Affichage de _START_ à _END_ éléments sur _TOTAL_
+screen.consent.review.data.infofiltered=(filtré parmi _MAX_ éléments au total)
+screen.consent.review.data.infoempty=Aucune décision à afficher
+screen.consent.review.logout.success=Vous êtes déconnecté de la page de vérification du consentement. Vous pouvez vous <a href="../logout">déconnecter</a> complètement du Service Central d'Authentification et terminer votre session de connexion unique.
+
+screen.nonsecure.title=Connexion non sécurisée
+screen.nonsecure.message=Vous accédez actuellement au serveur CAS via une connexion non sécurisée. L'authentification unique NE FONCTIONNERA PAS. Pour faire fonctionner l'authentification unique, vous devez vous authentifier en HTTPS.
+
+screen.defaultauthn.title=Authentification statique
+screen.defaultauthn.heading=CAS est configuré pour accepter une liste statique d'utilisateurs pour l'authentification principale. Veuillez noter que ceci est UNIQUEMENT utile à des fins de démonstration. Il est recommandé d'utiliser CAS avec un serveur LDAP, JDBC, etc. à la place.
+logo.title=Aller à la page d'accueil Apereo
+copyright=Copyright &copy; 2005&ndash;2018 Apereo, Inc.
+screen.capslock.on=La touche Verr Maj est activée !
+screen.button.continue=Continuer
+screen.post.response.message=Vous allez être redirigé vers {0}.
+
+screen.interrupt.title=Interruption de l'authentification
+screen.interrupt.message=Le processus d''authentification a été interrompu. CAS n''a pas encore établi de session d''authentification centralisée pour <strong>{0}</strong>.
+
+screen.mdui.infolink.text=<a href="{0}" target="_blank">Plus d''informations sur cette application</a>.
+screen.mdui.privacylink.text=<a href="{0}" target="_blank">Politique de confidentialité de cette application</a>.
+
+screen.interrupt.btn.proceed=Continuer
+screen.interrupt.btn.cancel=Annuler
+
+# Generic Error Pages 401, 404, 500, etc
+########################################
+screen.error.page.heading=Erreur
+screen.error.page.title.accessdenied=Erreur - Accès refusé
+screen.error.page.title.permissiondenied=Erreur - Permission refusée
+screen.error.page.title.pagenotfound=Erreur - Page introuvable
+screen.error.page.title.requestunsupported=Erreur - Requête non supportée
+screen.error.page.accessdenied=Accès refusé
+screen.error.page.permissiondenied=Vous n'avez pas la permission de consulter cette page.
+screen.error.page.requestunsupported=Le type de requête ou sa syntaxe n'est pas supporté.
+screen.error.page.loginagain=Se reconnecter
+screen.error.page.notfound=Page introuvable
+screen.error.page.doesnotexist=La page à laquelle vous tentez d'accéder n'existe pas.
+screen.error.page.authdenied=Autorisation d'accès refusée
+
+# Remember-Me Authentication
+screen.rememberme.checkbox.title=Se souvenir de moi
+
+# Gua
+screen.gua.confirm.message=Si vous ne reconnaissez pas cette image, ne continuez PAS.
+
+# Blocked Errors Page
+screen.error.page.title.blocked=Erreur - Permission refusée
+screen.blocked.header=Accès non autorisé
+screen.blocked.message=Vous avez saisi un mauvais mot de passe trop de fois de suite. Vous avez été rejeté.
+AbstractAccessDecisionManager.accessDenied=Vous n'êtes pas autorisé à accéder à cette ressource. Contactez votre administrateur CAS pour plus d'informations.
+
+#Confirmation Screen Messages
+screen.confirmation.message=Vous avez demandé à être prévenu avant de vous connecter aux applications. Veuillez continuer.
+screen.authentication.warning=Connexion réussie avec avertissement
+
+#Generic Success Screen Messages
+screen.success.header=Connexion réussie
+screen.success.success=Bienvenue <strong>{0}</strong>. Vous vous êtes authentifié(e) auprès du Service Central d''Authentification. Toutefois, vous voyez \
+  cette page car CAS ne connait pas votre destination finale ni comment vous y rediriger. Examinez la requête d''authentification et \
+  assurez-vous qu''une application ou service cible autorisé et enregistré auprès de CAS est spécifié.
+screen.success.security=Pour des raisons de sécurité, veuillez vous <a href="logout">déconnecter</a> et fermer votre navigateur lorsque vous avez fini d'accéder aux services authentifiés.
+
+#Logout Screen Messages
+screen.logout.confirm.header=Voulez-vous vous déconnecter complètement ?
+screen.logout.confirm.text=Une application vous a peut-être redirigé vers le Service Central d'Authentification \
+  pour vous déconnecter complètement et détruire votre session d'authentification unique. Si vous choisissez de vous déconnecter, vous devrez à nouveau \
+  fournir vos identifiants pour accéder à une application.<p><p><br>Voulez-vous continuer ?
+
+screen.logout.header=Déconnexion réussie
+screen.logout.success=Vous vous êtes déconnecté(e) du Service Central d'Authentification. Vous pouvez vous <a href="login">connecter</a> à nouveau.
+screen.logout.fc.success=Vous vous êtes déconnecté(e) du Service Central d'Authentification. La déconnexion unique étant activée, \
+  les applications de la liste suivante seront <strong>seulement notifiées</strong> de votre déconnexion et de la destruction de votre session. Notez \
+  qu'il ne s'agit que d'une notification, pas d'une garantie. Il est de la responsabilité de chaque application d'en tenir compte et de vous déconnecter.
+screen.logout.security=Pour des raisons de sécurité, veuillez fermer votre navigateur.
+
+screen.service.sso.error.header=Une nouvelle authentification est requise pour accéder à ce service.
+screen.service.sso.error.message=Vous avez tenté d''accéder à un service qui requiert une nouvelle authentification sans vous authentifier à nouveau.  Veuillez <a href="{0}">vous authentifier de nouveau</a>.
+screen.service.required.message=Vous avez tenté de vous authentifier sans préciser d'application cible. Merci de vérifier votre requête et de recommencer.
+
+captchaError=Echec de la validation reCAPTCHA.
+username.required=Vous devez entrer votre identifiant.
+password.required=Vous devez entrer votre mot de passe.
+
+# Password Management
+confirmedPassword.required=Le mot de passe doit être confirmé.
+pm.passwordsMustMatch=Les mots de passe fournis ne correspondent pas.
+pm.passwordFailedCriteria=Le mot de passe fourni ne satisfait pas la politique de sécurité. Veuillez réessayer.
+pm.updateFailure=Le mot de passe n'a pas pu être modifié. Veuillez réessayer.
+
+# Authentication failure messages
+authenticationFailure.AccountDisabledException=Votre compte a été désactivé.
+authenticationFailure.AccountLockedException=Votre compte est bloqué.
+authenticationFailure.AccountExpiredException=Votre compte a expiré et n'est pas autorisé à se connecter à l'heure actuelle.
+authenticationFailure.CredentialExpiredException=Votre mot de passe a expiré.
+authenticationFailure.InvalidLoginLocationException=Vous ne pouvez pas vous authentifier depuis cet ordinateur.
+authenticationFailure.InvalidLoginTimeException=Vous ne pouvez pas vous authentifier pendant cette période.
+authenticationFailure.AccountNotFoundException=Mauvais identifiant / mot de passe.
+authenticationFailure.FailedLoginException=Mauvais identifiant / mot de passe.
+authenticationFailure.SurrogateAuthenticationException=Vous n'êtes pas autorisé à vous faire passer pour cet utilisateur à l'heure actuelle.
+authenticationFailure.AccountPasswordMustChangeException=Votre mot de passe a expiré et doit être changé.
+authenticationFailure.UnauthorizedServiceForPrincipalException=Accès au service refusé en raison de privilèges manquants.
+authenticationFailure.UNKNOWN=Mauvais identifiant / mot de passe.
+authenticationFailure.AuthenticationException=L'identifiant / mot de passe est invalide et la tentative d'authentification a échoué.
+
+INVALID_REQUEST_PROXY=La requête n'est pas formattée correctement. Assurez-vous que tous les paramètres requis sont correctement encodés et inclus.
+INVALID_TICKET_SPEC=La validation du ticket est impossible. Les raisons possibles peuvent être la validation d'un Proxy Ticket sur une URL de validation de Service Ticket, ou une mauvaise requête de type renew.
+INVALID_REQUEST=Les paramètres 'service' et 'ticket' sont tous deux nécessaires
+INVALID_TICKET=Le ticket ''{0}'' est inconnu
+INVALID_PROXY_GRANTING_TICKET=Le PGT a déjà été généré pour ce ST. Impossible de générer plus d'un PGT pour un ST donné.
+INVALID_SERVICE=Le ticket ''{0}'' ne correspond pas au service demandé. Le service original était ''{1}'' et le service demandé était ''{2}''.
+INVALID_PROXY_CALLBACK=L''url de rappel du proxy ''{0}'' n''a pu être authentifiée. Soit ''{0}'' est injoignable, soit il n''est pas autorisé à exécuter une authentification proxy.
+UNAUTHORIZED_SERVICE_PROXY=Le service utilisé ''{0}'' n''est pas autorisé à utiliser l''authentification proxy CAS.
+UNSATISFIED_AUTHN_POLICY=L'accès au service est refusé en raison d'une politique d'authentification non satisfaite.
+
+screen.service.error.header=Application non autorisée à utiliser CAS
+service.not.authorized.missing.attr=Vous n'êtes pas autorisé à accéder à cette application car votre compte \
+n'a pas les privilèges requis par le seveur CAS pour accéder à ce service. Merci de contacter votre support.
+screen.service.error.message=L'application pour laquelle vous avez tenté de vous authentifier n'est pas autorisée à utiliser CAS. \
+  Ceci signifie habituellement que l'application n'est pas enregistrée auprès de CAS, ou sa politique d'accès définie lors de son enregistrement \
+  ne lui permet pas d'utiliser les fonctionnalités de CAS, ou bien elle est invalide et non reconnue par CAS. \
+  Contactez votre administrateur CAS pour savoir comment enregistrer et intégrer votre application à CAS.
+screen.service.empty.error.message=Le registre de services CAS est vide et ne contient aucune définition de service. \
+Les applications qui souhaitent s'authentifier auprès de CAS doivent explicitement s'enregistrer dans la base des services.
+
+# Surrogate Account Selection
+screen.surrogates.account.selection.header=Sélection du compte de substitution
+screen.surrogates.choose.account=Choisissez un compte
+screen.surrogates.message=<p>Voici une liste de comptes pour lesquels vous êtes autorisé à vous authentifier.</p> \
+<p>Veuillez en sélectionner un et continuer.</p>
+screen.surrogates.button.cancel=Annuler
+
+
+# Password policy
+password.expiration.warning=Votre mot de passe expire dans {0} jour(s). Merci de <a href="{1}">changer votre mot de passe</a> maintenant.
+password.expiration.loginsRemaining=Il vous reste {0} authentification(s) avant de <strong>DEVOIR</strong> changer votre mot de passe.
+screen.accountdisabled.heading=Ce compte a été désactivé.
+screen.accountdisabled.message=Merci de contacter votre administrateur système pour récupérer votre accès.
+screen.accountlocked.heading=Votre compte a été bloqué.
+screen.accountlocked.message=Merci de contacter votre administrateur pour le débloquer.
+screen.expiredpass.heading=Votre mot de passe a expiré.
+screen.expiredpass.message=Merci de <a href="{0}">changer votre mot de passe</a>.
+screen.mustchangepass.heading=Vous devez changer votre mot de passe.
+screen.mustchangepass.message=Merci de <a href="{0}">changer votre mot de passe</a>.
+screen.badhours.heading=Vous ne pouvez pas vous authentifier durant cette plage horaire.
+screen.badhours.message=Merci de réessayer plus tard.
+screen.authnblocked.heading=La tentative d'authentification est bloquée.
+screen.authnblocked.message=Votre tentative d'authentification n'est pas considérée comme sûre et n'est donc pas autorisée depuis cet ordinateur.
+screen.risk.authnblocked.heading=La tentative d'authentification est bloquée.
+screen.risk.authnblocked.message=Votre tentative d'authentification n'est pas considérée comme sûre et n'est donc pas autorisée depuis cet ordinateur.
+screen.badworkstation.heading=Vous ne pouvez pas vous authentifier depuis cet ordinateur.
+screen.badworkstation.message=Merci de contacter votre administrateur système pour récupérer votre accès.
+screen.button.changePassword=Changer de mot de passe
+
+screen.pm.success.header=Changement de mot de passe réussi
+screen.pm.success.message=Le mot de passe de votre compte a été mis à jour avec succès.
+
+screen.pm.confirmpsw=Confirmez le mot de passe :
+screen.pm.enterpsw=Entrez le mot de passe :
+
+screen.pac4j.unauthz.pagetitle=Accès non autorisé
+screen.pac4j.unauthz.gotoapp=Aller à l'application
+screen.pac4j.unauthz.login=Revenir à CAS
+screen.pac4j.unauthz.heading=Accès non autorisé
+screen.pac4j.unauthz.message=Soit la requête d'authentification a été rejetée/annulée, soit le fournisseur d'authentification a rejeté l'accès en raison \
+  de permissions incorrectes, etc. Vérifiez les logs pour trouver la cause réelle du problème.
+
+# GAuth
+screen.authentication.gauth.register=Votre compte n'est pas enregistré. Utilisez les paramètres suivants pour enregistrer votre appareil auprès de CAS.
+screen.authentication.gauth.key=La clé secrète pour l''enregistrement est {0}
+
+# OAuth
+screen.oauth.confirm.header=Autorisation
+screen.oauth.confirm.message=Voulez-vous donner accès à votre profil à "{0}" ?
+screen.oauth.confirm.allow=Autoriser
+screen.oauth.confirm.deny=Refuser
+cas.oauth.confirm.pagetitle=Approbation de l'accès
+
+# OIDC
+screen.oidc.confirm.infourl=Plus d''informations sur {0}.
+screen.oidc.confirm.privacyurl=Consultez les règles de confidentialité de {0}.
+
+screen.oidc.confirm.scope.profile=Ceci fournit l'accès aux informations de profil excluant adresse, e-mail et téléphone.
+screen.oidc.confirm.scope.email=Ceci fournit l'accès aux informations d'adresse e-mail.
+screen.oidc.confirm.scope.address=Ceci fournit l'accès aux informations d'adresse postale.
+screen.oidc.confirm.scope.openid=Ceci indique une requête d'accès OpenID Connect.
+screen.oidc.confirm.scope.phone=Ceci fournit l'accès aux informations de téléphone.
+screen.oidc.confirm.scope.offline_access=Ceci fournit l'accès à un refresh token utilisé pour l'accès hors ligne.
+
+screen.oidc.confirm.asksinfo=Ce client demande l'accès aux informations suivantes :
+screen.oidc.confirm.dynamic=Ce client a été enregistré dynamiquement à <code>{0}</code>.
+
+# Unavailable
+screen.unavailable.header=Erreur CAS
+screen.unavailable.heading=CAS n''a pas pu traiter cette requête : "{0}:{1}"
+screen.unavailable.message=Une erreur s'est produite lors du traitement de votre requête. \
+<strong>Merci de contacter votre support ou de réessayer.</strong> \
+<div>Apereo est une fondation de gouvernance de logiciel libre à but non lucratif. Le logiciel CAS est un projet sponsorisé par Apereo \
+et est librement téléchargeable et utilisable par n'importe qui. Toutefois, Apereo ne gère pas les systèmes de quiconque utilise le \
+logiciel et dans la plupart des cas n'a pas connaissance de qui l'utilise ou comment les contacter, à moins qu'il ne s'agisse de \
+membres actifs de la communauté Apereo.<br/><br/>Si vous avez des difficultés à vous connecter en utilisant CAS, \
+<strong>vous devrez contacter le support technique ou l'équipe IT de votre organisation pour obtenir une assistance</strong>. \
+<br/><br/>Nous sommes désolés de ne pouvoir vous apporter une aide plus directe.</div>
+
+#####################################################################
+# Login View
+#####################################################################
+#Resources Labels
+cas.login.pagetitle=Connexion
+cas.login.resources.header=Liens vers les ressources CAS
+cas.login.resources.wiki=Documentation
+cas.login.resources.pulls=Pull Requests
+cas.login.resources.mailinglist=Listes de diffusion
+cas.login.resources.chat=Salon de discussion
+cas.login.resources.blog=Blog
+cas.login.resources.dashboard=Tableau de bord
+cas.login.resources.contribguide=Guide pour les contributeurs
+
+####
+# Acceptable Usage Policy View
+#
+cas.acceptableusagepolicyview.pagetitle=Politique d'utilisation acceptable
+
+####
+# Attribute Resolution View
+#
+cas.attrresolutionview.pagetitle=Résolution des attributs
+cas.attrreleaseview.pagetitle=Accès aux attributs
+cas.attrresolutionview.label.uid=Identifiant :
+cas.attrresolutionview.button.submit=SOUMETTRE
+
+##
+# MFA
+##
+cas.mfa.duologin.pagetitle=Connexion DuoSecurity
+cas.mfa.googleauth.pagetitle=Google Authenticator
+cas.mfa.googleauth.label.token=Code :
+cas.mfa.azure.pagetitle=Microsoft Authenticator
+cas.mfa.radius.pagetitle=Authentification Radius
+cas.mfa.yubikey.pagetitle=Authentification YubiKey
+cas.mfa.yubikey.authenticate=Utilisez votre appareil YubiKey enregistré pour vous authentifier.
+cas.mfa.yubikey.register=Votre appareil n'est pas encore enregistré. Utilisez le formulaire suivant pour enregistrer votre appareil auprès de CAS.
+cas.mfa.yubikey.label.token=Code :
+cas.mfa.u2f.pagetitle=Authentification U2F
+cas.mfa.u2f.authentication.device=Appareil d'authentification
+cas.mfa.u2f.authentication.message=<p><strong>Veuillez appuyer sur l'appareil U2F clignotant maintenant.</strong></p><p> Vous pourrez être sollicité pour autoriser \
+ le site à accéder à vos clés de sécurité. Après avoir donné votre accord, l'appareil se mettra à clignoter.</p>
+cas.mfa.u2f.register.device=Enregistrer l'appareil
+cas.mfa.u2f.register.message=<p><strong>Veuillez appuyer sur l'appareil U2F clignotant maintenant.</strong></p><p> Vous pourrez être sollicité pour autoriser \
+ le site à accéder à vos clés de sécurité. Après avoir donné votre accord, l'appareil se mettra à clignoter.</p>
+cas.mfa.authy.pagetitle=Connexion Authy
+cas.mfa.swivel.pagetitle=Authentification Swivel
+cas.mfa.swivel.label.token=Code :
+cas.mfa.swivel.label.header=Authentication Swivel
+
+cas.mfa.registerdevice.label.title=Enregistrer l'appareil
+cas.mfa.registerdevice.label.intro=Veuillez nommer l'appareil actuel.
+cas.mfa.registerdevice.pagetitle=Enregistrer l'appareil
+cas.mfa.registerdevice.label.name=Nom
+cas.mfa.registerdevice.button.register=Enregistrer
+

+ 52 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_hr.properties

@@ -0,0 +1,52 @@
+
+# @author Nebojsa Topolscak <topsi at srce dot hr>
+# @author Jasmina Plavac
+# University Computing Center - Zagreb, Croatia
+# @since 3.1.1
+
+#Welcome Screen Messages
+
+screen.welcome.welcome=\u010cestitamo na uspje\u0161noj instalaciji CAS-a! Inicijalni autentikacijski mehanizam obavlja uspje\u0161nu autentikaciju uno\u0161enjem korisni\u010dkog imena i zaporke iste vrijednosti. Isprobajte!
+screen.welcome.security=Iz sigurnosnih razloga molimo vas da se odjavite i zatvorite web preglednik nakon \u0161to zavr\u0161ite s radom u aplikacijama koje zahtijevaju autentikaciju.
+screen.welcome.instructions=Unesite korisni\u010dko ime i zaporku.
+screen.welcome.label.netid=<span class="accesskey">K</span>orisni\u010dko ime:
+screen.welcome.label.netid.accesskey=k
+screen.welcome.label.password=<span class="accesskey">Z</span>aporka:
+screen.welcome.label.password.accesskey=z
+screen.welcome.label.warn=<span class="accesskey">U</span>pozori me prije prijave u druge aplikacije.
+screen.welcome.label.warn.accesskey=u
+screen.welcome.button.login=PRIJAVA
+screen.welcome.button.clear=PONI\u0160TI
+
+#Confirmation Screen Messages
+screen.confirmation.message=Pritisnite <a href="{0}">ovdje</a> za ulaz u aplikaciju.
+
+#Generic Success Screen Messages
+screen.success.header=Uspje\u0161na prijava
+screen.success.success=Uspje\u0161no ste se prijavili u Centralni autentikacijski servis.
+screen.success.security=Iz sigurnosnih razloga molimo vas da se odjavite i zatvorite web preglednik nakon \u0161to zavr\u0161ite s radom u aplikacijama koje zahtijevaju autentikaciju.
+
+#Logout Screen Messages
+screen.logout.header=Uspje\u0161na odjava
+screen.logout.success=Uspje\u0161no ste se odjavili iz Centralnog autentikacijskog servisa
+screen.logout.security=Iz sigurnosnih razloga zatvorite web preglednik.
+
+
+screen.service.sso.error.header=Za pristup ovom servisu potrebna je ponovna autentikacija.
+screen.service.sso.error.message=Poku\u0161ali ste pristupiti servisu koji zahtijeva autentikaciju, pri \u010demu se niste ponovno autenticirali. Molimo vas poku\u0161ajte se ponovno autenticirati pritiskom <a href="{0}">ovdje</a>.
+
+
+username.required=Korisni\u010dko ime je obavezno polje.
+password.required=Zaporka je obavezno polje.
+error.authentication.credentials.bad=Korisni\u010dko ime i(li) zaporka nisu ispravni.
+error.authentication.credentials.unsupported=CAS ne podr\u017eava ovaj na\u010din autentikacije.
+
+INVALID_REQUEST_PROXY=Parametri 'pgt' i 'targetService' su obavezni.
+INVALID_TICKET_SPEC=Ticket nije pro\u0161ao provjeru ispravnosti. Ova pogre\u0161ka mo\u017ee upu\u0107ivati na poku\u0161aj provjere ispravnosti Proxy Ticketa pomo\u0107u Service Ticket validatora ili na neudovoljavanje zahtjevu uz parametar renew=true.
+
+INVALID_REQUEST=Parametri 'service' i 'ticket' su obavezni
+INVALID_TICKET=Ticket ''{0}'' nije prepoznat.
+INVALID_SERVICE=Ticket ''{0}'' ne odgovara ovom servisu. Orginalni servis bio je ''{1}'', a isporu\u010deni servis bio je ''{2}''.
+
+screen.service.error.header=Aplikacija nije autorizirana za uporabu CAS-a
+screen.service.error.message=Aplikacia u koju ste se poku\u0161ali prijaviti nije autorizirana za uporabu CAS-a.

+ 77 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_it.properties

@@ -0,0 +1,77 @@
+#Author: Roberto Cosenza http://robcos.com
+#Version: $Revision$ $Date$
+#Since: 3.0.5
+
+#Welcome Screen Messages
+
+
+screen.welcome.welcome=Benvenuti al Central Authentication Service (CAS).
+screen.welcome.security=Per motivi di sicurezza dovresti effettuare il logout e chiudere tutte le finestre del browser quando hai finito di utilizzare servizi che necessitano autenticazione.
+screen.welcome.instructions=Inserisci login e password
+screen.welcome.label.netid=<span class="accesskey">L</span>ogin:
+screen.welcome.label.netid.accesskey=L
+screen.welcome.label.password=<span class="accesskey">P</span>assword:
+screen.welcome.label.password.accesskey=P
+screen.welcome.label.warn=<span class="accesskey">A</span>vvisami prima di autenticarmi su un altro sito
+screen.welcome.label.warn.accesskey=A
+screen.welcome.button.login=LOGIN
+screen.welcome.button.clear=ANNULLA
+
+# Blocked Errors Page
+screen.blocked.header=Accesso Negato
+screen.blocked.message=� stata inserita la password sbagliata troppe volte. L'account � stato bloccato.
+
+#Confirmation Screen Messages
+screen.confirmation.message=Clicca <a href="{0}">qu�</a> per accedere al servizio.
+
+#Generic Success Screen Messages
+screen.success.header=Login eseguito correttamente
+screen.success.success=Hai effettuato il login al Central Authentication Service.
+screen.success.security=Per motivi di sicurezza dovresti effettuare il logout e chiudere tutte le finestre del browser quando hai finito di utilizzare servizi che necessitano autenticazione.
+
+#Logout Screen Messages
+screen.logout.header=Logout effettuato con successo
+screen.logout.success=Hai correttamente effettuato il logout dal Central Authentication Service.
+screen.logout.security=Per motivi di sicurezza, si consiglia di chiudere tutte le finestre del browser.
+
+
+screen.service.sso.error.header=� necessario effettuare nuovamente l'autenticazione per avere l'accesso a questo servizio
+screen.service.sso.error.message=Si � tentato di accedere a un servizio che richiede di effettuare nuovamente l'autenticazione. Si prega di <a href="{0}">autenticarsi nuovamente</a>.
+
+username.required=Il campo login � obbligatorio
+password.required=Il campo password � obbligatorio
+error.authentication.credentials.bad=Login o password errate
+error.authentication.credentials.unsupported=Le credenziali utilizzate non sono supportate da CAS
+
+INVALID_REQUEST_PROXY=I parametri 'pgt' e 'targetService' sono entrambi obbligatori
+INVALID_TICKET_SPEC=La convalida del Ticket non ha avuto successo. Una possibile causa di errore potrebbe essere il tentativo di convalidare un Proxy Ticket via un Service Ticket validator.
+INVALID_REQUEST=I parametri 'service' e 'ticket' sono entrambi obbligatori
+INVALID_TICKET=Il ticket ''{0}'' non � stato riconosciuto
+INVALID_SERVICE=Il ticket ''{0}'' non corrisponde a nessun servizio disponibile
+
+#Service Error Messages
+screen.service.error.header=Servizio non autorizzato.
+screen.service.error.message=Il servizio a cui stai cercando di accedere non � configurato per CAS
+
+# LPPE Account Error
+screen.accounterror.password.message=La data di rinnovo della password non � specificata, � scaduta o non valida. Si prega di contattare l'amministratore di sistema per recuperare le credenziali di accesso.
+
+# LPPE Account Disabled
+screen.accountdisabled.heading=Questo account � disabilitato.
+screen.accountdisabled.message=Si prega di contattare l'amministratore di sistema per recuperare le credenziali di accesso.
+
+# LPPE Password Expired
+screen.expiredpass.heading=La vostra password � scaduta.
+screen.expiredpass.message=Si prega di <a href="{0}">cambiare la password</a>.
+
+# LPPE Password Must be changed
+screen.mustchangepass.heading=La password deve essere cambiata.
+screen.mustchangepass.message=Si prega di <a href="{0}">cambiare la password</a>.
+
+# LPPE Login out of authorized hours
+screen.badhours.heading=Non si � autorizzati a effettuare il login a quest'ora.
+screen.badhours.message=Si prega di riprovare pi� tardi.
+
+# LPPE Login out of authorized workstations
+screen.badworkstation.heading=Non si � autorizzati a effettuare il login da questa postazione.
+screen.badworkstation.message=Si prega di conttattare l'amministratore di sistema per recuperare le credenziali d'accesso.

File diff suppressed because it is too large
+ 52 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_ja.properties


File diff suppressed because it is too large
+ 50 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_mk.properties


+ 44 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_nl.properties

@@ -0,0 +1,44 @@
+#Author: Jan "Velpi" Van der Velpen
+#Since 3.0.3
+
+
+screen.welcome.welcome=Proficiat met de succesvolle installatie van CAS!  Met de standaard "authentication handler" kan je ingeloggen als de gebruikersnaam gelijk is aan het wachtwoord. Je kan het nu proberen.
+screen.welcome.security=Voor de veiligheid moet je uitloggen en je browser sluiten wanneer je geen toegang meer nodig hebt tot afgeschermde applicaties!
+screen.welcome.instructions=Om verder te gaan dien je jezelf te authenticeren.
+screen.welcome.label.netid.accesskey=g
+screen.welcome.label.netid=<span class="accesskey">G</span>ebruikersnaam:
+screen.welcome.label.password=<span class="accesskey">W</span>achtwoord:
+screen.welcome.label.password.accesskey=w
+screen.welcome.label.warn=<span class="accesskey">V</span>raag toestemming vooraleer me ingelogd door te sturen naar andere sites.
+screen.welcome.label.warn.accesskey=v
+screen.welcome.button.login=LOGIN
+screen.welcome.button.clear=CLEAR
+
+#Confirmation Screen Messages
+screen.confirmation.message=<a href="{0}">Doorgaan naar de applicatie.</a>
+
+#Generic Success Screen Messages
+screen.success.header=Succesvol ingelogd.
+screen.success.success=Je bent ingelogd bij de Central Authentication Service.
+screen.success.security=Voor de veiligheid moet je uitloggen en je browser sluiten wanneer je geen toegang meer nodig hebt tot afgeschermde applicaties!
+
+#Logout Screen Messages
+screen.logout.header=Succesvol uitgelogd.
+screen.logout.success=Je bent nu uitgelogd bij de Central Authentication Service.
+screen.logout.security=Voor de veiligheid dien je je browser nu af te sluiten.
+
+
+
+username.required=Gelieve een gebruikersnaam in te vullen.
+password.required=Gelieve een wachtwoord in te vullen.
+error.authentication.credentials.bad=De combinatie van gebruikersnaam en wachtwoord was niet juist.
+error.authentication.credentials.unsupported=De verstuurde identificatiegegevens worden niet ondersteund door CAS.
+
+INVALID_REQUEST_PROXY='pgt' en 'targetService' zijn verplichte parameters.
+INVALID_TICKET_SPEC=Het ticket kwam niet overeen met de specificatie voor validatie. Misschien probeer je een Proxy Ticket te valideren op de Service Ticket validator, of komt "renew true" niet overeen.
+INVALID_REQUEST='service' en 'ticket' zijn verplichte parameters.
+INVALID_TICKET=ticket ''{0}'' is niet gekend.
+INVALID_SERVICE=ticket ''{0}'' komt niet overeen met de opgegeven service.
+
+screen.service.error.header=Geen toegang.
+screen.service.error.message=De applicatie waarvoor je toegang vroeg heeft geen toestemming om deze CAS te gebruiken.

File diff suppressed because it is too large
+ 395 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_pl.properties


+ 46 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_pt_BR.properties

@@ -0,0 +1,46 @@
+#Welcome Screen Messages
+
+
+screen.welcome.welcome=Parab\u00e9ns por colocar o CAS no ar! O autenticador padr\u00e3o usa Nome de Usu\u00e1rio igual a Senha: v\u00e1 em frente e tente!
+screen.welcome.security=Por raz\u00f5es de seguran\u00e7a, por favor deslogue e feche o seu navegador quando terminar de acessar os servi\u00e7os que precisam de autentica\u00e7\u00e3o!
+screen.welcome.instructions=Entre com seu usu\u00e1rio e Senha
+screen.welcome.label.netid=<span class="accesskey">U</span>su\u00e1rio:
+screen.welcome.label.netid.accesskey=u
+screen.welcome.label.password=<span class="accesskey">S</span>enha:
+screen.welcome.label.password.accesskey=s
+screen.welcome.label.warn=<span class="accesskey">A</span>visar anter de logar em outros sites.
+screen.welcome.label.warn.accesskey=a
+screen.welcome.button.login=ENTRAR
+screen.welcome.button.clear=LIMPAR
+
+#Confirmation Screen Messages
+screen.confirmation.message=Clique <a href="{0}">aqui</a> para ir para a aplica\u00e7\u00e3o.
+
+#Generic Success Screen Messages
+screen.success.header=Sucesso ao se logar
+screen.success.success=Voc\u00ea se logou com sucesso no Servi\u00e7o de Autentica\u00e7\u00e3o Central.
+screen.success.security=Por raz\u00f5es de seguran\u00e7a, por favor efetue um Logout e feche seu navegador quando voc\u00ea terminar de acessar os servi\u00e7os que precisam de autentica\u00e7\u00e3o!
+
+#Logout Screen Messages
+screen.logout.header=Sucesso ao se deslogar
+screen.logout.success=Voc\u00ea se deslogou com sucesso no Servi\u00e7o de Autentica\u00e7\u00e3o Central.
+screen.logout.security=Por raz\u00f5es de seguran\u00e7a, feche o seu navegador.
+
+
+screen.service.sso.error.header=Re-Autenti\u00e7\u00e3o Obrigat\u00f3ria para Acessar esse Servi\u00e7o
+screen.service.sso.error.message=Voc\u00ea tentou acessar um servi\u00e7o que necessita de autentica\u00e7\u00e3o sem re-autentica\u00e7\u00e3o. Por favor, tente <a href="{0}">autenticar novamente</a>.
+
+
+username.required=Usu\u00e1rio \u00e9 um campo obrigat\u00f3rio.
+password.required=Senha \u00e9 um campo obrigat\u00f3rio.
+error.authentication.credentials.bad=Usu\u00e1rio ou senha inv\u00e1lidos.
+error.authentication.credentials.unsupported=As credenciais fornecidas n\u00e3o n\u00e3o suportadas pelo CAS.
+
+INVALID_REQUEST_PROXY='pgt' e 'targetService' s\u00e3o par\u00e2metros obrigat\u00f3rios
+INVALID_TICKET_SPEC=O Ticket falhou a valida\u00e7\u00e3o da especifica\u00e7\u00e3o. Possiveis erros incluem tentativa de validar um Proxy Ticket por meio de um validador Service Ticket, ou n\u00e3o estar de acordo com o pedido de renova\u00e7\u00e3o.
+INVALID_REQUEST='service' e 'ticket' s\u00e3o par\u00e2metros obrigat\u00f3rios
+INVALID_TICKET=ticket ''{0}'' n\u00e3o reconhecido
+INVALID_SERVICE=ticket ''{0}'' n\u00e3o casa com o servi\u00e7o fornecido. O servi\u00e7o original era ''{1}'' e o servi\u00e7o fornecido era ''{2}''.
+
+screen.service.error.header=Aplica\u00e7\u00e3o n\u00e3o Autorizada a usar o CAS
+screen.service.error.message=A aplica\u00e7\u00e3o que voc\u00ea tentou autenticar n\u00e3o \u00e9 autorizada a usar o CAS.

+ 51 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_pt_PT.properties

@@ -0,0 +1,51 @@
+#Welcome Screen Messages
+
+
+screen.welcome.welcome=Parab\u00e9ns! O CAS est\u00e1 agora online! O autenticador padr\u00e3o usa o nome de utilizador igual \u221a\u2020 palavra-passe: v\u00e1 em frente e experimente!
+screen.welcome.security=Por quest\u00f5es de seguran\u00e7a, por favor feche o seu browser quando terminar de aceder aos servi\u00e7os que necessitam de autentica\u00e7\u00e3o!
+screen.welcome.instructions=Insira o seu utilizador e respectiva palavra-passe
+screen.welcome.label.netid=<span class="accesskey">U</span>tilizador:
+screen.welcome.label.netid.accesskey=u
+screen.welcome.label.password=<span class="accesskey">P</span>alavra-passe:
+screen.welcome.label.password.accesskey=p
+screen.welcome.label.warn=<span class="accesskey">A</span>vise-me antes de entrar noutros sites.
+screen.welcome.label.warn.accesskey=A
+screen.welcome.button.login=ENTRAR
+screen.welcome.button.clear=LIMPAR
+
+# Blocked Errors Page
+screen.blocked.header=Accesso Bloqueado
+screen.blocked.message=Inseriu a palavra-chave incorrectamente demasiadas vezes. A sua conta foi bloqueada.
+
+#Confirmation Screen Messages
+screen.confirmation.message=Clique <a href="{0}">aqui</a> para ir para a aplica\u00e7\u00e3o.
+
+#Generic Success Screen Messages
+screen.success.header=Sess\u00e3o iniciada com sucesso.
+screen.success.success=A sua sess\u00e3o no Servi\u00e7o de Autentica\u00e7\u00e3o Central foi iniciada com sucesso.
+screen.success.security=Por raz\u00f5es de seguran\u00e7a, por favor fa\u00e7a  Logout e feche o seu browser quando terminar de aceder aos servi\u00e7os que necessitam de autentica\u00e7\u00e3o!
+
+
+#Logout Screen Messages
+screen.logout.header=Sess\u00e3o terminada com sucesso.
+screen.logout.success=A sua sess\u00e3o no Servi\u00e7o de Autentica\u00e7\u00e3o Central foi terminada com sucesso.
+screen.logout.security=Por raz\u00f5es de seguran\u00e7a, por favor feche o seu browser.
+
+
+screen.service.sso.error.header=\u221a\u00e2 necess\u221a\u00b0ria reautentica\u221a\u00df\u221a\u00a3o para aceder a este servi\u221a\u00dfo
+screen.service.sso.error.message=Voc\u221a\u2122 tentou o acesso a um servi\u221a\u00dfo que requer reautentica\u221a\u00df\u221a\u00a3o sem a efectuar. Por favor tente <a href="{0}">autenticar-se novamente</a>.
+
+
+username.required=Utilizador \u221a\u00a9 um campo obrigat\u221a\u2265rio.
+password.required=Palavra-passe \u221a\u00a9 um campo obrigat\u221a\u2265rio.
+error.authentication.credentials.bad=Utilizador ou palavra-passe inv\u221a\u00b0lidos.
+error.authentication.credentials.unsupported=As credenciais fornecidas n\u221a\u00a3o s\u221a\u00a3o suportadas pelo Servi\u221a\u00dfo de Autentica\u221a\u00df\u221a\u00a3o Central.
+
+INVALID_REQUEST_PROXY=Os par\u221a\u00a2metros 'pgt' e 'targetService' s\u221a\u00a3o obrigat\u221a\u2265rios
+INVALID_TICKET_SPEC=O Ticket falhou a valida\u221a\u00df\u221a\u00a3o de especifica\u221a\u00df\u221a\u00a3o. Poder\u221a\u00a3o ser causas a tentativa de validar um Proxy Ticket atr\u221a\u00b0v\u221a\u00a9s de um validador Service Ticket ou n\u221a\u00a3o estar de acordo com o pedido de renova\u221a\u00df\u221a\u00a3o.
+INVALID_REQUEST=Os par\u221a\u00a2metros 'service' e 'ticket' s\u221a\u00a3o obrigat\u221a\u2265rios
+INVALID_TICKET=ticket ''{0}'' n\u221a\u00a3o reconhecido
+INVALID_SERVICE=ticket ''{0}'' n\u221a\u00a3o coincide com o servi\u221a\u00dfo fornecido. O servi\u221a\u00dfo original foi ''{1}'' e o servi\u221a\u00dfo fornecido foi ''{2}''.
+
+screen.service.error.header=Aplica\u221a\u00df\u221a\u00a3o n\u221a\u00a3o autorizada a usar o Servi\u221a\u00dfo de Autentica\u221a\u00df\u221a\u00a3o Central
+screen.service.error.message=A aplica\u221a\u00df\u221a\u00a3o onde se tentou autenticar n\u221a\u00a3o est\u221a\u00b0 autorizada a usar o Servi\u221a\u00dfo de Autentica\u221a\u00df\u221a\u00a3o Central

File diff suppressed because it is too large
+ 88 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_ru.properties


+ 180 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_sk.properties

@@ -0,0 +1,180 @@
+screen.welcome.welcome=Vitajte v CAS - Central Authentication Service
+screen.welcome.security=Z bezpečnostných dôvodov sa, prosím, <a href="logout">odhláste</a> a ukončite prácu s webovým prehliadačom, ak ste ukončili prácu so službami vyžadujúcimi autentifikáciu!
+screen.welcome.instructions=Zadajte Vaše používateľské meno a heslo
+screen.welcome.label.netid=<span class="accesskey">M</span>eno:
+screen.welcome.label.netid.accesskey=m
+screen.welcome.label.password=<span class="accesskey">H</span>eslo:
+screen.welcome.label.password.accesskey=h
+screen.welcome.label.publicstation=Som na verejnej pracovnej stanici.
+screen.welcome.label.warn=<span class="accesskey">V</span>arovať pred prihlásením do iných služieb.
+screen.welcome.label.warn.accesskey=v
+screen.welcome.label.warnremove=Neupozorňovať opakovane
+screen.welcome.button.login=PRIHLÁSIŤ
+screen.welcome.button.logout=ODHLÁSIŤ
+screen.welcome.button.loginwip=Overenie hesla...
+screen.welcome.button.register=Registrovať
+screen.welcome.button.print=Vytlačiť
+screen.welcome.button.clear=VYMAZAŤ
+
+screen.welcome.label.loginwith=Alebo sa prihláste pomocou:
+screen.cookies.disabled.title=Cookies v prehliadači sú zakázané
+screen.cookies.disabled.message=Váš browser nepodporuje cookies. Single Sign On NEBUDE FUNGOVAŤ.
+
+screen.pm.button.submit=OK
+screen.pm.button.cancel=ZRUŠIŤ
+screen.pm.button.forgotpwd=<a href="https://pwd.example.org">Zabudli ste heslo? </a>
+screen.pm.button.resetPassword=Zmeniť heslo
+screen.pm.reset.username=Používateľské meno:
+screen.pm.reset.heading=Neúspešná zmena hesla
+screen.pm.reset.message=Nepodarilo sa vykonať zmenu hesla.
+screen.pm.reset.qstitle=Odpovedzte bezpečnostné otázky
+screen.pm.reset.qsmsg=Vitajte <strong>{0}</strong>. Pred zmenou hesla musíte odpovedať nasledovné bezpečnostné otázky.
+screen.pm.reset.sentInstructions=Čoskoro by ste mali dostať e-mail na zmenu Vášho hesla. Tieto pokyny sú časovo obmedzené.
+screen.pm.reset.sent=Pokyny na zmenu hesla boli úspešne odoslané.
+screen.pm.reset.title=Zmeňte Vaše heslo
+screen.pm.reset.instructions=Zadajte Vaše používateľské meno, Pošleme Vám e-mail s pokynmi na zmenu hesla.
+screen.aup.button.accept=PRIJAŤ
+screen.aup.button.cancel=ZRUŠIŤ
+
+screen.nonsecure.title=Nezabezpečené spojenie
+screen.nonsecure.message=Pristupujete k serveru CAS cez nezabezpečené spojenie. Single Sign On NEBUDE FUNGOVAŤ. Ak chcete aby single sign on fungovalo, musíte sa prihlásiť cez HTTPS.
+
+screen.defaultauthn.title=Statická autentifikácia
+screen.defaultauthn.heading=CAS je nakonfigurovaný na akceptovanie pevne definovaného zoznamu používateľov. Upozorňujeme, že toto nastavenie je vhodné LEN pre demonštračné účely.
+logo.title=Prechod na domovskú stránku
+copyright=Copyright &copy; 2005&ndash;2015 Apereo, Inc.
+screen.capslock.on = Klávesa CAPSLOCK je zapnutá!
+
+screen.button.continue=Pokračovať
+screen.post.response.message=Budete presmerovaní na {0}.
+# Remember-Me Authentication
+screen.rememberme.checkbox.title=Zapamätať si ma
+
+screen.gua.confirm.message=Ak nespoznávate tento obrázok, nepokračujte.
+# Blocked Errors Page
+screen.blocked.header=Prístup zamietnutý
+screen.blocked.message=Vložili ste viackrát nesprávne heslo. Vaše prihlásenie je dočasne zablokované.
+AbstractAccessDecisionManager.accessDenied=Nie ste oprávnený k prístupu k tomuto zdroju. Pre viac informácií kontaktujte administrátora.
+
+#Confirmation Screen Messages
+screen.confirmation.message=Kliknite <a href\="{0}">sem</a> pre prístup k aplikácii.
+
+screen.authentication.warning=Prihlásenie sa podarilo s varovaním
+#Generic Success Screen Messages
+screen.success.header=Prihlásenie bolo úspešné
+screen.success.success= {0}, práve ste sa úspešne prihlásili do CAS.
+screen.success.security=Ak ste ukončili prácu, z bezpečnostných dôvodov prosím <a href="logout">odhláste sa</a> a ukončite prácu s prehliadačom.
+
+screen.logout.confirm.header=Chcete sa odhlásiť úplne?
+screen.logout.confirm.text=Aplikácia Vás presmerovala do Central Authentication Service \
+  pre úplné odhlásenie. Ak sa rozhodnete odhlásiť, budú po Vás opäť požadované prihlasovacie údaje \
+  pri prístupe ku chránenýn aplikáciám.<p><p><br>Chcete pokračovať v odhlásení?
+#Logout Screen Messages
+screen.logout.header=Odhlásenie bolo úspešné
+screen.logout.success=Úspešne ste sa odhlásili z CAS. Môžete sa <a href="login">prihlásiť</a> znova.
+screen.logout.fc.success=Úspešne ste sa odhlásili z CAS. Môžete sa <a href="login">prihlásiť</a> znova. Keďže je nastavené jednotné odhlásenie\
+  nasledujúce aplikácie sú <strong>upozornené</strong>, aby Vás odhlásili a ukončili sedenie. Upozorňujeme, že táto akcia nezaručuje \
+  odhlásenie, pretože je na apilkáciách samotných, aby správne implementovali odhlásenie.
+screen.logout.security=Z bezpečnostných dôvodov ukončite prácu s prehliadačom.
+
+
+screen.service.sso.error.header=Na prístup k službe je nutná opakovaná autentifikácia
+screen.service.sso.error.message=Pokúsili ste sa o prístup k službe, ktorá vyžaduje autentifkáciu bez opätovnej autentifikácie.  Prosím skúste sa <a href\="{0}">autentifikovať znovu</a>.
+screen.service.required.message=Pokúsili ste sa autentifikovať bez zadania cieľovej aplikácie. Prosím preverte požiadavku a skúste znovu.
+
+captchaError=reCAPTCHA kontrola bola neúspešná.
+username.required=Meno používateľa je povinné pole.
+password.required=Heslo je povinné pole.
+
+confirmedPassword.required=Heslo je potrebné zadať znova.
+pm.passwordsMustMatch=Zadané heslá sa musia zhodovať.
+pm.passwordFailedCriteria=Zadané heslo nespĺňa podmienky bezpečnostnej politiky. Prosím, skúste znova.
+pm.updateFailure=Heslo sa nepodarilo zmeniť. Prosím, skúste znova.
+# Authentication failure messages
+authenticationFailure.AccountDisabledException=Tento používateľský účet bol deaktivovaný.
+authenticationFailure.AccountLockedException=Tento používateľský účet bol uzamknutý.
+authenticationFailure.CredentialExpiredException=Vaše heslo je expirované.
+authenticationFailure.InvalidLoginLocationException=Z tejto pracovnej stanice nie je možné sa prihlásiť.
+authenticationFailure.InvalidLoginTimeException=Váš účet má v tomto čase zakázaný prístup.
+authenticationFailure.AccountNotFoundException=Nesprávne používateľské meno alebo heslo.
+authenticationFailure.FailedLoginException=Nesprávne používateľské meno alebo heslo.
+authenticationFailure.AccountPasswordMustChangeException=Vaše heslo je už neplatné a musíte ho zmeniť.
+authenticationFailure.UnauthorizedServiceForPrincipalException=Prístup na službu nemáte povolený.
+authenticationFailure.UNKNOWN=Nesprávne používateľské meno alebo heslo.
+
+authenticationFailure.AuthenticationException=Nesprávne používateľské meno alebo heslo. Pokus o prihlásenie bol neúspešný.
+INVALID_REQUEST_PROXY=Vaša požiadavka je nekorektne formulovaná. Prosím uistite sa že všetky požadované parametre sú v požiadavke a sú správne formátované.
+INVALID_TICKET_SPEC=Ticket neprešiel validáciou. Možná príčina je validácia Proxy Ticketu cez Service Ticket validator.
+INVALID_REQUEST='service' a 'ticket' parametre sú povinné
+INVALID_AUTHENTICATION_CONTEXT=Požiadavka na overenie pre [''{0}''] nemôže byť potvrdená, pretože je nerozpooznaná alebo neúplná.
+INVALID_TICKET=Ticket ''{0}'' nebol rozpoznaný
+INVALID_PROXY_GRANTING_TICKET=PGT bol pre tento ST už vygenerovaný. Nemôžeme poskytnúť viac ako jeden PGT pre ST.
+INVALID_SERVICE=Ticket ''{0}'' nezodpovedá dodanej službe. Pôvodná služba bola ''{1}'' a dodaná bola ''{2}''.
+INVALID_PROXY_CALLBACK=Dodaný proxy callback url ''{0}'' nemôže byť authentifikovaný.
+UNAUTHORIZED_SERVICE_PROXY=Dodaná služba ''{0}'' nie je autorizovaná na použitie CAS autentifikácie.
+
+UNSATISFIED_AUTHN_POLICY=Prístup ku službe bol zamietnutý pre nesplnenie bezpečnostnej politiky.
+screen.service.error.header=Aplikácia nie je autorizovaná na použitie CAS
+service.not.authorized.missing.attr=Nie ste autorizovaný na prístup k aplikácii pretože Vaše používateľský účet \
+neobsahuje privilégiá požadované serverom CAS na autentifikáciu do tejto služby. Prosím oboznámte Vášho správcu systému.
+screen.service.error.message=Aplikácia do ktorej sa pokúšate prihlásiť nie je autorizovaná na použitie týmto CAS serverom.
+screen.service.empty.error.message=Register služieb serveru CAS je prázdny a neobsahuje definície služieb. \
+Aplikácia ktorá sa chce autentifikovať serverom CAS musí byť explicitne definovaná v registri služieb.
+
+# Password policy
+password.expiration.warning=Vaše heslo expiruje za {0} deň/dní. Prosím <a href="{1}">zmeňte Vaše heslo</a> teraz.
+password.expiration.loginsRemaining=Máte {0} prístup(ov) k dispozícii, kým <strong>MUSÍTE</strong> zmeniť Vaše heslo.
+screen.accountdisabled.heading=Tento používateľský účet bol deaktivovaný.
+screen.accountdisabled.message=Prosím kontaktujte systémového administrátora na opätovné získanie prístupu.
+screen.accountlocked.heading=Tento používateľský účet bol uzamknutý.
+screen.accountlocked.message=Prosím kontaktujte systémového administrátora na opätovné získanie prístupu.
+screen.expiredpass.heading=Vaše heslo expirovalo.
+screen.expiredpass.message=Prosím <a href\="{0}">zmeňte svoje heslo</a>.
+screen.mustchangepass.heading=Je nutné zmeniť Vaše heslo.
+screen.mustchangepass.message=Prosím <a href="{0}">zmeňte svoje heslo</a>.
+screen.badhours.heading=Váš účet v tomto čase nemá povolený prístup.
+screen.badhours.message=Prosím skúste znovu neskôr.
+screen.authnblocked.heading=Pokus o prihlásenie bol zamietnutý.
+screen.authnblocked.message=Váš pokus o prihlásenie z aktuálneho zariadenia nie je dôveryhodný a povolený.
+screen.risk.authnblocked.heading=Pokus o prihlásenie je zablokovaný.
+screen.risk.authnblocked.message=Váš pokus o prihlásenie nie je dôveryhodný a povolený z tejto pracovnej stanice.
+screen.badworkstation.heading=Nie je možné sa prihlásiť z tejto pracovnej stanice.
+screen.badworkstation.message=Na opätovné získanie prístupu prosím kontaktujte administrátora.
+
+screen.pm.success.header=Úspešná zmena hesla
+screen.pm.success.message=Vaše heslo bolo úspešne zmenené.
+screen.pm.confirmpsw=Potvrďte heslo:
+screen.pm.enterpsw=Zadajte heslo:
+screen.pac4j.unauthz.pagetitle=Nepovolený prístup
+screen.pac4j.unauthz.gotoapp=Späť na aplikáciu
+screen.pac4j.unauthz.login=Späť na CAS
+screen.pac4j.unauthz.heading=Nepotvrdený prístup
+screen.pac4j.unauthz.message=Požiadavka o prihlásenie bola odmientnutá/zrušená, alebo alebo poskytovateľ identity odmietol prístup pre interné pravidlá.
+screen.authentication.gauth.register=Vaše konto nie je registrované. Použite nastavenia nižšie pre registráciu zariadenia v CAS.
+screen.authentication.gauth.key=Tajný kód pre registráciu je {0}
+# OAuth
+screen.oauth.confirm.header=Autorizácia
+screen.oauth.confirm.message=Chcete povoliť prístup k Vášmu kompletnému profilu pre "{0}" ?
+screen.oauth.confirm.allow=Povoliť
+
+screen.oauth.confirm.deny=Zakázať
+cas.oauth.confirm.pagetitle=Povoľte prístup
+# Unavailable
+screen.unavailable.heading=CAS nie je schopný spracovať požiadavku: "{0}:{1}"
+screen.unavailable.message=Pri spracovaní požiadavky nastala chyba. Prosím informujte podporu alebo skúste znovu.
+cas.sessions.ajax.error=Nastala chyba. Zopakujte, prosím, Vašu požiadavku.
+cas.login.pagetitle=Prihlásenie
+cas.login.resources.header=Odkazy na CAS zdroje
+cas.login.resources.wiki=Dokumentácia
+cas.mfa.duologin.pagetitle=DuoSecurity autentifikácia
+cas.mfa.googleauth.pagetitle=Google autentifikácia
+cas.mfa.googleauth.label.token=Token:
+cas.mfa.azure.pagetitle=AZURE autentifikácia
+cas.mfa.radius.pagetitle=RADIUS autentifikácia
+cas.mfa.yubikey.pagetitle=YubiKey Autentifikácia
+cas.mfa.authy.pagetitle=Authy autentifikácia
+cas.mfa.registerdevice.label.title=Restrácia zariadenia
+cas.mfa.registerdevice.label.intro=Pomenujte toto zariadenie
+cas.mfa.registerdevice.pagetitle=Registrácia zariadenia
+cas.mfa.registerdevice.label.name=Meno
+cas.mfa.registerdevice.button.register=Registrovať

+ 43 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_sl.properties

@@ -0,0 +1,43 @@
+#Welcome Screen Messages
+
+screen.welcome.welcome=Dobrodo\u0161li v ARNES CAS online\!  Uporabite uporabni\u0161ko ime in geslo, ki vam ga je dodeli administrator ARNES organizacije
+screen.welcome.security=Zaradi varnostnih razlogov, prosimo, da naredite odjavo in zaprete brskalnik, ko zapustite spletni vir, ki je zahteval va\u0161o avtentikacijo.
+screen.welcome.instructions=Vpi\u0161ite va\u0161o uporabni\u0161ko ime(eduprincipalName\: ime@arnes.si) in geslo.
+screen.welcome.label.netid=<span class\="accesskey">edu</span>PersonPrincipalName\:
+screen.welcome.label.netid.accesskey=n
+screen.welcome.label.password=<span class\="accesskey">G</span>eslo\:
+screen.welcome.label.password.accesskey=p
+screen.welcome.label.warn=<span class\="accesskey">O</span>pozori me, ko naredim novo prijavo v drugi spletni vir.
+screen.welcome.label.warn.accesskey=w
+screen.welcome.button.login=Prijava
+screen.welcome.button.clear=ZBRI\u0160I
+
+#Confirmation Screen Messages
+screen.confirmation.message=Klikni <a href\="{0}">tukaj</a> za vstop v aplikacijo.
+
+#Generic Success Screen Messages
+screen.success.header=Prijava uspela
+screen.success.success=Uspe\u0161no ste se prijavili v Centralno Avtenikacijsko Storitev.
+screen.success.security=Zaradi varnostnih razlogov, prosimo, da naredite odjavo in zaprete brskalnik, ko zapustite spletni vir, ki je zahteval va\u0161o avtentikacijo.
+
+#Logout Screen Messages
+screen.logout.header=Odjava uspela
+screen.logout.success=Uspe\u0161no ste se prijavili v Centralno Avtenikacijsko Storitev.
+screen.logout.security=Zaradi varnostnih razlogov zaprite brskalnik
+
+
+#Service Error Messages
+screen.service.error.header=Ne avtorizerana Storitev
+screen.service.error.message=Vstopiti ste hoteli do o spletne storitve nima dovoljenja do uporabe CAS storitve.
+
+
+username.required=Uporabni\u0161ko ime je nujno vpisati\!
+password.required=Geslo je nujno vpisati\!
+error.authentication.credentials.bad=Veredostojnost, ki ste jo vpisali ne moremo dolo\u010Diti, da je pristno\!
+error.authentication.credentials.unsupported=Veredostojnost, ki ste jo vpisali ni podprto v CAS-u\!
+
+INVALID_REQUEST_PROXY='pgt' in 'targetService' parametra sta oba nujna\!
+INVALID_TICKET_SPEC=Ne uspe\u0161na validacija zahtevka. Mo\u017Ene napake so nastale pri vklju\u010Ditvi validacije v Proxy Ticket preko Service Ticket validacije.
+INVALID_REQUEST='service' in 'ticket' parametra sta oba nujna\!
+INVALID_TICKET=zahtevek ''{0}'' ni prepoznana
+INVALID_SERVICE=zahtevek ''{0}''  se ne ujema priskrbljeno storitvijo

+ 50 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_sv.properties

@@ -0,0 +1,50 @@
+#Author: Fredrik Nilsson http://www.infoflexconnect.se
+#Updated 2006-08-29: Pål Axelsson & Veronika Berglund IT Support Department at Uppsala University http://www.uu.se
+#Updated 2007-06-21: Pål Axelsson IT Support Department at Uppsala University http://www.uu.se
+
+#Welcome Screen Messages
+
+
+screen.welcome.welcome=Välkommen till den centrala autentiseringstjänsten CAS. När du installerat men ännu inte konfigurerat CAS kan du autentisera genom att ange samma text som både användaridentitet och lösenord för att prova CAS.
+screen.welcome.security=Av säkerhetsskäl bör du logga ut och stänga webbläsaren när du är färdig med webbtjänsterna som kräver inloggning.
+screen.welcome.instructions=Ange din användaridentitet och ditt lösenord.
+screen.welcome.label.netid=<span class="accesskey">A</span>nvändarid:
+screen.welcome.label.netid.accesskey=a
+screen.welcome.label.password=<span class="accesskey">L</span>ösenord:
+screen.welcome.label.password.accesskey=l
+screen.welcome.label.warn=<span class="accesskey">V</span>arna mig innan jag loggar på en annan webbtjänst.
+screen.welcome.label.warn.accesskey=v
+screen.welcome.button.login=LOGGA IN
+screen.welcome.button.clear=RENSA
+
+#Confirmation Screen Messages
+screen.confirmation.message=Klicka <a href="{0}">här</a> för att komma till webbtjänsten.
+
+#Generic Success Screen Messages
+screen.success.header=Inloggningen lyckades
+screen.success.success=Du har loggat in i den centrala autentiseringstjänsten CAS.
+screen.success.security=Av säkerhetsskäl bör du logga ut och stänga webbläsaren när du är färdig med webbtjänsterna som kräver inloggning.
+
+#Logout Screen Messages
+screen.logout.header=Du har loggat ut!
+screen.logout.success=Du har loggat ut från den centrala autentiseringstjänsten CAS.
+screen.logout.security=Av säkerhetsskäl bör du stänga din webbläsare.
+
+
+screen.service.sso.error.header=Du måste logga in igen för att använda denna webbtjänst
+screen.service.sso.error.message=Du försökte använda en webbtjänst som kräver att du loggar in igen för att använda den. <a href="{0}">Logga in igen</a>!
+
+
+username.required=Användaridentitet är en obligatoriskt uppgift.
+password.required=Lösenord är en obligatoriskt uppgift.
+error.authentication.credentials.bad=Inloggningsuppgifterna du angav kunde inte valideras!
+error.authentication.credentials.unsupported=Inloggningsuppgifterna du angav kan inte hanteras av CAS.
+
+INVALID_REQUEST_PROXY=Både 'pgt' och 'targetService' är obligatoriska parametrar.
+INVALID_TICKET_SPEC=Ticket-valideringen misslyckades. Möjliga fel skulle kunna vara att försöka validera en Proxy Ticket via en validator för Service Ticket, eller att en ny inloggning inte genomfördes trots begäran.
+INVALID_REQUEST=Både 'service' och 'ticket' är obligatoriska parametrar.
+INVALID_TICKET=ticket ''{0}'' känns inte igen.
+INVALID_SERVICE=ticket ''{0}'' överenstämmer inte med angiven webbtjänst.
+
+screen.service.error.header=Ej auktoriserad webbtjänst
+screen.service.error.message=Webbtjänsten du försökter ansluta till är ej auktoriserad att använda den centrala autentiseringstjänsten CAS.

+ 47 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_tr.properties

@@ -0,0 +1,47 @@
+# Author : Mert Caliskan <mcaliskan@gmail.com>
+# http://www.jroller.com/mert
+
+#Welcome Screen Messages
+
+screen.welcome.welcome=Tebrikler!, CAS'\u0131 \u00e7al\u0131\u015f\u0131r hale getirdiniz. Haz\u0131rdaki kimliklendirme mekanizmas\u0131 kullan\u0131c\u0131 ad\u0131 ve parola ayn\u0131 oldu\u011fu durumlarda giri\u015fe izin vermektedir. Hemen deneyebilirsiniz.
+screen.welcome.security=G\u00fcvenli\u011finiz i\u00e7in, i\u015finiz bittikten sonra kulland\u0131\u011f\u0131n\u0131z uygulamalardan \u00e7\u0131k\u0131\u015f yap\u0131n\u0131z ve taray\u0131c\u0131n\u0131z\u0131 kapat\u0131n\u0131z.
+screen.welcome.instructions=Kullan\u0131c\u0131 ad\u0131 ve parolan\u0131z\u0131 giriniz
+screen.welcome.label.netid=<span class="accesskey">K</span>ullan\u0131c\u0131 Ad\u0131:
+screen.welcome.label.netid.accesskey=k
+screen.welcome.label.password=<span class="accesskey">P</span>arola:
+screen.welcome.label.password.accesskey=p
+screen.welcome.label.warn=Di\u011fer sitelere girmeden \u00f6nce beni <span class="accesskey">u</span>yar.
+screen.welcome.label.warn.accesskey=u
+screen.welcome.button.login=G\u0130R\u0130\u015e
+screen.welcome.button.clear=TEM\u0130ZLE
+
+#Confirmation Screen Messages
+screen.confirmation.message=Uygulamaya eri\u015fmek i\u00e7in <a href="{0}">buraya</a> t\u0131klay\u0131n\u0131z.
+
+#Generic Success Screen Messages
+screen.success.header=Oturum ba\u015far\u0131yla a\u00e7\u0131ld\u0131.
+screen.success.success=Merkezi Kimliklendirme Servisi'ne ba\u015far\u0131l\u0131 bir \u015fekilde giri\u015f yapt\u0131n\u0131z.
+screen.success.security=G\u00fcvenlik nedenlerinden dolay\u0131, uygulamalar\u0131n kullan\u0131m\u0131 bittikten sonra sistemden \u00e7\u0131k\u0131\u015f yap\u0131p, taray\u0131c\u0131n\u0131z\u0131 kapat\u0131n\u0131z.
+
+#Logout Screen Messages
+screen.logout.header=Oturum ba\u015far\u0131yla kapat\u0131ld\u0131.
+screen.logout.success=Merkezi Kimliklendirme Servisi'nden ba\u015far\u0131l\u0131 bir \u015fekilde \u00e7\u0131k\u0131\u015f yapt\u0131n\u0131z.
+screen.logout.security=G\u00fcvenlik nedenlerinden dolay\u0131, taray\u0131c\u0131n\u0131z\u0131 kapan\u0131t\u0131z.
+
+screen.service.sso.error.header=Bu servise eri\u015fim i\u00e7in tekrar kimliklendirme gerekmektedir.
+screen.service.sso.error.message=Bir servise ard\u0131\u015f\u0131k kimlik onay\u0131 yaparak eri\u015fmeye \u00e7al\u0131\u015ft\u0131n\u0131z. Onay i\u00e7in l\u00fctfen tekrar <a href="{0}">t\u0131klay\u0131n\u0131z</a>.
+
+
+username.required=Kullan\u0131c\u0131 Ad\u0131 girilmesi gerekli bir aland\u0131r.
+password.required=Parola girilmesi gerekli bir aland\u0131r.
+error.authentication.credentials.bad=Kullan\u0131c\u0131 Kodu veya Parola bilginizde yanl\u0131\u015fl\u0131k var. L\u00fctfen kontrol edip tekrar deneyiniz.
+error.authentication.credentials.unsupported=Sa\u011flad\u0131\u011f\u0131n\u0131z kimliklendirme bilgileri Merkezi Kimliklendirme Sistemi taraf\u0131ndan tan\u0131nmamaktad\u0131r.
+
+INVALID_REQUEST_PROXY='pgt' ve 'targetService' parametrelerinin her ikisi birden gereklidir.
+INVALID_TICKET_SPEC=Bilet do\u011frulama ba\u015far\u0131s\u0131z oldu. Olas\u0131 hatalar, servis bilet do\u011frulay\u0131c\u0131 ile Vekil (Proxy) bilet do\u011frulamak veya do\u011fru yenileme iste\u011fi kural\u0131na uyulmamas\u0131 olabilir.
+INVALID_REQUEST='service' ve 'ticket' parametrelerinin her ikisi birden gereklidir.
+INVALID_TICKET=Tan\u0131ms\u0131z bilet: ''{0}''
+INVALID_SERVICE=Bilet ''{0}'' belirtilen servis ile e\u015fle\u015fmiyor.  As\u0131l servis: ''{1}'', belirtilen servis: ''{2}''.
+
+screen.service.error.header=Uygulama, Merkezi Kimliklendirme Servisi'ni kullanmak i\u00e7in yetkilendirilmemi\u015f.
+screen.service.error.message=Kimliklendirme onay\u0131 yap\u0131lmaya \u00e7al\u0131\u015f\u0131lan uygulama, Merkezi Kimliklendirme Servisi'ni kullanmak i\u00e7in yetkilendirilmemi\u015f.

File diff suppressed because it is too large
+ 84 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_uk.properties


+ 48 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_ur.properties

@@ -0,0 +1,48 @@
+#Author: Faizan Ahmed (Rutgers University)
+#Since 3.0.5
+
+#Welcome Screen Messages
+
+
+screen.welcome.welcome=CAS ko online lany par Mubark baad! Default Tasdeek karney wala aap ki tasdeek iss soorat main karay ga agar password wo hi hoo jo user name hay. Aiye, aur try ki jiyay.
+screen.welcome.security=Security ki wajoohat ki bina par aap mehrbani farma kar apnay web browser say Log Out aur Exit zaroor ki jiyay jub aap aisi services isstamal kar chookay hoon jo tasdeek chahti hoon.
+screen.welcome.instructions=Apni Apereo ki NetID aur Password enter ki jiyay.
+screen.welcome.label.netid=<span class="accesskey">N</span>etID:
+screen.welcome.label.netid.accesskey=n
+screen.welcome.label.password=<span class="accesskey">P</span>assword:
+screen.welcome.label.password.accesskey=p
+screen.welcome.label.warn=Mujay doosri sites main login karnay say pahlay <span class="accesskey">K</span>habardar karain.
+screen.welcome.label.warn.accesskey=k
+screen.welcome.button.login=LOGIN
+screen.welcome.button.clear=CLEAR
+
+#Confirmation Screen Messages
+screen.confirmation.message=<a href="{0}">Yahan Click</a> karain agar app application main dakhil hona chahtay hain.
+
+#Generic Success Screen Messages
+screen.success.header=Log In Kamyab
+screen.success.success=Aap kamyabi say Centeral Authentication Service main login hoo chokay hain.
+screen.success.security=Security ki wajoohat ki bina par jub aap aisi services isstamal kar chookay hoon jo tasdeek chahti hoon tou baraye mehrbani apnay web browser say Log Out aur Exit zaroor ki jiyay
+
+#Logout Screen Messages
+screen.logout.header=Logout Kamyab
+screen.logout.success=Aap kamyabi say Centeral Authentication Service say logout hoo chokay hain.
+screen.logout.security=Security ki wajoohat ki bina par apnay web browser say exit karain.
+
+
+
+#Service Error Messages
+screen.service.error.header=Bay Sanud Service
+screen.service.error.message=Aap jiss service kay liay tasdeek ki kooshush kar rahay thay woo service CAS istamal karnay ki mijaz nahi.
+
+
+username.required=Username ka khana por karna lazmi hay.
+password.required=Password ka khana por karna lazmi hay.
+error.authentication.credentials.bad=Aap ka mohya kia howa waseeka (parteet puter) ki tasdeek karna momkin nahi.
+error.authentication.credentials.unsupported=Aap kay mohya kiay howay waseeka (parteet puter) ko CAS support nahi karta.
+
+INVALID_REQUEST_PROXY='pgt' aur 'targetService' parameters doonon lazmi hain.
+INVALID_TICKET_SPEC=Ticket toseek ki tasreeh par poora nahi utri. Momkin gultiyoon main shamil, hoo sakta hay kay proxy ticket ki toseek ki kooshish Service ticket kay toseek kaninda say ki gai hoo, yaa 'renew true request' say iss ki mitabkat na hooti hoo.
+INVALID_REQUEST='service' aur 'ticket' parameters doonon lazmi hain.
+INVALID_TICKET=ticket ''{0}'' ki shnakhat nahi hoo saki.
+INVALID_SERVICE=ticket ''{0}'' ki mitabkat mohya karda service say nahi hoo saki.

File diff suppressed because it is too large
+ 241 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_vi.properties


+ 89 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_zh_CN.properties

@@ -0,0 +1,89 @@
+#Welcome Screen Messages
+
+screen.welcome.welcome=\u6b22\u8fce\u6765\u5230\u4e2d\u592e\u8ba4\u8bc1\u7cfb\u7edf\u3002\u9ed8\u8ba4\u7684\u8ba4\u8bc1\u5904\u7406\u5668\u652f\u6301\u90a3\u4e9b\u7528\u6237\u540d\u7b49\u4e8e\u5bc6\u7801\u7684\u8d26\u53f7\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u8bd5\u8bd5\u770b\u3002
+screen.welcome.security=\u51FA\u4E8E\u5B89\u5168\u8003\u8651\uFF0C\u4E00\u65E6\u60A8\u8BBF\u95EE\u8FC7\u90A3\u4E9B\u9700\u8981\u60A8\u63D0\u4F9B\u51ED\u8BC1\u4FE1\u606F\u7684\u5E94\u7528\u65F6\uFF0C\u8BF7\u64CD\u4F5C\u5B8C\u6210\u4E4B\u540E<a href="logout">\u767B\u51FA</a>\u5E76\u5173\u95ED\u6D4F\u89C8\u5668\u3002
+screen.welcome.instructions=\u8bf7\u8f93\u5165\u60a8\u7684\u7528\u6237\u540d\u548c\u5bc6\u7801.
+screen.welcome.label.netid=\u7528\u6237\u540d:
+screen.welcome.label.netid.accesskey=n
+screen.welcome.label.password=\u5bc6\u3000\u7801:
+screen.welcome.label.password.accesskey=p
+screen.welcome.label.warn=\u8f6c\u5411\u5176\u4ed6\u7ad9\u70b9\u524d\u63d0\u793a\u6211\u3002
+screen.welcome.label.warn.accesskey=w
+screen.welcome.button.login=\u767b\u5f55
+screen.welcome.button.clear=\u91cd\u7f6e
+
+logo.title=\u8f6c\u5230Apereo\u7f51\u7ad9\u9996\u9875
+copyright=\u7248\u6743\u6240\u6709 &copy; 2005&ndash;2012 Apereo, Inc. \u4fdd\u7559\u5168\u90e8\u6743\u5229\u3002
+
+# Blocked Errors Page
+screen.blocked.header=\u8bbf\u95ee\u88ab\u62d2\u7edd
+screen.blocked.message=\u8f93\u9519\u5bc6\u7801\u6b21\u6570\u592a\u591a\uff0c\u8d26\u53f7\u88ab\u9501\u5b9a\u3002
+
+#Confirmation Screen Messages
+screen.confirmation.message=\u5355\u51fb <a href="{0}">\u8fd9\u91cc</a> \uff0c\u4fbf\u80fd\u591f\u8bbf\u95ee\u5230\u76ee\u6807\u5e94\u7528\u3002
+
+#Generic Success Screen Messages
+screen.success.header=\u767b\u5f55\u6210\u529f
+screen.success.success=\u60a8\u5df2\u7ecf\u6210\u529f\u767b\u5f55\u4e2d\u592e\u8ba4\u8bc1\u7cfb\u7edf\u3002
+screen.success.security=\u51FA\u4E8E\u5B89\u5168\u8003\u8651\uFF0C\u4E00\u65E6\u60A8\u8BBF\u95EE\u8FC7\u90A3\u4E9B\u9700\u8981\u60A8\u63D0\u4F9B\u51ED\u8BC1\u4FE1\u606F\u7684\u5E94\u7528\u65F6\uFF0C\u8BF7\u64CD\u4F5C\u5B8C\u6210\u4E4B\u540E<a href="logout">\u767B\u51FA</a>\u5E76\u5173\u95ED\u6D4F\u89C8\u5668\u3002
+
+#Logout Screen Messages
+screen.logout.header=\u6ce8\u9500\u6210\u529f
+screen.logout.success=\u60a8\u5df2\u7ecf\u6210\u529f\u9000\u51faCAS\u7cfb\u7edf\uff0c\u8c22\u8c22\u4f7f\u7528\uff01
+screen.logout.security=\u51fa\u4e8e\u5b89\u5168\u8003\u8651\uff0c\u8bf7\u5173\u95ed\u60a8\u7684\u6d4f\u89c8\u5668\u3002
+
+
+screen.service.sso.error.header=\u5728\u8bbf\u95ee\u5230\u5230\u76ee\u6807\u670d\u52a1\u524d\uff0c\u4f60\u5fc5\u987b\u7ecf\u8fc7\u91cd\u65b0\u8ba4\u8bc1\u7684\u8003\u9a8c
+screen.service.sso.error.message=\u4f60\u6b63\u8bd5\u56fe\u8bbf\u95ee\u8981\u6c42\u91cd\u65b0\u8ba4\u8bc1\u7684\u670d\u52a1\u3002\u8bf7\u5c1d\u8bd5\u8fdb\u884c<a href="{0}">\u518d\u6b21\u8ba4\u8bc1</a>\u3002
+
+
+username.required=\u5fc5\u987b\u5f55\u5165\u7528\u6237\u540d\u3002
+password.required=\u5fc5\u987b\u5f55\u5165\u5bc6\u7801\u3002
+
+# Authentication failure messages
+authenticationFailure.AccountDisabledException=\u8fd9\u4e2a\u8d26\u6237\u88ab\u7981\u7528\u4e86\u3002
+authenticationFailure.AccountLockedException=\u8fd9\u4e2a\u8d26\u6237\u88ab\u4e0a\u9501\u4e86\u3002
+authenticationFailure.CredentialExpiredException=\u4f60\u7684\u5bc6\u7801\u8fc7\u671f\u4e86\u3002
+authenticationFailure.InvalidLoginLocationException=\u4f60\u4e0d\u80fd\u4ece\u8fd9\u4e2a\u5de5\u4f5c\u7ad9\u767b\u5f55\u3002
+authenticationFailure.InvalidLoginTimeException=\u4f60\u7684\u8d26\u6237\u73b0\u5728\u88ab\u7981\u6b62\u767b\u5f55\u4e86\u3002
+authenticationFailure.AccountNotFoundException=\u8ba4\u8bc1\u4fe1\u606f\u65e0\u6548\u3002
+authenticationFailure.FailedLoginException=\u8ba4\u8bc1\u4fe1\u606f\u65e0\u6548\u3002
+authenticationFailure.UNKNOWN=\u8ba4\u8bc1\u4fe1\u606f\u65e0\u6548\u3002
+
+INVALID_REQUEST_PROXY=\u5fc5\u987b\u540c\u65f6\u63d0\u4f9b'pgt'\u548c'targetService'\u53c2\u6570
+INVALID_TICKET_SPEC=\u6821\u9a8c\u7968\u6839\u5931\u8d25\u3002\u60a8\u53ef\u80fd\u91c7\u7528\u670d\u52a1\u7968\u6839\u6765\u6821\u9a8c\u4ee3\u7406\u7968\u6839\uff0c\u6216\u6ca1\u6709\u5c06renew\u8bbe\u4e3atrue\u3002
+INVALID_REQUEST=\u5fc5\u987b\u540c\u65f6\u63d0\u4f9b'service'\u548c'ticket'\u53c2\u6570
+INVALID_TICKET=\u672a\u80fd\u591f\u8bc6\u522b\u51fa\u76ee\u6807 ''{0}''\u7968\u6839
+INVALID_SERVICE=\u7968\u6839''{0}''\u4e0d\u7b26\u5408\u76ee\u6807\u670d\u52a1
+INVALID_PROXY_CALLBACK=\u6240\u63d0\u4f9b\u7684\u4ee3\u7406\u56de\u8c03\u7f51\u5740''{0}''\u4e0d\u80fd\u63d0\u4f9b\u8ba4\u8bc1\u3002
+UNAUTHORIZED_SERVICE_PROXY=\u6240\u63d0\u4f9b\u7684\u670d\u52a1''{0}''\u6ca1\u6709\u6743\u9650\u4f7f\u7528CAS\u4ee3\u7406\u7684\u8ba4\u8bc1\u65b9\u5f0f\u3002
+
+screen.service.error.header=\u672a\u8ba4\u8bc1\u6388\u6743\u7684\u670d\u52a1
+screen.service.error.message=\u4e0d\u5141\u8bb8\u4f7f\u7528CAS\u6765\u8ba4\u8bc1\u60a8\u8bbf\u95ee\u7684\u76ee\u6807\u5e94\u7528\u3002
+screen.service.empty.error.message=CAS\u7684\u670d\u52a1\u8bb0\u5f55\u662f\u7a7a\u7684\uff0c\u6ca1\u6709\u5b9a\u4e49\u670d\u52a1\u3002 \
+\u5e0c\u671b\u901a\u8fc7CAS\u8fdb\u884c\u8ba4\u8bc1\u7684\u5e94\u7528\u7a0b\u5e8f\u5fc5\u987b\u5728\u670d\u52a1\u8bb0\u5f55\u4e2d\u660e\u786e\u5b9a\u4e49\u3002
+
+# Password policy
+password.expiration.warning=\u4f60\u7684\u5bc6\u7801\u4f1a\u5728{0}\u5929\u5185\u8fc7\u671f\u3002\u8bf7\u7acb\u523b<a href="{1}">\u4fee\u6539\u4f60\u7684\u5bc6\u7801</a>\u3002
+password.expiration.loginsRemaining=\u5728<strong>\u5fc5\u987b</strong>\u4fee\u6539\u5bc6\u7801\u4e4b\u524d\uff0c\u4f60\u8fd8\u5269{0}\u6b21\u767b\u5f55\u3002
+screen.accountdisabled.heading=\u8fd9\u4e2a\u8d26\u6237\u5df2\u7ecf\u88ab\u7981\u7528\u4e86\u3002
+screen.accountdisabled.message=\u8bf7\u8054\u7cfb\u7cfb\u7edf\u7ba1\u7406\u5458\u6765\u91cd\u65b0\u83b7\u5f97\u8bbf\u95ee\u6743\u9650\u3002
+screen.accountlocked.heading=\u8fd9\u4e2a\u8d26\u6237\u5df2\u7ecf\u88ab\u9501\u4f4f\u4e86\u3002
+screen.accountlocked.message=\u8bf7\u8054\u7cfb\u7cfb\u7edf\u7ba1\u7406\u5458\u6765\u91cd\u65b0\u83b7\u5f97\u8bbf\u95ee\u6743\u9650\u3002
+screen.expiredpass.heading=\u4f60\u7684\u5bc6\u7801\u5df2\u7ecf\u8fc7\u671f\u4e86\u3002
+screen.expiredpass.message=\u8bf7<a href="{0}">\u4fee\u6539\u4f60\u7684\u5bc6\u7801</a>\u3002
+screen.mustchangepass.heading=\u4f60\u5fc5\u987b\u4fee\u6539\u4f60\u7684\u5bc6\u7801\u3002
+screen.mustchangepass.message=\u8bf7<a href="{0}">\u4fee\u6539\u4f60\u7684\u5bc6\u7801</a>\u3002
+screen.badhours.heading=\u73b0\u5728\u4f60\u7684\u8d26\u6237\u88ab\u7981\u6b62\u767b\u5f55\u4e86\u3002
+screen.badhours.message=\u8bf7\u7a0d\u540e\u518d\u8bd5\u3002
+screen.badworkstation.heading=\u4f60\u4e0d\u80fd\u4ece\u8fd9\u4e2a\u5de5\u4f5c\u7ad9\u767b\u5f55\u3002
+screen.badworkstation.message=\u8bf7\u8054\u7cfb\u7cfb\u7edf\u7ba1\u7406\u5458\u6765\u91cd\u65b0\u83b7\u5f97\u8bbf\u95ee\u6743\u9650\u3002
+
+# OAuth
+screen.oauth.confirm.header=\u6388\u6743
+screen.oauth.confirm.message=\u8981\u6388\u6743"{0}"\u8bbf\u95ee\u4f60\u5168\u90e8\u4e2a\u4eba\u4fe1\u606f\u5417\uff1f
+screen.oauth.confirm.allow=\u5141\u8bb8
+
+# Unavailable
+screen.unavailable.heading=CAS\u65e0\u6cd5\u4f7f\u7528
+screen.unavailable.message=\u5728\u8bd5\u56fe\u5b8c\u6210\u4f60\u7684\u8bf7\u6c42\u65f6\u51fa\u9519\u3002\u8bf7\u901a\u77e5\u4f60\u7684\u6280\u672f\u652f\u6301\u6216\u91cd\u8bd5\u3002

+ 50 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/messages_zh_TW.properties

@@ -0,0 +1,50 @@
+#Welcome Screen Messages
+
+
+screen.welcome.welcome=\u6b61\u8fce\u4f86\u5230\u4e2d\u592e\u8a8d\u8b49\u7cfb\u7d71\u3002\u9ed8\u8a8d\u7684\u8a8d\u8b49\u8655\u7406\u5668\u652f\u6301\u90a3\u4e9b\u7528\u6236\u540d\u7b49\u65bc\u5bc6\u78bc\u7684\u8cec\u865f\uff0c\u958b\u767c\u8005\u53ef\u4ee5\u8a66\u8a66\u770b\u3002
+screen.welcome.security=\u51FA\u65BC\u5B89\u5168\u8003\u616E\uFF0C\u4E00\u65E6\u60A8\u8A2A\u554F\u904E\u90A3\u4E9B\u9700\u8981\u60A8\u63D0\u4F9B\u6191\u8B49\u4FE1\u606F\u7684\u61C9\u7528\u6642\uFF0C\u8ACB\u64CD\u4F5C\u5B8C\u6210\u4E4B\u5F8C<a href="logout">\u767B\u51FA</a>\u4E26\u95DC\u9589\u700F\u89BD\u5668\u3002
+screen.welcome.instructions=\u8acb\u8f38\u5165\u60a8\u7684\u7528\u6236\u540d\u548c\u5bc6\u78bc.
+screen.welcome.label.netid=\u7528\u6236\u540d:
+screen.welcome.label.netid.accesskey=n
+screen.welcome.label.password=\u5bc6\u3000\u78bc:
+screen.welcome.label.password.accesskey=p
+screen.welcome.label.warn=\u8f49\u5411\u5176\u4ed6\u7ad9\u9ede\u524d\u63d0\u793a\u6211\u3002
+screen.welcome.label.warn.accesskey=w
+screen.welcome.button.login=\u767b\u9304
+screen.welcome.button.clear=\u91cd\u7f6e
+
+# Blocked Errors Page
+screen.blocked.header=\u8a2a\u554f\u88ab\u62d2\u7d55
+screen.blocked.message=\u8f38\u932f\u5bc6\u78bc\u6b21\u6578\u592a\u591a\uff0c\u8cec\u865f\u88ab\u9396\u5b9a\u3002
+
+#Confirmation Screen Messages
+screen.confirmation.message=\u55ae\u64ca<a href="{0}">\u9019\u88e1</a> \uff0c\u4fbf\u80fd\u5920\u8a2a\u554f\u5230\u76ee\u6a19\u61c9\u7528\u3002
+
+#Generic Success Screen Messages
+screen.success.header=\u767b\u9304\u6210\u529f
+screen.success.success=\u60a8\u5df2\u7d93\u6210\u529f\u767b\u9304\u4e2d\u592e\u8a8d\u8b49\u7cfb\u7d71\u3002
+screen.success.security=\u51FA\u65BC\u5B89\u5168\u8003\u616E\uFF0C\u4E00\u65E6\u60A8\u8A2A\u554F\u904E\u90A3\u4E9B\u9700\u8981\u60A8\u63D0\u4F9B\u6191\u8B49\u4FE1\u606F\u7684\u61C9\u7528\u6642\uFF0C\u8ACB\u64CD\u4F5C\u5B8C\u6210\u4E4B\u5F8C<a href="logout">\u767B\u51FA</a>\u4E26\u95DC\u9589\u700F\u89BD\u5668\u3002
+
+#Logout Screen Messages
+screen.logout.header=\u8a3b\u92b7\u6210\u529f
+screen.logout.success=\u60a8\u5df2\u7d93\u6210\u529f\u9000\u51faCAS\u7cfb\u7d71\uff0c\u8b1d\u8b1d\u4f7f\u7528\uff01
+screen.logout.security=\u51fa\u65bc\u5b89\u5168\u8003\u616e\uff0c\u8acb\u95dc\u9589\u60a8\u7684\u700f\u89bd\u5668\u3002
+
+
+screen.service.sso.error.header=\u5728\u8a2a\u554f\u5230\u5230\u76ee\u6a19\u670d\u52d9\u524d\uff0c\u4f60\u5fc5\u9808\u7d93\u904e\u91cd\u65b0\u8a8d\u8b49\u7684\u8003\u9a57
+screen.service.sso.error.message=\u4f60\u6b63\u8a66\u5716\u8a2a\u554f\u8981\u6c42\u91cd\u65b0\u8a8d\u8b49\u7684\u670d\u52d9\u3002\u8acb\u5617\u8a66\u9032\u884c<a href="{0}">\u518d\u6b21\u8a8d\u8b49</a>\u3002
+
+
+username.required=\u5fc5\u9808\u9304\u5165\u7528\u6236\u540d\u3002
+password.required=\u5fc5\u9808\u9304\u5165\u5bc6\u78bc\u3002
+error.authentication.credentials.bad=\u60a8\u63d0\u4f9b\u7684\u6191\u8b49\u6709\u8aa4\u3002
+error.authentication.credentials.unsupported=CAS\u4e0d\u652f\u6301\u60a8\u63d0\u4f9b\u7684\u6191\u8b49\u3002
+
+INVALID_REQUEST_PROXY=\u5fc5\u9808\u540c\u6642\u63d0\u4f9b'pgt'\u548c'targetService'\u53c3\u6578
+INVALID_TICKET_SPEC=\u6821\u9a57\u7968\u6839\u5931\u6557\u3002\u60a8\u53ef\u80fd\u63a1\u7528\u670d\u52d9\u7968\u6839\u4f86\u6821\u9a57\u4ee3\u7406\u7968\u6839\uff0c\u6216\u6c92\u6709\u5c07renew\u8a2d\u70batrue\u3002
+INVALID_REQUEST=\u5fc5\u9808\u540c\u6642\u63d0\u4f9b'service'\u548c'ticket'\u53c3\u6578
+INVALID_TICKET=\u672a\u80fd\u5920\u8b58\u5225\u51fa\u76ee\u6a19''{0}''\u7968\u6839
+INVALID_SERVICE=\u7968\u6839''{0}''\u4e0d\u7b26\u5408\u76ee\u6a19\u670d\u52d9
+
+screen.service.error.header=\u672a\u8a8d\u8b49\u6388\u6b0a\u7684\u670d\u52d9
+screen.service.error.message=\u4e0d\u5141\u8a31\u4f7f\u7528CAS\u4f86\u8a8d\u8b49\u60a8\u8a2a\u554f\u7684\u76ee\u6a19\u61c9\u7528\u3002

BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/org/apereo/cas/CasTomcatBanner.class


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/org/apereo/cas/config/CasEmbeddedContainerTomcatConfiguration$1.class


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/org/apereo/cas/config/CasEmbeddedContainerTomcatConfiguration.class


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/org/apereo/cas/config/CasEmbeddedContainerTomcatFiltersConfiguration.class


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/org/apereo/cas/config/CasTomcatEmbeddedServletContainerFactory$ClusterMemberDesc.class


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/org/apereo/cas/config/CasTomcatEmbeddedServletContainerFactory.class


+ 9 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/services/Apereo-10000002.json

@@ -0,0 +1,9 @@
+{
+  "@class" : "org.apereo.cas.services.RegexRegisteredService",
+  "serviceId" : "^https://www.apereo.org",
+  "name" : "Apereo",
+  "theme" : "apereo",
+  "id" : 10000002,
+  "description" : "Apereo foundation sample service",
+  "evaluationOrder" : 1
+}

+ 8 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/services/HTTPSandIMAPS-10000001.json

@@ -0,0 +1,8 @@
+{
+  "@class" : "org.apereo.cas.services.RegexRegisteredService",
+  "serviceId" : "^(https|imaps)://.*",
+  "name" : "HTTPS and IMAPS",
+  "id" : 10000001,
+  "description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
+  "evaluationOrder" : 10000
+}

File diff suppressed because it is too large
+ 10382 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/css/admin.css


+ 18 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/css/authnEvents.css

@@ -0,0 +1,18 @@
+@import 'https://fonts.googleapis.com/css?family=PT+Mono';
+#authnEvents .tabsContainer {
+  padding: 0 20px;
+}
+
+#authnEvents .btn .caret {
+  margin-left: 5px;
+}
+
+.tab-pane {
+  padding: 20px 10px;
+  border: 1px solid #ddd;
+  border-top: none;
+}
+
+#container {
+  width: 100%;
+}

File diff suppressed because it is too large
+ 11792 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/css/cas.css


+ 48 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/css/consentReview.css

@@ -0,0 +1,48 @@
+/**
+ * Consent Review Styles
+ */
+@media only screen and (max-width: 855px) {
+  #consentDecisions .consent-attributes td, #consentDecisions .consent-attributes th {
+    padding: 4px;
+  }
+}
+
+#consent-decisions, #no-consent-decisions {
+  display: none;
+}
+
+#no-consent-decisions div {
+  margin-top: 2em;
+}
+
+#consentDecisions > tbody > tr:not(.info) {
+  cursor: pointer;
+}
+
+#consentDecisions .created-date .label {
+  font-size: 85%;
+}
+
+#consentDecisions .service-id {
+  word-wrap: break-word;
+  word-break: break-all;
+}
+
+#consentDecisions .consent-attributes {
+  margin-bottom: 0;
+}
+
+#consentDecisions tr.info .btn-danger {
+  float: right;
+  padding: .5em;
+  margin: 0 .2em 1em 0;
+}
+
+#alertWrapper .btn {
+  margin: 1em 1em 0 0;
+}
+
+#logout {
+  float: right;
+  margin: 1em;
+}

+ 55 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/css/loggingDashboard.css

@@ -0,0 +1,55 @@
+@import 'https://fonts.googleapis.com/css?family=PT+Mono';
+#loggingDashboard .tab-pane {
+  padding: 20px 10px;
+  border: 1px solid #ddd;
+  border-top: none;
+}
+
+#loggingDashboard .btn .caret {
+  margin-left: 5px;
+}
+
+#loggersTable td.details-control span {
+  cursor: pointer;
+  font-family: "Font Awesome 5 Free";
+  font-weight: 900;
+  font-size: 10pt;
+  color: #337ab7;
+}
+
+#loggersTable td.details-control span:after {
+  content: "\f067";
+}
+
+#loggersTable tr.shown td.details-control span:after {
+  content: "\f068";
+}
+
+.additive {
+  text-align: center;
+}
+
+.additive .glyphicon-ok {
+  color: #5cb85c;
+}
+
+.additive .glyphicon-remove {
+  color: #d9534f;
+}
+
+#logoutputarea {
+  border: 0.1em solid #ccc;
+  border-radius: 0.5em;
+  padding: 1em;
+  /* space on all directions */
+  font-family: 'PT Mono', monospace;
+  font-size: 1em;
+  width: 100%;
+  height: 100%;
+  background-color: black;
+  color: #39e600;
+}
+
+main.container {
+  max-width: 95%;
+}

+ 110 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/css/ssosessions.css

@@ -0,0 +1,110 @@
+/* --------------- CUSTOM STYLES */
+/**
+ * SSO Sessions Styles
+ */
+#cas-sessions, #no-cas-sessions {
+  display: none;
+}
+
+#no-cas-sessions div {
+  margin-top: 2em;
+}
+
+.ssoSessions #content {
+  border-radius: 4px;
+  padding: 20px;
+}
+
+.ssoSessions .sorting_desc, .ssoSessions .sorting_asc {
+  background-color: rgba(239, 239, 239, 0.8);
+}
+
+.ssoSessions #removeAllSessionsButton.btn .badge {
+  color: #000;
+  padding-right: 9px;
+}
+
+.ssoSessions .adminPanels {
+  border-bottom: 1px solid #efefef;
+  margin-bottom: 2em;
+  margin-top: 1em;
+  padding-bottom: 1em;
+}
+
+.ssoSessions .adminPanels .adminPanels .panel-default > .panel-heading {
+  background-color: #fff;
+  border-bottom: none;
+}
+
+.ssoSessions .adminPanels .adminPanels .panel-default > .panel-heading h3 {
+  font-family: 'Lato', sans-serif;
+  font-weight: 300;
+  font-size: 20pt;
+}
+
+.ssoSessions .adminPanels .adminPanels .panel-default > .panel-heading::after {
+  font-family: "Font Awesome 5 Free";
+  font-weight: 900;
+  position: absolute;
+  top: -5px;
+  right: 30px;
+  font-size: 70pt;
+  color: #153e50;
+  opacity: 0.1;
+}
+
+.ssoSessions td.details-control {
+  cursor: pointer;
+  font-family: "Font Awesome 5 Free";
+  font-weight: 900;
+  font-size: 10pt;
+  color: #337ab7;
+}
+
+.ssoSessions td.details-control::after {
+  content: "\f067";
+}
+
+.ssoSessions tr.shown td.details-control::after {
+  content: "\f068";
+}
+
+.row-detail-wrapper {
+  background-color: #d9edf7;
+}
+
+.ssoSessions .row-detail {
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+}
+
+.ssoSessions .row-detail thead {
+  display: none;
+}
+
+table.principal_attributes td:first-child {
+  width: 30%;
+}
+
+table.principal_attributes > tbody > tr > td {
+  border-top-color: #E6E6E6;
+}
+
+/* Session container --*/
+#cas-sessions,
+#container-stable,
+.ui-widget {
+  font-family: 'Lato', sans-serif !important;
+  font-size: 14px;
+}
+
+#container-stable {
+  margin: 20px 0 20px;
+}
+
+#container-stable {
+  margin: 40px 0 20px;
+}
+
+#container-stable table th {
+  text-align: left;
+}

+ 18 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/css/trustedDevices.css

@@ -0,0 +1,18 @@
+@import 'https://fonts.googleapis.com/css?family=PT+Mono';
+#trustedDevices .tabsContainer {
+  padding: 0 20px;
+}
+
+#trustedDevices .btn .caret {
+  margin-left: 5px;
+}
+
+.tab-pane {
+  padding: 20px 10px;
+  border: 1px solid #ddd;
+  border-top: none;
+}
+
+#container {
+  width: 53%;
+}

BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/favicon.ico


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/apereo-logo.png


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/cas-logo.png


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/confirm.gif


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/error.gif


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/error.png


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/green.gif


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/info.gif


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/info.png


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/logo.png


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/question.png


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/red.gif


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/success.png


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/warning.png


BIN
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/images/webapp.png


+ 116 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/attrresolution.js

@@ -0,0 +1,116 @@
+var table;
+
+$(document).ready(function () {
+    $('#fmrel').on('submit', function (e) {
+        e.preventDefault();
+        var username = $('#username').val();
+        var password = $('#password').val();
+        var service = $('#service').val();
+
+        releaseAttributes(username, password, service);
+    });
+
+
+    $('#fm1').on('submit', function (e) {
+        e.preventDefault();
+        var uid = $('#uid').val();
+        table = $('#attributesTable').DataTable();
+        table.clear().draw();
+
+        var status = $('#status');
+
+        if (uid !== null && uid !== '') {
+            resolveAttributes(uid);
+            status.html('Resolved attributes for username <strong>' + uid + '</strong>.');
+            status.removeClass('alert-danger');
+            status.addClass('alert-info');
+            status.show();
+        } else {
+            status.html('No username is provided.');
+            status.removeClass('alert-info');
+            status.addClass('alert-danger');
+            status.show();
+        }
+    });
+
+    if ($.fn.dataTable.isDataTable('#attributesTable')) {
+        table = $('#attributesTable').DataTable();
+    } else {
+        table = $('#attributesTable').DataTable({
+            paging: false,
+            searching: false
+        });
+    }
+
+    $('#status').hide();
+
+});
+
+function resolveAttributes(uid) {
+    $.ajax({
+        type: 'post',
+        url: urls.resolveAttributes,
+        data: {'uid': uid},
+        success: function (data) {
+            var table = $('#attributesTable').DataTable();
+            table.clear();
+            var attrs = data.attributes;
+            for (var property in attrs) {
+                if (attrs.hasOwnProperty(property)) {
+                    table.row.add([
+                        '<code>' + property + '</code>', '<code>' + attrs[property] + '</code>'
+                    ]).draw(false);
+                }
+            }
+        }
+    });
+}
+
+function releaseAttributes(uid, psw, service) {
+    $('validationresponse').empty();
+    $('cas1').empty();
+    $('cas2').empty();
+    $('cas3Xml').empty();
+    $('cas3Json').empty();
+
+    $('#submitRelease').attr('disabled', 'disabled');
+    $.ajax({
+        type: 'post',
+        url: urls.releaseAttributes,
+        data: {'username': uid, 'password': psw, 'service': service},
+        success: function (data) {
+            var html = '<ul><li>Service Id: <code>' + data.registeredService.id + '</code></li>'
+                + '<li>Service Identifier: <code>' + data.registeredService.serviceId + '</code></li>'
+                + '<li>Service Name: <code>' + data.registeredService.name + '</code></li>'
+                + '</ul><p/>';
+            $('#validationresponse').html(html);
+
+            var resp = '<pre>' + JSON.stringify(data.registeredService, null, 4) + '</pre>';
+            $('#serviceJson').html(resp);
+
+            resp = '<pre>' + data.cas1Response + '</pre>';
+            $('#cas1').html(resp);
+
+            resp = '<pre>' + data.cas2Response + '</pre>';
+            $('#cas2').html(resp);
+
+            resp = '<pre>' + data.cas3XmlResponse + '</pre>';
+            $('#cas3Xml').html(resp);
+
+            resp = '<pre>' + data.cas3JsonResponse + '</pre>';
+            $('#cas3Json').html(resp);
+        },
+        error: function (err) {
+            var html = '<div class=\'alert alert-danger\'>'
+                + '<h4>Response Error</h4>'
+                + 'Status: <code>' + err.responseJSON.status + '</code><p/>'
+                + 'Exception: <code>' + err.responseJSON.exception + '</code><p/>'
+                + 'Message: <code>' + err.responseJSON.message + '</code><p/>'
+                + '</div>';
+            $('#validationresponse').html(html);
+        },
+        complete: function() {
+            $('#submitRelease').removeAttr('disabled');
+        }
+    });
+}

+ 49 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/authnEvents.js

@@ -0,0 +1,49 @@
+$('#myTabs a').click(function (e) {
+    e.preventDefault();
+    $(this).tab('show');
+});
+
+(function () {
+    var getData = function () {
+        $.getJSON(urls.getEvents, function (data) {
+            authnEventsTable(data);
+        });
+    };
+
+    var authnEventsTable = function (jsonData) {
+        var t = $('#authnEventsTable').DataTable({
+            'order': [[2, 'desc']],
+            retrieve: true,
+            columnDefs: [
+                {
+                    'targets': 0,
+                    render: function (data) {
+                        return '<span class="glyphicon glyphicon-flash" aria-hidden="true">&nbsp;</span>' + data;
+                    }
+                }
+            ]
+        });
+        for (var i = 0; i < jsonData.length; i++) {
+            var rec = jsonData[i];
+
+            var type = rec.type.split('.');
+            t.row.add([
+                type[type.length - 1],
+                rec.principalId,
+                new Date(rec.creationTime*1000),
+                new Date(rec.timestamp),
+                rec.properties.agent,
+                rec.clientIpAddress,
+                rec.serverIpAddress,
+                rec.properties.geoLatitude === 'undefined' ? '' : Number(rec.properties.geoLatitude).toFixed(2),
+                rec.properties.geoLongitude === 'undefined' ? '' : Number(rec.properties.geoLongitude).toFixed(2),
+                rec.properties.geoAccuracy === 'undefined' ? '' : Number(rec.properties.geoAccuracy).toFixed(2)
+            ]).draw(false);
+        }
+    };
+
+    // initialization *******
+    (function init () {
+        getData();
+    })();
+})();

+ 145 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/cas.js

@@ -0,0 +1,145 @@
+/* global trackGeoLocation, jqueryReady */
+
+/* exported resourceLoadedSuccessfully */
+
+function requestGeoPosition() {
+    // console.log('Requesting GeoLocation data from the browser...');
+    if (navigator.geolocation) {
+        navigator.geolocation.getCurrentPosition(showGeoPosition, logGeoLocationError,
+            {maximumAge: 600000, timeout: 5000, enableHighAccuracy: true});
+    } else {
+        // console.log('Browser does not support Geo Location');
+    }
+}
+
+function logGeoLocationError(error) {
+    switch (error.code) {
+    case error.PERMISSION_DENIED:
+        // console.log('User denied the request for GeoLocation.');
+        break;
+    case error.POSITION_UNAVAILABLE:
+        // console.log('Location information is unavailable.');
+        break;
+    case error.TIMEOUT:
+        // console.log('The request to get user location timed out.');
+        break;
+    default:
+        // console.log('An unknown error occurred.');
+        break;
+    }
+}
+
+function showGeoPosition(position) {
+    $('[name="geolocation"]').val(position.coords.latitude + ','
+        + position.coords.longitude + ',' + position.coords.accuracy + ',' + position.timestamp);
+}
+
+
+function preserveAnchorTagOnForm() {
+    $('#fm1').submit(function () {
+        var location = self.document.location;
+        var hash = decodeURIComponent(location.hash);
+        
+        if (hash != undefined && hash != '' && hash.indexOf('#') === -1) {
+            hash = '#' + hash;
+        }
+
+        var action = $('#fm1').attr('action');
+        if (action == undefined) {
+            action = location.href;
+        } else {
+            var qidx = location.href.indexOf('?');
+            if (qidx != -1) {
+                var queryParams = location.href.substring(qidx);
+                action += queryParams;
+            }
+        }
+        action += hash;
+        $('#fm1').attr('action', action);
+        
+    });
+}
+
+function areCookiesEnabled() {
+    if ($.cookie == undefined) {
+        return;
+    }
+
+    $.cookie('cookiesEnabled', 'true');
+    var value = $.cookie('cookiesEnabled');
+    $.removeCookie('cookiesEnabled');
+    return value != undefined;
+
+}
+
+function disableEmptyInputFormSubmission() {
+    var fields = $('#fm1 input[name="username"],[name="password"]');
+
+    if (fields.length == 2) {
+        fields.on('input', function (event) {
+            var enableSubmission = $('#fm1 input[name="username"]').val().trim() &&
+                $('#fm1 input[name="password"]').val().trim();
+
+            if (enableSubmission) {
+                $('#fm1 input[name=submit]').removeAttr('disabled');
+                event.stopPropagation();
+            } else {
+                $('#fm1 input[name=submit]').attr('disabled', 'true');
+            }
+        });
+    }
+
+    /**
+     * Handle auto-complete events to the extent possible.
+     */
+    if ($('#fm1 input[name="username"]').length > 0) {
+        setTimeout(function () {
+            var uid = $('#username').val();
+            if (uid != null && uid != '') {
+                $('#username').change();
+                $('#username').focus();
+                $('#fm1 input[name=submit]').removeAttr('disabled');
+            }
+
+        }, 100);
+    }
+}
+
+function resourceLoadedSuccessfully() {
+    $(document).ready(function () {
+
+        if (trackGeoLocation) {
+            requestGeoPosition();
+        }
+
+        if ($(':focus').length === 0) {
+            $('input:visible:enabled:first').focus();
+        }
+
+        if (areCookiesEnabled()) {
+            $('#cookiesDisabled').hide();
+        } else {
+            $('#cookiesDisabled').show();
+        }
+
+        disableEmptyInputFormSubmission();
+        preserveAnchorTagOnForm();
+
+        $('#capslock-on').hide();
+        $('#fm1 input[name="username"],[name="password"]').trigger('input');
+        $('#fm1 input[name="username"]').focus();
+
+        $('#password').keypress(function (e) {
+            var s = String.fromCharCode(e.which);
+            if (s.toUpperCase() === s && s.toLowerCase() !== s && !e.shiftKey) {
+                $('#capslock-on').show();
+            } else {
+                $('#capslock-on').hide();
+            }
+        });
+        if (typeof(jqueryReady) == 'function') {
+            jqueryReady();
+        }
+    });
+
+}

+ 45 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/consent.js

@@ -0,0 +1,45 @@
+var strings = strings;
+
+/* global data */
+$(document).ready(function(){
+    resolveAttributes();
+    optionSelected();
+});
+
+function optionSelected() {
+    var v = $('input[name=option]:checked', '#fm1').val();
+    if (v == 0) {
+        $('#reminderPanel').hide();
+        $('#reminderTab').hide();
+    } else {
+        $('#reminderPanel').show();
+        $('#reminderTab').show();
+    }
+}
+
+function resolveAttributes() {
+    var table;
+
+    if ( $.fn.dataTable.isDataTable( '#attributesTable' ) ) {
+        table = $('#attributesTable').DataTable();
+    }
+    else {
+        table = $('#attributesTable').DataTable( {
+            paging : false,
+            searching : false,
+            language: {
+                info: strings.info
+            }
+        } );
+    }
+
+    table.clear();
+    var attrs = data.attributes;
+    for (var property in attrs) {
+        if (attrs.hasOwnProperty(property)) {
+            table.row.add([
+                '<code>' + property + '</code>', '<code>' + attrs[property] + '</code>'
+            ]).draw(false);
+        }
+    }
+}

+ 221 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/consentReview.js

@@ -0,0 +1,221 @@
+var infoEl = $('tr.info').clone();
+var strings = strings;
+
+/* Formatting function for row details - modify as you need */
+function format(d) {
+    var detail = infoEl.clone();
+    // show
+    $(detail).toggleClass('hidden');
+    // add data
+    var dec = d.decision;
+    // date
+    detail.find('.created-date')[0].append(date(dec.createdDate).toLocaleString());
+    // options & reminder
+    if (dec.options === 'ALWAYS') {
+        detail.find('.consent-reminder').parent().remove();
+    } else {
+        var unit = dec.reminderTimeUnit.toLowerCase();
+        detail.find('.consent-reminder span:not(.' + unit + ')').remove();
+        if (dec.reminder === 1) {
+            var _unit = detail.find('.consent-reminder span.' + unit);
+            _unit.html(_unit.text().slice(0, -1));
+        }
+        detail.find('.consent-reminder').prepend(dec.reminder);
+    }
+    detail.find('.consent-options span:not(.' + dec.options.toLowerCase().replace('_','-') + ')').remove();
+    // render attribute table
+    attributeTable(detail.find('.consent-attributes'),d.attributes);
+    // enable tooltip
+    detail.find('.consent-options [data-toggle="tooltip"]').tooltip();
+    // setup delete button
+    var del = detail.find('.btn-danger');
+    var data = { 'id': dec.id, 'service': dec.service };
+    del.on('click', data, function (e) {
+        e.preventDefault();
+        confirm(e.data.id, e.data.service);
+    });
+        
+    return detail;
+}
+
+function alertUser(message, alertType) {
+    $('#alertWrapper').append('<div id="alertdiv" class="alert alert-' + alertType + ' alert-dismissible">' +
+      '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>' +
+      '<span class="alertMessage">' + message + '</span></div>'
+    );
+
+    setTimeout(function () { // this will automatically close the alert and remove this if the users doesnt close it in 5 secs
+        $('#alertdiv').remove();
+    }, 5000);
+}
+
+function attributeTable(t, attributes) {
+
+    var table;
+    if ( $.fn.dataTable.isDataTable( t ) ) {
+        table = $(t).DataTable();
+    }
+    else {
+        table = $(t).DataTable( {
+            paging : false,
+            searching : false,
+            info: false
+        } );
+    }
+
+    table.clear();
+    for (var property in attributes) {
+        if (attributes.hasOwnProperty(property)) {
+            table.row.add([
+                '<code>' + property + '</code>', '<code>' + attributes[property] + '</code>'
+            ]).draw(false);
+        }
+    }
+}
+
+function date(d) {
+    var date = new Date(d[0],d[1]-1,d[2],d[3],d[4],d[5]);
+    return date;
+}
+
+function confirm(decisionId, service) {
+    $('#confirmdiv').remove();
+    var svcStr = service.length > 70 ? service.substr(0,68) + '...' : service;
+    var message = strings.confirm.replace('{}', svcStr);
+    $('#alertWrapper').append('<div id="confirmdiv" class="alert alert-warning">' +
+      '<span class="alertMessage">' + message + '</span><br/>' +
+      '<button type="button" id="delete" class="btn btn-xs btn-danger" aria-label="Yes"><strong>' +
+      strings.yes + ' </strong></button>' +
+      '<button type="button" class="btn btn-xs btn-default" aria-label="No" value="' + decisionId + '"><strong>' +
+      strings.no + '</strong></button></div>'
+    );
+    $('#confirmdiv .btn').click(function() {
+        $('#confirmdiv').alert('close');
+    });
+    $('#delete').click(function() {
+        removeDecision(decisionId);
+    });
+}
+
+function removeDecision(decisionId) {
+    var factory = {};
+    factory.httpHeaders = {};
+    factory.httpHeaders[$('meta[name=\'_csrf_header\']').attr('content')] = $('meta[name=\'_csrf\']').attr('content');
+
+    $.ajax({
+        type: 'post',
+        url: urls.delete,
+        data: {decisionId: decisionId},
+        headers: factory.httpHeaders,
+        dataType: 'json',
+        success: function (data) {
+            // Reinitialize the table data
+            $('#consentDecisions').DataTable().ajax.reload();
+
+            if (!data) {
+                alertUser(strings.error, 'danger');
+            } else {
+                alertUser(strings.success, 'success');
+                // Reload the page
+                location.reload();
+            }
+        },
+        error: function () {
+            alertUser('There appears to be an error. Please try your request again.', 'danger');
+        }
+    });
+}
+
+var consentDecisions = (function () {
+    var createDataTable = function () {
+        $('#consentDecisions').DataTable({
+            'order': [[0, 'desc']],
+            'initComplete': function (settings, json) {
+                if (!json || json.length == 0) {
+                    $('#consent-decisons').hide();
+                    $('#loadingMessage').hide();
+                    $('#no-consent-decisions').show();
+                } else {
+                    $('#loadingMessage').hide();
+                    $('#no-consent-decisions').hide();
+                    $('#consent-decisons').show();
+                }
+            },
+            'language': strings.data,
+            'paging': false,
+            'ajax': {
+                'url': urls.getConsentDecisions,
+                'dataSrc': ''
+            },
+            'data': consentDecisions,
+            'columnDefs': [
+                {
+                    'targets': 0,
+                    'className': 'created-date',
+                    'data': function (row) {
+                        return date(row.decision.createdDate);
+                    },
+                    'render': function (data) {
+                        var opts = { year: 'numeric', month: 'numeric' };
+                        return '<div class="label label-primary"><span class="hidden">' + data.toISOString() +
+                                '</span>' + data.toLocaleDateString('en', opts ) +
+                            '</div>';
+                    }
+                },
+                {
+                    'targets': 1,
+                    'data': 'decision.service',
+                    'className': 'col service-id',
+                    'render': function (data) {
+                        if ($(window).width() <= 855) {
+                            return data.length > 70 ?
+                                '<span title="' + data + '">' + data.substr(0, 68) + '...</span>' : data;
+                        } else {
+                            return data.length > 180 ?
+                                '<span title="' + data + '">' + data.substr(0, 178) + '...</span>' : data;
+                        }
+                    }
+                }
+            ]
+        });
+    };
+
+    var addEventHandlers = function () {
+        
+        /* Performs logout for consent application, no SLO */
+        $('#logout').click(function() {
+            var logout = window.location + '/logout';
+            window.location.assign(logout);
+        });
+        
+        // Add event listener for opening and closing details
+        $(document).on('click', '#consentDecisions > tbody > tr:not(.info)', function () {
+            var table = $('#consentDecisions').DataTable();
+            var tr = $(this);
+            var row = table.row(tr);
+
+            if (row.child.isShown()) {
+                // This row is already open - close it
+                row.child.hide();
+                tr.removeClass('shown');
+            }
+            else {
+                // Open this row
+                row.child(format(row.data()), 'info').show();
+                tr.addClass('shown');
+            }
+        });
+    };
+    // initialization *******
+    (function init() {
+        createDataTable();
+        addEventHandlers();
+    })();
+
+    // Public Methods
+    return {
+        /**
+         * Not used
+         */
+    };
+})();

File diff suppressed because it is too large
+ 1 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/duo/Duo-Web-v2.min.js


+ 342 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/loggingDashboard.js

@@ -0,0 +1,342 @@
+/* global logConfigFileLocation, SockJS, Stomp */
+var stompClient = null;
+
+function setConnected(connected) {
+
+    var el = document.getElementById('websocketStatus');
+    el.style.visibility = connected ? 'visible' : 'hidden';
+    el.class = connected ? 'alert alert-info' : 'alert alert-danger';
+
+    if (!connected) {
+        el.innerHTML = 'Disconnected!';
+    } else {
+        el.innerHTML = 'Connected to CAS. Streaming and tailing logs based on <kbd>[' + logConfigFileLocation + ']</kbd>...';
+    }
+}
+
+function connect() {
+    $('#logoutputarea').empty();
+    var socket = new SockJS(urls.reportsWebsocket);
+    stompClient = Stomp.over(socket);
+    stompClient.connect({}, function () {
+        setConnected(true);
+        stompClient.subscribe('/topic/logs', function (msg) {
+            if (msg != null && msg.body != '') {
+                showLogs(msg.body);
+            }
+        });
+    });
+}
+
+function disconnect() {
+    $('#logoutputarea').empty();
+    $('#logoutputarea').attr('readonly', 'readonly');
+
+    if (stompClient != null) {
+        stompClient.disconnect();
+    }
+    setConnected(false);
+}
+
+function showLogs(message) {
+    if (message != '') {
+        $('#logoutputarea').val($('#logoutputarea').val() + '\n' + message);
+        $('#logoutputarea').scrollTop(document.getElementById('logoutputarea').scrollHeight);
+    }
+}
+
+disconnect();
+connect();
+setInterval(function () {
+}, 100);
+
+/*************
+ *
+ ***************/
+$('#myTabs a').click(function (e) {
+    e.preventDefault();
+    $(this).tab('show');
+});
+
+var alertHandler = (function () {
+    var alertContainer = $('#alert-container');
+    var create = function (message, state) {
+        //console.log('create the alert');
+        alertContainer.html('<div class="alert alert-' + state + ' alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button><span>' + message + '</span></div>');
+
+        alertContainer.delay(2000).fadeOut('slow');
+    };
+
+    var destroy = function () {
+        alertContainer.empty();
+    };
+
+    return {
+        dismiss: function () {
+            destroy();
+        },
+        show: function (msg, state) {
+            create(msg, state);
+        }
+    };
+})();
+
+var loggingDashboard = (function () {
+    var json = null;
+
+    var logLevels = ['trace', 'debug', 'info', 'warn', 'error'];
+
+    var getData = function () {
+        $.getJSON(urls.getConfiguration, function (data) {
+            json = data;
+            loggerTable();
+        });
+    };
+
+    var getAuditData = function () {
+        $.getJSON(urls.getAuditLog, function (data) {
+            if ($(data).length > 0) {
+                loggerTableAudit(data);
+            } else {
+                $('#auditLogTable').DataTable();
+            }
+        });
+    };
+
+    var loggerTableAudit = function (jsonData) {
+        var t = $('#auditLogTable').DataTable({
+            'autoWidth': false,
+            'order': [[3, 'desc']],
+            retrieve: true,
+            columnDefs: [
+
+                {'width': '5%', 'targets': 0},
+                {'width': '100%', 'targets': 1},
+                {
+                    'targets': 2,
+                    render: function (data) {
+                        var dd = data.toLowerCase();
+                        if (dd.indexOf('created') != -1) {
+                            return '<span class="glyphicon glyphicon-plus" aria-hidden="true">&nbsp;</span>' + data;
+                        }
+                        if (dd.indexOf('validated') != -1) {
+                            return '<span class="glyphicon glyphicon-ok" aria-hidden="true">&nbsp;</span>' + data;
+                        }
+                        if (dd.indexOf('destroyed') != -1 || dd.indexOf('deleted') != -1) {
+                            return '<span class="glyphicon glyphicon-minus" aria-hidden="true">&nbsp;</span>' + data;
+                        }
+
+                        if (dd.indexOf('success') != -1) {
+                            return '<span class="glyphicon glyphicon-thumbs-up" aria-hidden="true">&nbsp;</span>' + data;
+                        }
+                        if (dd.indexOf('failed') != -1) {
+                            return '<span class="glyphicon glyphicon-thumbs-down" aria-hidden="true">&nbsp;</span>' + data;
+                        }
+
+                        return data;
+                    }
+                }
+            ]
+        });
+        for (var i = 0; i < jsonData.length; i++) {
+            var rec = jsonData[i];
+            t.row.add([
+                rec.principal,
+                rec.resourceOperatedUpon,
+                rec.actionPerformed,
+                new Date(rec.whenActionWasPerformed),
+                rec.clientIpAddress,
+                rec.serverIpAddress
+            ]).draw(false);
+        }
+    };
+
+    var loggerTable = function () {
+        $('#loggersTable').DataTable({
+            'autoWidth': false,
+            'order': [[1, 'desc']],
+            data: json.loggers,
+            'drawCallback': function () {
+                var api = this.api();
+
+                if (api.page.info().pages > 1) {
+                    $('#' + $.fn.dataTable.tables()[0].id + '_paginate')[0].style.display = 'block';
+                } else {
+                    $('#' + $.fn.dataTable.tables()[0].id + '_paginate')[0].style.display = 'none';
+                }
+            },
+            'initComplete': function (settings) {
+                if (!settings.aoData || settings.aoData.length == 0) {
+                    $('#loadingMessage').addClass('d-none');
+                    $('#errorLoadingData').removeClass('d-none');
+                } else {
+                    $('#loadingMessage').addClass('d-none');
+                    $('#errorLoadingData').addClass('d-none');
+                    $('#loggingDashboard .tabsContainer').removeClass('d-none');
+                }
+            },
+            'processing': true,
+            columnDefs: [
+                {
+                    'targets': 0,
+                    'className': 'details-control',
+                    'orderable': false,
+                    'data': 'appenders',
+                    'defaultContent': '',
+                    render: function (data) {
+                        if (data.length > 0) {
+                            return '<span></span>';
+                        } else {
+                            return '';
+                        }
+                    }
+                },
+                {
+                    targets: 1,
+                    data: 'name',
+                    className: 'col-xs-5'
+                },
+                {
+                    targets: 2,
+                    data: 'additive',
+                    className: 'additive col-xs-2',
+                    render: function (data) {
+                        if (data) {
+                            return '<span class="glyphicon glyphicon-ok" aria-hidden="true"></span>';
+                        } else {
+                            return '<span class="glyphicon glyphicon-remove" aria-hidden="true"></span>';
+
+                        }
+                    }
+                },
+                {
+                    targets: 3,
+                    data: 'state',
+                    className: 'col-xs-2'
+                },
+                {
+                    targets: 4,
+                    data: 'level',
+                    className: 'col-xs-3',
+                    render: function (data, type, full, meta) {
+                        return toggleSwitch(data, type, full, meta);
+                    }
+                }
+            ]
+        });
+    };
+
+    var toggleSwitch = function (data, type, full) {
+        // Todo: Add additional colors for the other options
+        //console.log('toggleSwitch data',data);
+        //console.log('type',type);
+        //console.log('full',full);
+        //console.log('meta',meta);
+        //console.log(logLevels);
+        var btnColor;
+
+        switch (data.toLowerCase()) {
+        case 'error':
+            btnColor = 'danger';
+            break;
+        case 'info':
+            btnColor = 'info';
+            break;
+        case 'warn':
+            btnColor = 'warning';
+            break;
+        default:
+            btnColor = 'default';
+        }
+        var btnGroup = '<div class="dropdown" data-logger="' + full + '"><button class="btn btn-sm btn-block bg-' + btnColor + ' dropdown-toggle" name="recordinput" data-toggle="dropdown">' + data + ' <span class="caret"></span></button>' +
+            '<div class="dropdown-menu">';
+        for (var i = 0; i < logLevels.length; i++) {
+            btnGroup += '<a class="dropdown-item" href="#">' + logLevels[i].toUpperCase() + '</a>';
+        }
+        btnGroup += '</div>';
+
+        return btnGroup;
+    };
+
+    /* Formatting function for row details - modify as you need */
+    var viewAppenders = function (data) {
+        return '<table class="table table-bordered row-detail"><tbody><tr class="">' +
+            '<td class="field-label active">Appenders:</td>' +
+            '<td><kbd>' + JSON.stringify(data.appenders, null, 2) + '</kbd></td>' +
+            '</tr>' +
+            '</tbody></table>';
+    };
+
+    var addEventHandlers = function () {
+        //console.log('addEventHAndlers()');
+
+        $(document).on('click', '#loggersTable .dropdown-menu a', function (e) {
+            //console.log('status change', this);
+            e.preventDefault();
+            var selText = $(this).text();
+
+            changeLogLevel(selText, this);
+        });
+
+        $(document).on('click', '#loggersTable tbody td.details-control span', function () {
+            var table = $('#loggersTable').DataTable();
+            var tr = $(this).closest('tr');
+            var row = table.row(tr);
+
+            if (row.child.isShown()) {
+                // This row is already open - close it
+                row.child.hide();
+                tr.removeClass('shown');
+            } else {
+                // Open this row
+                row.child(viewAppenders(row.data()), 'info').show();
+                tr.addClass('shown');
+            }
+        });
+    };
+
+    var changeLogLevel = function (newLevel, el) {
+        /**
+         * POST - /cas/status/logging/updateLoggerLevel
+         * Allows you to change the log level for given LOGGER. Parameters are:
+         * loggerName, loggerLevel, additive (true/false)
+         */
+        var table = $('#loggersTable').DataTable();
+        var data = table.row($(el).closest('tr')[0]).data();
+
+        if (newLevel != data.level) {
+            var cell = table.cell($(el).closest('td')[0]);
+
+            $.post(urls.updateLevel, {
+                loggerName: data.name,
+                loggerLevel: newLevel,
+                additive: data.additive
+            }, function () {
+                cell.data(newLevel).draw();
+                alertHandler.show('Successfully changed.', 'success');
+            }).fail(function () {
+                alertHandler.show('Error saving change.  Please try again', 'danger');
+            });
+        }
+    };
+
+    // initialization *******
+    (function init() {
+    })();
+
+    return {
+        init: function () {
+            getData();
+            addEventHandlers();
+            getAuditData();
+        },
+        getJson: function () {
+            return json;
+        },
+        showLoggersTable: function () {
+            loggerTable();
+        }
+    };
+})();
+
+loggingDashboard.init();

+ 142 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/passwordMeter.js

@@ -0,0 +1,142 @@
+/* global jqueryReady, policyPattern, zxcvbn, passwordStrengthI18n */
+/*eslint-disable no-unused-vars*/
+function jqueryReady() {
+    var strength = passwordStrengthI18n;
+    
+    $.fn.zxcvbnProgressBar = function (options) {
+
+        //init settings
+        var settings = $.extend({
+            allProgressBarClasses: 'progress-bar-danger progress-bar-warning progress-bar-success progress-bar-striped active',
+            progressBarClass0: 'progress-bar-danger progress-bar-striped active',
+            progressBarClass1: 'progress-bar-danger progress-bar-striped active',
+            progressBarClass2: 'progress-bar-warning progress-bar-striped active',
+            progressBarClass3: 'progress-bar-success',
+            progressBarClass4: 'progress-bar-success'
+        }, options);
+
+        return this.each(function () {
+            settings.progressBar = this;
+            //init progress bar display
+            UpdateProgressBar();
+            //Update progress bar on each keypress of password input
+            $(settings.passwordInput).keyup(function (event) {
+                UpdateProgressBar();
+            });
+        });
+
+        function UpdateProgressBar() {
+            var progressBar = settings.progressBar;
+            var password = $('#password').val();
+            if (password) {
+                var result = zxcvbn(password, settings.userInputs);
+                //result.score: 0, 1, 2, 3 or 4 - if crack time is less than 10**2, 10**4, 10**6, 10**8, Infinity.
+                var scorePercentage = (result.score + 1) * 20;
+                $(progressBar).css('width', scorePercentage + '%');
+
+                if (result.score == 0) {
+                    //weak
+                    $(progressBar).removeClass(settings.allProgressBarClasses).addClass(settings.progressBarClass0);
+                    $(progressBar).html(strength[0]);
+                }
+                else if (result.score == 1) {
+                    //normal
+                    $(progressBar).removeClass(settings.allProgressBarClasses).addClass(settings.progressBarClass1);
+                    $(progressBar).html(strength[1]);
+                }
+                else if (result.score == 2) {
+                    //medium
+                    $(progressBar).removeClass(settings.allProgressBarClasses).addClass(settings.progressBarClass2);
+                    $(progressBar).html(strength[2]);
+                }
+                else if (result.score == 3) {
+                    //strong
+                    $(progressBar).removeClass(settings.allProgressBarClasses).addClass(settings.progressBarClass3);
+                    $(progressBar).html(strength[3]);
+                }
+                else if (result.score == 4) {
+                    //very strong
+                    $(progressBar).removeClass(settings.allProgressBarClasses).addClass(settings.progressBarClass4);
+                    $(progressBar).html(strength[4]);
+                }
+            }
+            else {
+                $(progressBar).css('width', '0%');
+                $(progressBar).removeClass(settings.allProgressBarClasses).addClass(settings.progressBarClass0);
+                $(progressBar).html('');
+            }
+        }
+    };
+    var policyPatternRegex = new RegExp(policyPattern);
+    var password = document.getElementById('password');
+    var confirmed = document.getElementById('confirmedPassword');
+    
+    
+    password.addEventListener('input', validate);
+    confirmed.addEventListener('input', validate);
+    
+    var alertSettings = {
+        allAlertClasses: 'fa-times-circle fa-exclamation-circle fa-info-circle fa-check-circle',
+        alertClassDanger: 'fa-times-circle',
+        alertClassWarning: 'fa-exclamation-circle',
+        alertClassInfo: 'fa-info-circle',
+        alertClassSuccess: 'fa-check-circle'
+    };
+
+    function validate() {
+        var val = password.value;
+        var cnf = confirmed.value;
+        
+        $('#password-policy-violation-msg').hide();
+        $('#password-confirm-mismatch-msg').hide();
+
+        var passwordPolicyViolated = val === '' || !policyPatternRegex.test(val); 
+        var passwordMismatch = val !== '' && val !== cnf;
+        var disableSubmit = passwordPolicyViolated || passwordMismatch;
+        $('#submit').prop('disabled', disableSubmit);
+
+        var result = zxcvbn(val);
+        $('#strengthProgressBar').zxcvbnProgressBar({ passwordInput: '#password' });       
+        
+        // Check strength, update the text indicator
+        if (val !== '') {
+            $('#password-strength-warning').text(result.feedback.warning);
+            $('#password-strength-suggestions').text(result.feedback.suggestions);
+            
+            var clz = alertSettings.alertClassDanger;
+            switch (result.score) {
+            case 0:
+            case 1:
+                clz = alertSettings.alertClassDanger;
+                break;
+            case 2:
+                clz = alertSettings.alertClassWarning;
+                break;
+            case 3:
+                clz = alertSettings.alertClassInfo;
+                break;
+            case 4:
+            case 5:
+            default:
+                clz = alertSettings.alertClassSuccess;
+                break;
+            }
+            $('#password-strength-icon').removeClass(alertSettings.allAlertClasses).addClass(clz);
+        } else {
+            $('#password-strength-icon').removeClass(alertSettings.allAlertClasses);
+            $('#password-strength-warning').text('');
+            $('#password-strength-suggestions').text('');
+        }
+        
+        // Check for mismatch
+        if (passwordMismatch && cnf !== '') {
+            $('#password-confirm-mismatch-msg').show();
+        }
+        
+        // Check password policy
+        if (passwordPolicyViolated) {
+            $('#password-policy-violation-msg').show();
+            return;
+        }
+    }
+}

File diff suppressed because it is too large
+ 2378 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/sockjs.js


+ 351 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/ssosessions.js

@@ -0,0 +1,351 @@
+/*eslint-disable no-unused-vars*/
+String.prototype.padLeft = function (length, character) {
+    return new Array(length - this.length + 1).join(character || ' ') + this;
+};
+
+Date.prototype.toFormattedString = function () {
+    return [String(this.getMonth() + 1).padLeft(2, '0'),
+        String(this.getDate()).padLeft(2, '0'),
+        String(this.getFullYear()).substr(2, 2)].join('/') + ' ' +
+          [String(this.getHours()).padLeft(2, '0'),
+              String(this.getMinutes()).padLeft(2, '0')].join(':');
+};
+
+function principalAttributes(obj) {
+    var output = '<table class="table table-condensed principal_attributes"><tbody>';
+    for (var key in obj) {
+        if (obj.hasOwnProperty(key)) {
+            if (Array.isArray(obj[key])) {
+                output = output.concat('<tr><td class="field-label active">' + key + '</td><td>' + obj[key].toString() + '</td></tr>');
+            } else {
+                output = output.concat('<tr><td class="field-label active">' + key + '</td><td>' + obj[key] + '</td></tr>');
+            }
+        }
+    }
+    output = output.concat('</tbody></table>');
+
+    return output;
+}
+
+function authenticatedServices(obj) {
+    var output = '';
+    for (var key in obj) {
+        if (obj.hasOwnProperty(key)) {
+            output = output.concat('<h5>' + key + '</h5><table class="table table-condensed principal_attributes"><tbody>');
+            for (var foo in obj[key]) {
+                if (obj[key].hasOwnProperty(foo)) {
+                    if (Array.isArray(obj[key][foo])) {
+                        output = output.concat('<tr><td class="field-label active">' + foo + ':</td><td>' + obj[key][foo].toString() + '</td></tr>');
+                    } else {
+                        output = output.concat('<tr><td class="field-label active">' + foo + ':</td><td>' + obj[key][foo] + '</td></tr>');
+                    }
+                }
+            }
+            output = output.concat('</tbody></table>');
+        }
+    }
+    return output;
+}
+
+/* Formatting function for row details - modify as you need */
+function format(d) {
+    return '<table class="table table-bordered row-detail">' +
+      '<tbody>' +
+      '<tr class="hidden-md hidden-lg">' +
+      '<td class="field-label active">Access Date:</td>' +
+      '<td>' + d.authentication_date_formatted + '</td>' +
+      '</tr>' +
+      '<tr class="hidden-md hidden-lg">' +
+      '<td class="field-label active">Usage Count:</td>' +
+      '<td>' + d.number_of_uses + '</td>' +
+      '</tr>' +
+      '<tr>' +
+      '<td class="field-label active">Ticket Granting Ticket:</td>' +
+      '<td>' + d.ticket_granting_ticket + '</td>' +
+      '</tr>' +
+      '<tr>' +
+      '<td class="field-label active">Principal Attributes:</td>' +
+      '<td>' +
+      principalAttributes(d.principal_attributes) +
+      '</td>' +
+      '</tr>' +
+      '<tr>' +
+      '<td class="field-label active">Authenticated Services:</td>' +
+      '<td>' +
+      authenticatedServices(d.authenticated_services) +
+      '</td>' +
+      '</tr>' +
+      '<tr>' +
+      '<td class="field-label active">Ticket Granting Service:</td>' +
+      '<td></td>' +
+      '</tr>' +
+      '</tbody></table>';
+
+}
+
+function updateAdminPanels(data) {
+    //$('#totalUsers').text(data.totalPrincipals);
+    $('#totalUsers').text(data.activeSsoSessions.length);
+    $('#totalUsageSessions').text(sum(data.activeSsoSessions, 'number_of_uses'));
+    //$('#totalProxied').text(data.totalTicketGrantingTickets);
+    $('#totalTGTs').text(data.totalTicketGrantingTickets);
+    //$('#totalTGTs').text( sum(data.activeSsoSessions, 'is_proxied' ) );
+}
+
+function sum(obj, prop) {
+    var sum = 0;
+    for (var el in obj) {
+        if (obj.hasOwnProperty(el)) {
+            sum += ( typeof obj[el][prop] == 'boolean' ) ? +obj[el][prop] : obj[el][prop];
+        }
+    }
+    return sum;
+}
+
+/*
+ function showError(msg) {
+ $('#msg').removeClass();
+ $('#msg').addClass('errors');
+ $('#msg').text(msg);
+ $('#msg').show();
+ }
+ */
+
+/*
+ function showInfo(msg) {
+ $('#msg').removeClass();
+ $('#msg').addClass('info');
+ $('#msg').text(msg);
+ $('#msg').show();
+ }
+ */
+
+function alertUser(message, alertType) {
+    $('#alertWrapper').append('<div id="alertdiv" class="alert alert-' + alertType + ' alert-dismissible">' +
+      '<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>' +
+      '<span class="alertMessage">' + message + '</span></div>'
+    );
+
+    setTimeout(function () { // this will automatically close the alert and remove this if the users doesnt close it in 5 secs
+        $('#alertdiv').remove();
+    }, 5000);
+}
+
+function removeSession(ticketId) {
+    var factory = {};
+    factory.httpHeaders = {};
+    factory.messages = {};
+    factory.httpHeaders[$('meta[name=\'_csrf_header\']').attr('content')] = $('meta[name=\'_csrf\']').attr('content');
+
+    factory.ticketId = ticketId;
+
+
+    if (ticketId && (ticketId == 'ALL' || ticketId == 'PROXIED' || ticketId == 'DIRECT' )) {
+        factory.url = urls.destroy.all;
+        factory.data = {type: ticketId};
+        factory.messages.success = 'Removed <strong>' + ticketId + '</strong> tickets successfully.';
+        factory.messages.error = 'Could not remove <strong>' + ticketId + '</strong> tickets.';
+    } else {
+        factory.url = urls.destroy.single;
+        factory.data = {ticketGrantingTicket: factory.ticketId};
+        factory.messages.success = 'Ticket is removed successfully.';
+        factory.messages.error = 'Ticket is not removed successfully.';
+    }
+
+    $.ajax({
+        type: 'post',
+        url: factory.url,
+        //data: { ticketGrantingTicket: factory.ticketId, type: 'ALL' },
+        data: factory.data,
+        headers: factory.httpHeaders,
+        dataType: 'json',
+        success: function (data) {
+            // Reinitialize the table data
+            $('#ssoSessions').DataTable().ajax.reload();
+
+            if (data.status != 200) {
+                alertUser(factory.messages.error, 'danger');
+            } else {
+                alertUser(factory.messages.success, 'success');
+                // Reload the page
+                location.reload();
+            }
+        },
+        error: function () {
+            alertUser('There appears to be an error. Please try your request again.', 'danger');
+        }
+    });
+}
+
+var ssoSessions = (function () {
+    var createDataTable = function () {
+        $('#ssoSessions').DataTable({
+            'order': [[3, 'desc']],
+            'initComplete': function (settings, json) {
+                if (!json || json.activeSsoSessions.length == 0) {
+                    $('#loadingMessage').hide();
+                    $('#no-cas-sessions').show();
+                } else {
+                    updateAdminPanels(json);
+
+                    $('#loadingMessage').hide();
+                    $('#no-cas-sessions').hide();
+                    $('#cas-sessions').show();
+                }
+            },
+            'language': {
+                //"infoEmpty": "No active sessions were found",
+                'emptyTable': 'No sessions found',
+                'zeroRecords': 'No matching sessions found'
+            },
+            'processing': true,
+            'ajax': {
+                'url': urls.getSessions,
+                'dataSrc': 'activeSsoSessions'
+            },
+
+            columnDefs: [
+                {
+                    'targets': 0,
+                    'className': 'details-control',
+                    'orderable': false,
+                    'data': null,
+                    'defaultContent': ''
+                },
+                {
+                    'targets': 1,
+                    'data': 'is_proxied',
+                    'className': 'col-xs-2 col-md-1',
+                    'render': function (data) {
+                        if (data === true) {
+                            return '<span class="label label-primary">Proxy</span>';
+                        } else {
+                            return ' ';
+                        }
+                    }
+                },
+                {
+                    'targets': 2,
+                    'data': 'authenticated_principal',
+                    'className': 'col-xs-4 col-md-2',
+                    'render': function (data, type) {
+                        return type === 'display' && data.length > 20 ?
+                            '<span title="' + data + '">' + data.substr(0, 18) + '...</span>' :
+                            data;
+                    }
+                },
+                {
+                    'targets': 3,
+                    'data': 'ticket_granting_ticket',
+                    'className': 'hidden-xs hidden-sm col-md-4',
+                    'render': function (data, type) {
+                        return type === 'display' && data.length > 20 ?
+                            '<span title="' + data + '">' + data.substr(0, 40) + '...</span>' :
+                            data;
+                    }
+                },
+                {
+                    'targets': 4,
+                    'data': 'authentication_date_formatted',
+                    'className': 'col-xs-4 col-sm-4 col-md-2'
+                },
+                {
+                    'targets': 5,
+                    'data': 'number_of_uses',
+                    'className': 'hidden-xs hidden-sm visible-md-* col-md-2'
+                },
+                {
+                    'targets': 6,
+                    'data': 'ticket_granting_ticket',
+                    'className': 'col-xs-2 col-sm-2 col-md-1',
+                    'render': function (data) {
+                        return '<button class="btn btn-xs btn-block btn-danger" type="button" value="' + data + '">Destroy</button>';
+                    },
+                    'orderable': false
+                },
+            ]
+        });
+    };
+
+    var addEventHandlers = function () {
+
+        /**
+         * The Bulk remove button
+         */
+        $('#removeAllSessionsButton').on('click', function (e) {
+            e.preventDefault();
+            removeSession(this.value);
+        });
+
+        /**
+         * Individual removal button
+         */
+        $(document).on('click', '#ssoSessions tbody tr td:last-child button.btn-danger', function (e) {
+            e.preventDefault();
+            removeSession(this.value);
+        });
+
+        /**
+         * The filter buttons
+         */
+        $('#filterButtons .btn').click(function () {
+
+            var filter = $(this).data('filter');
+            var table = $('#ssoSessions').DataTable();
+            var filterRegex;
+            var deleteValue;
+            var btnText;
+
+            // Create Filter RegEx:
+            if (filter == 'proxied') {
+                filterRegex = '^Proxy$';
+                deleteValue = 'PROXIED';
+                btnText = 'Remove <span class="badge">xx</span> Proxied Sessions';
+            } else if (filter == 'non-proxied') {
+                filterRegex = '^ $';
+                deleteValue = 'DIRECT';
+                btnText = 'Remove <span class="badge">xx</span> Non-Proxied Sessions';
+            } else {
+                filterRegex = '';
+                deleteValue = 'ALL';
+                btnText = 'Remove All Sessions';
+            }
+
+            var searchTerm = table.column(1).search(filterRegex, true, false).draw();
+
+            $('#removeAllSessionsButton').val(deleteValue).html(btnText.replace('xx', searchTerm.page.info().recordsDisplay));
+        });
+
+
+        // Add event listener for opening and closing details
+        $(document).on('click', '#ssoSessions tbody td.details-control', function () {
+            var table = $('#ssoSessions').DataTable();
+            var tr = $(this).closest('tr');
+            var row = table.row(tr);
+
+            if (row.child.isShown()) {
+                // This row is already open - close it
+                row.child.hide();
+                tr.removeClass('shown');
+            }
+            else {
+                // Open this row
+                row.child(format(row.data()), 'info').show();
+                tr.addClass('shown');
+            }
+        });
+    };
+
+    // initialization *******
+    (function init() {
+        addEventHandlers();
+        createDataTable();
+    })();
+
+    // Public Methods
+    return {
+        /**
+         * Not used
+         */
+    };
+})();

+ 208 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/statisticsview.js

@@ -0,0 +1,208 @@
+/* global d3 */
+/*eslint-disable no-unused-vars*/
+var Gauge = function (wrapper, percent, options) {
+    if (!wrapper || !percent) {
+        //console.error('wrapper and percentage are required.  Please check your code.');
+        return;
+    }
+
+    var label = (!options.label) ? '' : options.label;
+
+    var textClass = options.textClass || 'progress-meter';
+
+    var width = options.width || 200,
+        height = options.height || 200,
+        twoPi = 2 * Math.PI,
+        progress = 0,
+        total = 100,
+        formatPercent = d3.format('.0%');
+
+    var colorScale = d3.scaleLinear()
+        .domain([0, 0.40, 0.50, 1])
+        .range(['green', 'green', 'goldenrod', 'red']);
+
+    var arc = d3.arc()
+        .startAngle(0)
+        .innerRadius(width * 0.4)
+        .outerRadius(width * 0.5)
+        ;
+
+    var svg = d3.select(wrapper).append('svg')
+        .attr('width', width)
+        .attr('height', height)
+
+        .attr('fill', '#2E7AF9')
+        .append('g')
+        .attr('transform', 'translate(' + width / 2 + ',' + height / 2 + ')');
+
+    var meter = svg.append('g')
+        .attr('class', textClass);
+
+    meter.append('path')
+        .attr('class', 'background')
+        .attr('d', arc.endAngle(twoPi));
+
+    var foreground = meter.append('path')
+        .attr('class', 'foreground');
+
+    var text = meter.append('text')
+        .attr('text-anchor', 'middle');
+
+    var text2 = meter.append('text')
+        .attr('y', height * 0.15)
+        .attr('text-anchor', 'middle')
+        .attr('class', 'text2');
+
+    text2.text(label);
+
+    var animate = function (percentage) {
+        var i = d3.interpolate(progress, percentage);
+
+        foreground.transition().duration(2000)
+            .tween('progress', function () {
+
+                return function (t) {
+                    progress = i(t);
+
+                    foreground.style('fill', colorScale(progress));
+                    foreground.attr('d', arc.endAngle(twoPi * progress));
+                    text.text(formatPercent(progress));
+                };
+            });
+    };
+
+    // init
+    (function () {
+        setTimeout(function () {
+            animate(percent);
+        }, 500);
+    })();
+
+    return {
+        update: function (newPercent) {
+            animate(newPercent);
+        }
+    };
+};
+
+
+function upTime(countTo, el) {
+    var wrapper = document.getElementById('card-uptime');
+    var element = document.getElementById(el);
+    var difference = new Date(countTo*1000);
+
+    var days = Math.floor(difference / (60 * 60 * 1000 * 24) * 1);
+    var hours = Math.floor((difference % (60 * 60 * 1000 * 24)) / (60 * 60 * 1000) * 1);
+    var mins = Math.floor(((difference % (60 * 60 * 1000 * 24)) % (60 * 60 * 1000)) / (60 * 1000) * 1);
+    var secs = Math.floor((((difference % (60 * 60 * 1000 * 24)) % (60 * 60 * 1000)) % (60 * 1000)) / 1000 * 1);
+
+    clearTimeout(upTime.to);
+
+    if (isNaN(days) || isNaN(hours) || isNaN(mins) || isNaN(secs) ) {
+        wrapper.style.display = 'none';
+    } else {
+        days = (days == 1) ? days + ' day ' : days + ' days ';
+        hours = (hours == 1) ? hours + ' hour ' : hours + ' hours ';
+        mins = (mins == 1) ? mins + ' minute ' : mins + ' minutes ';
+        secs = (secs == 1) ? secs + ' second ' : secs + ' seconds';
+
+        var timeString = '<span class="upTime">' + days + hours + mins + secs + '</span>';
+        element.innerHTML = timeString;
+        wrapper.style.display = 'block';
+
+        upTime.to = setTimeout(function() {
+            countTo = countTo + 1;
+            upTime(countTo, el);
+        },1000);
+
+    }
+}
+
+var analytics = document.getElementById('expiredSts');
+
+var casStatistics = function (urls, messages) {
+    var timers = {
+        memory: 5000,
+        availability: 15000,
+        tickets: 5000
+    };
+
+    var memoryGauage;
+
+    var getRemoteJSON = function(url) {
+        return $.getJSON( url);
+    };
+
+    var tickets = function() {
+        var data = getRemoteJSON(urls.tickets);
+        data.done(function( data ) {
+            updateElementValue( 'unexpiredTgts', data.unexpiredTgts );
+            updateElementValue( 'unexpiredSts', data.unexpiredSts );
+            updateElementValue( 'expiredTgts', data.expiredTgts );
+            updateElementValue( 'expiredSts', data.expiredSts );
+            setTimeout( tickets, timers.tickets );
+        });
+    };
+
+    var updateElementValue = function(el, val) {
+        $( '#' + el ).text( val );
+    };
+
+    var memory = function() {
+        var data = getRemoteJSON(urls.memory);
+        data.done(function( data ) {
+            updateElementValue('freeMemory', data.freeMemory.toFixed(2));
+            // updateElementValue('totalMemory', data.totalMemory);
+            // updateElementValue('maxMemory', data.maxMemory);
+            // updateElementValue('availableProcessors', data.availableProcessors);
+
+            var memCalc = (data.totalMemory / data.maxMemory).toFixed(2);
+
+            if ( !memoryGauage ) {
+                memoryGauage = new Gauge('#maxMemoryGauge', memCalc, {width: 200, height: 200,
+                    label: messages.memoryGaugeTitle,
+                    textClass: 'runtimeStatistics'});
+            } else {
+                memoryGauage.update( memCalc );
+            }
+
+            setTimeout( memory, timers.memory );
+        });
+
+    };
+    var availability = function() {
+        var data = getRemoteJSON(urls.availability);
+        data.done(function( data ) {
+            updateElementValue('upTime', data.upTime);
+            setTimeout( availability, timers.availability );
+        });
+    };
+
+    // initialization *******
+    ( function init () {
+        $('#loading, .statisticsView').toggle();
+        tickets();
+        memory();
+        // availability();
+    })();
+
+    // Public Methods
+    return {
+        getTickets: function() {
+            return tickets();
+        },
+        getMemory: function() {
+            return memory();
+        },
+        getAvailability: function() {
+            return availability();
+        },
+        updateGauge: function(val){
+            if (memoryGauage) {
+                memoryGauage.update( val );
+            } else {
+                return 'unable to update';
+            }
+        }
+    };
+};

+ 474 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/stomp.js

@@ -0,0 +1,474 @@
+// Generated by CoffeeScript 1.7.1
+
+/*
+   Stomp Over WebSocket http://www.jmesnil.net/stomp-websocket/doc/ | Apache License V2.0
+
+   Copyright (C) 2010-2013 [Jeff Mesnil](http://jmesnil.net/)
+   Copyright (C) 2012 [FuseSource, Inc.](http://fusesource.com)
+ */
+
+(function() {
+  var Byte, Client, Frame, Stomp,
+    __hasProp = {}.hasOwnProperty,
+    __slice = [].slice;
+
+  Byte = {
+    LF: '\x0A',
+    NULL: '\x00'
+  };
+
+  Frame = (function() {
+    var unmarshallSingle;
+
+    function Frame(command, headers, body) {
+      this.command = command;
+      this.headers = headers != null ? headers : {};
+      this.body = body != null ? body : '';
+    }
+
+    Frame.prototype.toString = function() {
+      var lines, name, value, _ref;
+      lines = [this.command];
+      _ref = this.headers;
+      for (name in _ref) {
+        if (!__hasProp.call(_ref, name)) continue;
+        value = _ref[name];
+        lines.push("" + name + ":" + value);
+      }
+      if (this.body) {
+        lines.push("content-length:" + (Frame.sizeOfUTF8(this.body)));
+      }
+      lines.push(Byte.LF + this.body);
+      return lines.join(Byte.LF);
+    };
+
+    Frame.sizeOfUTF8 = function(s) {
+      if (s) {
+        return encodeURI(s).split(/%..|./).length - 1;
+      } else {
+        return 0;
+      }
+    };
+
+    unmarshallSingle = function(data) {
+      var body, chr, command, divider, headerLines, headers, i, idx, len, line, start, trim, _i, _j, _len, _ref, _ref1;
+      divider = data.search(RegExp("" + Byte.LF + Byte.LF));
+      headerLines = data.substring(0, divider).split(Byte.LF);
+      command = headerLines.shift();
+      headers = {};
+      trim = function(str) {
+        return str.replace(/^\s+|\s+$/g, '');
+      };
+      _ref = headerLines.reverse();
+      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+        line = _ref[_i];
+        idx = line.indexOf(':');
+        headers[trim(line.substring(0, idx))] = trim(line.substring(idx + 1));
+      }
+      body = '';
+      start = divider + 2;
+      if (headers['content-length']) {
+        len = parseInt(headers['content-length']);
+        body = ('' + data).substring(start, start + len);
+      } else {
+        chr = null;
+        for (i = _j = start, _ref1 = data.length; start <= _ref1 ? _j < _ref1 : _j > _ref1; i = start <= _ref1 ? ++_j : --_j) {
+          chr = data.charAt(i);
+          if (chr === Byte.NULL) {
+            break;
+          }
+          body += chr;
+        }
+      }
+      return new Frame(command, headers, body);
+    };
+
+    Frame.unmarshall = function(datas) {
+      var data;
+      return (function() {
+        var _i, _len, _ref, _results;
+        _ref = datas.split(RegExp("" + Byte.NULL + Byte.LF + "*"));
+        _results = [];
+        for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+          data = _ref[_i];
+          if ((data != null ? data.length : void 0) > 0) {
+            _results.push(unmarshallSingle(data));
+          }
+        }
+        return _results;
+      })();
+    };
+
+    Frame.marshall = function(command, headers, body) {
+      var frame;
+      frame = new Frame(command, headers, body);
+      return frame.toString() + Byte.NULL;
+    };
+
+    return Frame;
+
+  })();
+
+  Client = (function() {
+    var now;
+
+    function Client(ws) {
+      this.ws = ws;
+      this.ws.binaryType = "arraybuffer";
+      this.counter = 0;
+      this.connected = false;
+      this.heartbeat = {
+        outgoing: 10000,
+        incoming: 10000
+      };
+      this.maxWebSocketFrameSize = 16 * 1024;
+      this.subscriptions = {};
+    }
+
+    Client.prototype.debug = function(message) {
+      void 0;
+    };
+
+    now = function() {
+      return Date.now || new Date().valueOf;
+    };
+
+    Client.prototype._transmit = function(command, headers, body) {
+      var out;
+      out = Frame.marshall(command, headers, body);
+      if (typeof this.debug === "function") {
+        this.debug(">>> " + out);
+      }
+      while (true) {
+        if (out.length > this.maxWebSocketFrameSize) {
+          this.ws.send(out.substring(0, this.maxWebSocketFrameSize));
+          out = out.substring(this.maxWebSocketFrameSize);
+          if (typeof this.debug === "function") {
+            this.debug("remaining = " + out.length);
+          }
+        } else {
+          return this.ws.send(out);
+        }
+      }
+    };
+
+    Client.prototype._setupHeartbeat = function(headers) {
+      var serverIncoming, serverOutgoing, ttl, v, _ref, _ref1;
+      if ((_ref = headers.version) !== Stomp.VERSIONS.V1_1 && _ref !== Stomp.VERSIONS.V1_2) {
+        return;
+      }
+      _ref1 = (function() {
+        var _i, _len, _ref1, _results;
+        _ref1 = headers['heart-beat'].split(",");
+        _results = [];
+        for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+          v = _ref1[_i];
+          _results.push(parseInt(v));
+        }
+        return _results;
+      })(), serverOutgoing = _ref1[0], serverIncoming = _ref1[1];
+      if (!(this.heartbeat.outgoing === 0 || serverIncoming === 0)) {
+        ttl = Math.max(this.heartbeat.outgoing, serverIncoming);
+        if (typeof this.debug === "function") {
+          this.debug("send PING every " + ttl + "ms");
+        }
+        this.pinger = Stomp.setInterval(ttl, (function(_this) {
+          return function() {
+            _this.ws.send(Byte.LF);
+            return typeof _this.debug === "function" ? _this.debug(">>> PING") : void 0;
+          };
+        })(this));
+      }
+      if (!(this.heartbeat.incoming === 0 || serverOutgoing === 0)) {
+        ttl = Math.max(this.heartbeat.incoming, serverOutgoing);
+        if (typeof this.debug === "function") {
+          this.debug("check PONG every " + ttl + "ms");
+        }
+        return this.ponger = Stomp.setInterval(ttl, (function(_this) {
+          return function() {
+            var delta;
+            delta = now() - _this.serverActivity;
+            if (delta > ttl * 2) {
+              if (typeof _this.debug === "function") {
+                _this.debug("did not receive server activity for the last " + delta + "ms");
+              }
+              return _this.ws.close();
+            }
+          };
+        })(this));
+      }
+    };
+
+    Client.prototype._parseConnect = function() {
+      var args, connectCallback, errorCallback, headers;
+      args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
+      headers = {};
+      switch (args.length) {
+        case 2:
+          headers = args[0], connectCallback = args[1];
+          break;
+        case 3:
+          if (args[1] instanceof Function) {
+            headers = args[0], connectCallback = args[1], errorCallback = args[2];
+          } else {
+            headers.login = args[0], headers.passcode = args[1], connectCallback = args[2];
+          }
+          break;
+        case 4:
+          headers.login = args[0], headers.passcode = args[1], connectCallback = args[2], errorCallback = args[3];
+          break;
+        default:
+          headers.login = args[0], headers.passcode = args[1], connectCallback = args[2], errorCallback = args[3], headers.host = args[4];
+      }
+      return [headers, connectCallback, errorCallback];
+    };
+
+    Client.prototype.connect = function() {
+      var args, errorCallback, headers, out;
+      args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
+      out = this._parseConnect.apply(this, args);
+      headers = out[0], this.connectCallback = out[1], errorCallback = out[2];
+      if (typeof this.debug === "function") {
+        this.debug("Opening Web Socket...");
+      }
+      this.ws.onmessage = (function(_this) {
+        return function(evt) {
+          var arr, c, client, data, frame, messageID, onreceive, subscription, _i, _len, _ref, _results;
+          data = typeof ArrayBuffer !== 'undefined' && evt.data instanceof ArrayBuffer ? (arr = new Uint8Array(evt.data), typeof _this.debug === "function" ? _this.debug("--- got data length: " + arr.length) : void 0, ((function() {
+            var _i, _len, _results;
+            _results = [];
+            for (_i = 0, _len = arr.length; _i < _len; _i++) {
+              c = arr[_i];
+              _results.push(String.fromCharCode(c));
+            }
+            return _results;
+          })()).join('')) : evt.data;
+          _this.serverActivity = now();
+          if (data === Byte.LF) {
+            if (typeof _this.debug === "function") {
+              _this.debug("<<< PONG");
+            }
+            return;
+          }
+          if (typeof _this.debug === "function") {
+            _this.debug("<<< " + data);
+          }
+          _ref = Frame.unmarshall(data);
+          _results = [];
+          for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+            frame = _ref[_i];
+            switch (frame.command) {
+              case "CONNECTED":
+                if (typeof _this.debug === "function") {
+                  _this.debug("connected to server " + frame.headers.server);
+                }
+                _this.connected = true;
+                _this._setupHeartbeat(frame.headers);
+                _results.push(typeof _this.connectCallback === "function" ? _this.connectCallback(frame) : void 0);
+                break;
+              case "MESSAGE":
+                subscription = frame.headers.subscription;
+                onreceive = _this.subscriptions[subscription] || _this.onreceive;
+                if (onreceive) {
+                  client = _this;
+                  messageID = frame.headers["message-id"];
+                  frame.ack = function(headers) {
+                    if (headers == null) {
+                      headers = {};
+                    }
+                    return client.ack(messageID, subscription, headers);
+                  };
+                  frame.nack = function(headers) {
+                    if (headers == null) {
+                      headers = {};
+                    }
+                    return client.nack(messageID, subscription, headers);
+                  };
+                  _results.push(onreceive(frame));
+                } else {
+                  _results.push(typeof _this.debug === "function" ? _this.debug("Unhandled received MESSAGE: " + frame) : void 0);
+                }
+                break;
+              case "RECEIPT":
+                _results.push(typeof _this.onreceipt === "function" ? _this.onreceipt(frame) : void 0);
+                break;
+              case "ERROR":
+                _results.push(typeof errorCallback === "function" ? errorCallback(frame) : void 0);
+                break;
+              default:
+                _results.push(typeof _this.debug === "function" ? _this.debug("Unhandled frame: " + frame) : void 0);
+            }
+          }
+          return _results;
+        };
+      })(this);
+      this.ws.onclose = (function(_this) {
+        return function() {
+          var msg;
+          msg = "Whoops! Lost connection to " + _this.ws.url;
+          if (typeof _this.debug === "function") {
+            _this.debug(msg);
+          }
+          _this._cleanUp();
+          return typeof errorCallback === "function" ? errorCallback(msg) : void 0;
+        };
+      })(this);
+      return this.ws.onopen = (function(_this) {
+        return function() {
+          if (typeof _this.debug === "function") {
+            _this.debug('Web Socket Opened...');
+          }
+          headers["accept-version"] = Stomp.VERSIONS.supportedVersions();
+          headers["heart-beat"] = [_this.heartbeat.outgoing, _this.heartbeat.incoming].join(',');
+          return _this._transmit("CONNECT", headers);
+        };
+      })(this);
+    };
+
+    Client.prototype.disconnect = function(disconnectCallback) {
+      this._transmit("DISCONNECT");
+      this.ws.onclose = null;
+      this.ws.close();
+      this._cleanUp();
+      return typeof disconnectCallback === "function" ? disconnectCallback() : void 0;
+    };
+
+    Client.prototype._cleanUp = function() {
+      this.connected = false;
+      if (this.pinger) {
+        Stomp.clearInterval(this.pinger);
+      }
+      if (this.ponger) {
+        return Stomp.clearInterval(this.ponger);
+      }
+    };
+
+    Client.prototype.send = function(destination, headers, body) {
+      if (headers == null) {
+        headers = {};
+      }
+      if (body == null) {
+        body = '';
+      }
+      headers.destination = destination;
+      return this._transmit("SEND", headers, body);
+    };
+
+    Client.prototype.subscribe = function(destination, callback, headers) {
+      var client;
+      if (headers == null) {
+        headers = {};
+      }
+      if (!headers.id) {
+        headers.id = "sub-" + this.counter++;
+      }
+      headers.destination = destination;
+      this.subscriptions[headers.id] = callback;
+      this._transmit("SUBSCRIBE", headers);
+      client = this;
+      return {
+        id: headers.id,
+        unsubscribe: function() {
+          return client.unsubscribe(headers.id);
+        }
+      };
+    };
+
+    Client.prototype.unsubscribe = function(id) {
+      delete this.subscriptions[id];
+      return this._transmit("UNSUBSCRIBE", {
+        id: id
+      });
+    };
+
+    Client.prototype.begin = function(transaction) {
+      var client, txid;
+      txid = transaction || "tx-" + this.counter++;
+      this._transmit("BEGIN", {
+        transaction: txid
+      });
+      client = this;
+      return {
+        id: txid,
+        commit: function() {
+          return client.commit(txid);
+        },
+        abort: function() {
+          return client.abort(txid);
+        }
+      };
+    };
+
+    Client.prototype.commit = function(transaction) {
+      return this._transmit("COMMIT", {
+        transaction: transaction
+      });
+    };
+
+    Client.prototype.abort = function(transaction) {
+      return this._transmit("ABORT", {
+        transaction: transaction
+      });
+    };
+
+    Client.prototype.ack = function(messageID, subscription, headers) {
+      if (headers == null) {
+        headers = {};
+      }
+      headers["message-id"] = messageID;
+      headers.subscription = subscription;
+      return this._transmit("ACK", headers);
+    };
+
+    Client.prototype.nack = function(messageID, subscription, headers) {
+      if (headers == null) {
+        headers = {};
+      }
+      headers["message-id"] = messageID;
+      headers.subscription = subscription;
+      return this._transmit("NACK", headers);
+    };
+
+    return Client;
+
+  })();
+
+  Stomp = {
+    VERSIONS: {
+      V1_0: '1.0',
+      V1_1: '1.1',
+      V1_2: '1.2',
+      supportedVersions: function() {
+        return '1.1,1.0';
+      }
+    },
+    client: function(url, protocols) {
+      var klass, ws;
+      if (protocols == null) {
+        protocols = ['v10.stomp', 'v11.stomp'];
+      }
+      klass = Stomp.WebSocketClass || WebSocket;
+      ws = new klass(url, protocols);
+      return new Client(ws);
+    },
+    over: function(ws) {
+      return new Client(ws);
+    },
+    Frame: Frame
+  };
+
+  if (typeof window !== "undefined" && window !== null) {
+    Stomp.setInterval = function(interval, f) {
+      return window.setInterval(f, interval);
+    };
+    Stomp.clearInterval = function(id) {
+      return window.clearInterval(id);
+    };
+    window.Stomp = Stomp;
+  } else if (typeof exports !== "undefined" && exports !== null) {
+    exports.Stomp = Stomp;
+  } else {
+    self.Stomp = Stomp;
+  }
+
+}).call(this);

+ 59 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/trustedDevices.js

@@ -0,0 +1,59 @@
+/*eslint-disable no-unused-vars*/
+$('#myTabs a').click(function (e) {
+    e.preventDefault();
+    $(this).tab('show');
+});
+
+var revokeDevice = function (key) {
+    $.ajax({
+        type: 'post',
+        url: urls.revokeRecord,
+        data: {'key': key},
+        success: function () {
+            var table = $('#trustedDevicesTable').DataTable();
+            table
+                .rows($('#' + key).parents('tr'))
+                .remove()
+                .draw();
+        },
+        error: function () {
+            //console.log('Could not remove record');
+        }
+    });
+};
+
+var trustedDevices = (function () {
+    var getData = function () {
+        $.getJSON(urls.getRecords, function (data) {
+            trustedDevicesTable(data);
+        });
+    };
+
+    var trustedDevicesTable = function (jsonData) {
+        var t = $('#trustedDevicesTable').DataTable({
+            'order': [[2, 'desc']],
+            columnDefs: [
+                {'width': '20%', 'targets': 0},
+                {'width': '10%', 'targets': 1},
+                {'width': '60%', 'targets': 2},
+                {'width': '10%', 'targets': 3},
+                {'width': '30%', 'targets': 4}
+            ]
+        });
+        for (var i = 0; i < jsonData.length; i++) {
+            var rec = jsonData[i];
+            t.row.add([
+                rec.name,
+                rec.principal,
+                new Date(rec.date),
+                rec.geography,
+                '<button id=\'' + rec.key + '\' class=\'btn btn-sm btn-danger\' type=\'button\' value=\'ALL\' onclick=\'revokeDevice("' + rec.key + '")\'>Revoke</button>'
+            ]).draw(false);
+        }
+    };
+
+    // initialization *******
+    (function init() {
+        getData();
+    })();
+})();

+ 748 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/u2f/u2f-api.js

@@ -0,0 +1,748 @@
+//Copyright 2014-2015 Google Inc. All rights reserved.
+
+//Use of this source code is governed by a BSD-style
+//license that can be found in the LICENSE file or at
+//https://developers.google.com/open-source/licenses/bsd
+
+/**
+ * @fileoverview The U2F api.
+ */
+'use strict';
+
+
+/**
+ * Namespace for the U2F api.
+ * @type {Object}
+ */
+var u2f = u2f || {};
+
+/**
+ * FIDO U2F Javascript API Version
+ * @number
+ */
+var js_api_version;
+
+/**
+ * The U2F extension id
+ * @const {string}
+ */
+// The Chrome packaged app extension ID.
+// Uncomment this if you want to deploy a server instance that uses
+// the package Chrome app and does not require installing the U2F Chrome extension.
+u2f.EXTENSION_ID = 'kmendfapggjehodndflmmgagdbamhnfd';
+// The U2F Chrome extension ID.
+// Uncomment this if you want to deploy a server instance that uses
+// the U2F Chrome extension to authenticate.
+// u2f.EXTENSION_ID = 'pfboblefjcgdjicmnffhdgionmgcdmne';
+
+
+/**
+ * Message types for messsages to/from the extension
+ * @const
+ * @enum {string}
+ */
+u2f.MessageTypes = {
+    'U2F_REGISTER_REQUEST': 'u2f_register_request',
+    'U2F_REGISTER_RESPONSE': 'u2f_register_response',
+    'U2F_SIGN_REQUEST': 'u2f_sign_request',
+    'U2F_SIGN_RESPONSE': 'u2f_sign_response',
+    'U2F_GET_API_VERSION_REQUEST': 'u2f_get_api_version_request',
+    'U2F_GET_API_VERSION_RESPONSE': 'u2f_get_api_version_response'
+};
+
+
+/**
+ * Response status codes
+ * @const
+ * @enum {number}
+ */
+u2f.ErrorCodes = {
+    'OK': 0,
+    'OTHER_ERROR': 1,
+    'BAD_REQUEST': 2,
+    'CONFIGURATION_UNSUPPORTED': 3,
+    'DEVICE_INELIGIBLE': 4,
+    'TIMEOUT': 5
+};
+
+
+/**
+ * A message for registration requests
+ * @typedef {{
+ *   type: u2f.MessageTypes,
+ *   appId: ?string,
+ *   timeoutSeconds: ?number,
+ *   requestId: ?number
+ * }}
+ */
+u2f.U2fRequest;
+
+
+/**
+ * A message for registration responses
+ * @typedef {{
+ *   type: u2f.MessageTypes,
+ *   responseData: (u2f.Error | u2f.RegisterResponse | u2f.SignResponse),
+ *   requestId: ?number
+ * }}
+ */
+u2f.U2fResponse;
+
+
+/**
+ * An error object for responses
+ * @typedef {{
+ *   errorCode: u2f.ErrorCodes,
+ *   errorMessage: ?string
+ * }}
+ */
+u2f.Error;
+
+/**
+ * Data object for a single sign request.
+ * @typedef {enum {BLUETOOTH_RADIO, BLUETOOTH_LOW_ENERGY, USB, NFC}}
+ */
+u2f.Transport;
+
+
+/**
+ * Data object for a single sign request.
+ * @typedef {Array<u2f.Transport>}
+ */
+u2f.Transports;
+
+/**
+ * Data object for a single sign request.
+ * @typedef {{
+ *   version: string,
+ *   challenge: string,
+ *   keyHandle: string,
+ *   appId: string
+ * }}
+ */
+u2f.SignRequest;
+
+
+/**
+ * Data object for a sign response.
+ * @typedef {{
+ *   keyHandle: string,
+ *   signatureData: string,
+ *   clientData: string
+ * }}
+ */
+u2f.SignResponse;
+
+
+/**
+ * Data object for a registration request.
+ * @typedef {{
+ *   version: string,
+ *   challenge: string
+ * }}
+ */
+u2f.RegisterRequest;
+
+
+/**
+ * Data object for a registration response.
+ * @typedef {{
+ *   version: string,
+ *   keyHandle: string,
+ *   transports: Transports,
+ *   appId: string
+ * }}
+ */
+u2f.RegisterResponse;
+
+
+/**
+ * Data object for a registered key.
+ * @typedef {{
+ *   version: string,
+ *   keyHandle: string,
+ *   transports: ?Transports,
+ *   appId: ?string
+ * }}
+ */
+u2f.RegisteredKey;
+
+
+/**
+ * Data object for a get API register response.
+ * @typedef {{
+ *   js_api_version: number
+ * }}
+ */
+u2f.GetJsApiVersionResponse;
+
+
+//Low level MessagePort API support
+
+/**
+ * Sets up a MessagePort to the U2F extension using the
+ * available mechanisms.
+ * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback
+ */
+u2f.getMessagePort = function(callback) {
+    if (typeof chrome != 'undefined' && chrome.runtime) {
+        // The actual message here does not matter, but we need to get a reply
+        // for the callback to run. Thus, send an empty signature request
+        // in order to get a failure response.
+        var msg = {
+            type: u2f.MessageTypes.U2F_SIGN_REQUEST,
+            signRequests: []
+        };
+        chrome.runtime.sendMessage(u2f.EXTENSION_ID, msg, function() {
+            if (!chrome.runtime.lastError) {
+                // We are on a whitelisted origin and can talk directly
+                // with the extension.
+                u2f.getChromeRuntimePort_(callback);
+            } else {
+                // chrome.runtime was available, but we couldn't message
+                // the extension directly, use iframe
+                u2f.getIframePort_(callback);
+            }
+        });
+    } else if (u2f.isAndroidChrome_()) {
+        u2f.getAuthenticatorPort_(callback);
+    } else if (u2f.isIosChrome_()) {
+        u2f.getIosPort_(callback);
+    } else {
+        // chrome.runtime was not available at all, which is normal
+        // when this origin doesn't have access to any extensions.
+        u2f.getIframePort_(callback);
+    }
+};
+
+/**
+ * Detect chrome running on android based on the browser's useragent.
+ * @private
+ */
+u2f.isAndroidChrome_ = function() {
+    var userAgent = navigator.userAgent;
+    return userAgent.indexOf('Chrome') != -1 &&
+        userAgent.indexOf('Android') != -1;
+};
+
+/**
+ * Detect chrome running on iOS based on the browser's platform.
+ * @private
+ */
+u2f.isIosChrome_ = function() {
+    return ["iPhone", "iPad", "iPod"].indexOf(navigator.platform) > -1;
+};
+
+/**
+ * Connects directly to the extension via chrome.runtime.connect.
+ * @param {function(u2f.WrappedChromeRuntimePort_)} callback
+ * @private
+ */
+u2f.getChromeRuntimePort_ = function(callback) {
+    var port = chrome.runtime.connect(u2f.EXTENSION_ID,
+        {'includeTlsChannelId': true});
+    setTimeout(function() {
+        callback(new u2f.WrappedChromeRuntimePort_(port));
+    }, 0);
+};
+
+/**
+ * Return a 'port' abstraction to the Authenticator app.
+ * @param {function(u2f.WrappedAuthenticatorPort_)} callback
+ * @private
+ */
+u2f.getAuthenticatorPort_ = function(callback) {
+    setTimeout(function() {
+        callback(new u2f.WrappedAuthenticatorPort_());
+    }, 0);
+};
+
+/**
+ * Return a 'port' abstraction to the iOS client app.
+ * @param {function(u2f.WrappedIosPort_)} callback
+ * @private
+ */
+u2f.getIosPort_ = function(callback) {
+    setTimeout(function() {
+        callback(new u2f.WrappedIosPort_());
+    }, 0);
+};
+
+/**
+ * A wrapper for chrome.runtime.Port that is compatible with MessagePort.
+ * @param {Port} port
+ * @constructor
+ * @private
+ */
+u2f.WrappedChromeRuntimePort_ = function(port) {
+    this.port_ = port;
+};
+
+/**
+ * Format and return a sign request compliant with the JS API version supported by the extension.
+ * @param {Array<u2f.SignRequest>} signRequests
+ * @param {number} timeoutSeconds
+ * @param {number} reqId
+ * @return {Object}
+ */
+u2f.formatSignRequest_ =
+    function(appId, challenge, registeredKeys, timeoutSeconds, reqId) {
+        if (js_api_version === undefined || js_api_version < 1.1) {
+            // Adapt request to the 1.0 JS API
+            var signRequests = [];
+            for (var i = 0; i < registeredKeys.length; i++) {
+                signRequests[i] = {
+                    version: registeredKeys[i].version,
+                    challenge: challenge,
+                    keyHandle: registeredKeys[i].keyHandle,
+                    appId: appId
+                };
+            }
+            return {
+                type: u2f.MessageTypes.U2F_SIGN_REQUEST,
+                signRequests: signRequests,
+                timeoutSeconds: timeoutSeconds,
+                requestId: reqId
+            };
+        }
+        // JS 1.1 API
+        return {
+            type: u2f.MessageTypes.U2F_SIGN_REQUEST,
+            appId: appId,
+            challenge: challenge,
+            registeredKeys: registeredKeys,
+            timeoutSeconds: timeoutSeconds,
+            requestId: reqId
+        };
+    };
+
+/**
+ * Format and return a register request compliant with the JS API version supported by the extension..
+ * @param {Array<u2f.SignRequest>} signRequests
+ * @param {Array<u2f.RegisterRequest>} signRequests
+ * @param {number} timeoutSeconds
+ * @param {number} reqId
+ * @return {Object}
+ */
+u2f.formatRegisterRequest_ =
+    function(appId, registeredKeys, registerRequests, timeoutSeconds, reqId) {
+        if (js_api_version === undefined || js_api_version < 1.1) {
+            // Adapt request to the 1.0 JS API
+            for (var i = 0; i < registerRequests.length; i++) {
+                registerRequests[i].appId = appId;
+            }
+            var signRequests = [];
+            for (var i = 0; i < registeredKeys.length; i++) {
+                signRequests[i] = {
+                    version: registeredKeys[i].version,
+                    challenge: registerRequests[0],
+                    keyHandle: registeredKeys[i].keyHandle,
+                    appId: appId
+                };
+            }
+            return {
+                type: u2f.MessageTypes.U2F_REGISTER_REQUEST,
+                signRequests: signRequests,
+                registerRequests: registerRequests,
+                timeoutSeconds: timeoutSeconds,
+                requestId: reqId
+            };
+        }
+        // JS 1.1 API
+        return {
+            type: u2f.MessageTypes.U2F_REGISTER_REQUEST,
+            appId: appId,
+            registerRequests: registerRequests,
+            registeredKeys: registeredKeys,
+            timeoutSeconds: timeoutSeconds,
+            requestId: reqId
+        };
+    };
+
+
+/**
+ * Posts a message on the underlying channel.
+ * @param {Object} message
+ */
+u2f.WrappedChromeRuntimePort_.prototype.postMessage = function(message) {
+    this.port_.postMessage(message);
+};
+
+
+/**
+ * Emulates the HTML 5 addEventListener interface. Works only for the
+ * onmessage event, which is hooked up to the chrome.runtime.Port.onMessage.
+ * @param {string} eventName
+ * @param {function({data: Object})} handler
+ */
+u2f.WrappedChromeRuntimePort_.prototype.addEventListener =
+    function(eventName, handler) {
+        var name = eventName.toLowerCase();
+        if (name == 'message' || name == 'onmessage') {
+            this.port_.onMessage.addListener(function(message) {
+                // Emulate a minimal MessageEvent object
+                handler({'data': message});
+            });
+        } else {
+            console.error('WrappedChromeRuntimePort only supports onMessage');
+        }
+    };
+
+/**
+ * Wrap the Authenticator app with a MessagePort interface.
+ * @constructor
+ * @private
+ */
+u2f.WrappedAuthenticatorPort_ = function() {
+    this.requestId_ = -1;
+    this.requestObject_ = null;
+}
+
+/**
+ * Launch the Authenticator intent.
+ * @param {Object} message
+ */
+u2f.WrappedAuthenticatorPort_.prototype.postMessage = function(message) {
+    var intentUrl =
+        u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ +
+        ';S.request=' + encodeURIComponent(JSON.stringify(message)) +
+        ';end';
+    document.location = intentUrl;
+};
+
+/**
+ * Tells what type of port this is.
+ * @return {String} port type
+ */
+u2f.WrappedAuthenticatorPort_.prototype.getPortType = function() {
+    return "WrappedAuthenticatorPort_";
+};
+
+
+/**
+ * Emulates the HTML 5 addEventListener interface.
+ * @param {string} eventName
+ * @param {function({data: Object})} handler
+ */
+u2f.WrappedAuthenticatorPort_.prototype.addEventListener = function(eventName, handler) {
+    var name = eventName.toLowerCase();
+    if (name == 'message') {
+        var self = this;
+        /* Register a callback to that executes when
+         * chrome injects the response. */
+        window.addEventListener(
+            'message', self.onRequestUpdate_.bind(self, handler), false);
+    } else {
+        console.error('WrappedAuthenticatorPort only supports message');
+    }
+};
+
+/**
+ * Callback invoked  when a response is received from the Authenticator.
+ * @param function({data: Object}) callback
+ * @param {Object} message message Object
+ */
+u2f.WrappedAuthenticatorPort_.prototype.onRequestUpdate_ =
+    function(callback, message) {
+        var messageObject = JSON.parse(message.data);
+        var intentUrl = messageObject['intentURL'];
+
+        var errorCode = messageObject['errorCode'];
+        var responseObject = null;
+        if (messageObject.hasOwnProperty('data')) {
+            responseObject = /** @type {Object} */ (
+                JSON.parse(messageObject['data']));
+        }
+
+        callback({'data': responseObject});
+    };
+
+/**
+ * Base URL for intents to Authenticator.
+ * @const
+ * @private
+ */
+u2f.WrappedAuthenticatorPort_.INTENT_URL_BASE_ =
+    'intent:#Intent;action=com.google.android.apps.authenticator.AUTHENTICATE';
+
+/**
+ * Wrap the iOS client app with a MessagePort interface.
+ * @constructor
+ * @private
+ */
+u2f.WrappedIosPort_ = function() {};
+
+/**
+ * Launch the iOS client app request
+ * @param {Object} message
+ */
+u2f.WrappedIosPort_.prototype.postMessage = function(message) {
+    var str = JSON.stringify(message);
+    var url = "u2f://auth?" + encodeURI(str);
+    location.replace(url);
+};
+
+/**
+ * Tells what type of port this is.
+ * @return {String} port type
+ */
+u2f.WrappedIosPort_.prototype.getPortType = function() {
+    return "WrappedIosPort_";
+};
+
+/**
+ * Emulates the HTML 5 addEventListener interface.
+ * @param {string} eventName
+ * @param {function({data: Object})} handler
+ */
+u2f.WrappedIosPort_.prototype.addEventListener = function(eventName, handler) {
+    var name = eventName.toLowerCase();
+    if (name !== 'message') {
+        console.error('WrappedIosPort only supports message');
+    }
+};
+
+/**
+ * Sets up an embedded trampoline iframe, sourced from the extension.
+ * @param {function(MessagePort)} callback
+ * @private
+ */
+u2f.getIframePort_ = function(callback) {
+    // Create the iframe
+    var iframeOrigin = 'chrome-extension://' + u2f.EXTENSION_ID;
+    var iframe = document.createElement('iframe');
+    iframe.src = iframeOrigin + '/u2f-comms.html';
+    iframe.setAttribute('style', 'display:none');
+    document.body.appendChild(iframe);
+
+    var channel = new MessageChannel();
+    var ready = function(message) {
+        if (message.data == 'ready') {
+            channel.port1.removeEventListener('message', ready);
+            callback(channel.port1);
+        } else {
+            console.error('First event on iframe port was not "ready"');
+        }
+    };
+    channel.port1.addEventListener('message', ready);
+    channel.port1.start();
+
+    iframe.addEventListener('load', function() {
+        // Deliver the port to the iframe and initialize
+        iframe.contentWindow.postMessage('init', iframeOrigin, [channel.port2]);
+    });
+};
+
+
+//High-level JS API
+
+/**
+ * Default extension response timeout in seconds.
+ * @const
+ */
+u2f.EXTENSION_TIMEOUT_SEC = 30;
+
+/**
+ * A singleton instance for a MessagePort to the extension.
+ * @type {MessagePort|u2f.WrappedChromeRuntimePort_}
+ * @private
+ */
+u2f.port_ = null;
+
+/**
+ * Callbacks waiting for a port
+ * @type {Array<function((MessagePort|u2f.WrappedChromeRuntimePort_))>}
+ * @private
+ */
+u2f.waitingForPort_ = [];
+
+/**
+ * A counter for requestIds.
+ * @type {number}
+ * @private
+ */
+u2f.reqCounter_ = 0;
+
+/**
+ * A map from requestIds to client callbacks
+ * @type {Object.<number,(function((u2f.Error|u2f.RegisterResponse))
+ *                       |function((u2f.Error|u2f.SignResponse)))>}
+ * @private
+ */
+u2f.callbackMap_ = {};
+
+/**
+ * Creates or retrieves the MessagePort singleton to use.
+ * @param {function((MessagePort|u2f.WrappedChromeRuntimePort_))} callback
+ * @private
+ */
+u2f.getPortSingleton_ = function(callback) {
+    if (u2f.port_) {
+        callback(u2f.port_);
+    } else {
+        if (u2f.waitingForPort_.length == 0) {
+            u2f.getMessagePort(function(port) {
+                u2f.port_ = port;
+                u2f.port_.addEventListener('message',
+                    /** @type {function(Event)} */ (u2f.responseHandler_));
+
+                // Careful, here be async callbacks. Maybe.
+                while (u2f.waitingForPort_.length)
+                    u2f.waitingForPort_.shift()(u2f.port_);
+            });
+        }
+        u2f.waitingForPort_.push(callback);
+    }
+};
+
+/**
+ * Handles response messages from the extension.
+ * @param {MessageEvent.<u2f.Response>} message
+ * @private
+ */
+u2f.responseHandler_ = function(message) {
+    var response = message.data;
+    var reqId = response['requestId'];
+    if (!reqId || !u2f.callbackMap_[reqId]) {
+        console.error('Unknown or missing requestId in response.');
+        return;
+    }
+    var cb = u2f.callbackMap_[reqId];
+    delete u2f.callbackMap_[reqId];
+    cb(response['responseData']);
+};
+
+/**
+ * Dispatches an array of sign requests to available U2F tokens.
+ * If the JS API version supported by the extension is unknown, it first sends a
+ * message to the extension to find out the supported API version and then it sends
+ * the sign request.
+ * @param {string=} appId
+ * @param {string=} challenge
+ * @param {Array<u2f.RegisteredKey>} registeredKeys
+ * @param {function((u2f.Error|u2f.SignResponse))} callback
+ * @param {number=} opt_timeoutSeconds
+ */
+u2f.sign = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) {
+    if (js_api_version === undefined) {
+        // Send a message to get the extension to JS API version, then send the actual sign request.
+        u2f.getApiVersion(
+            function (response) {
+                js_api_version = response['js_api_version'] === undefined ? 0 : response['js_api_version'];
+                console.log("Extension JS API Version: ", js_api_version);
+                u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds);
+            });
+    } else {
+        // We know the JS API version. Send the actual sign request in the supported API version.
+        u2f.sendSignRequest(appId, challenge, registeredKeys, callback, opt_timeoutSeconds);
+    }
+};
+
+/**
+ * Dispatches an array of sign requests to available U2F tokens.
+ * @param {string=} appId
+ * @param {string=} challenge
+ * @param {Array<u2f.RegisteredKey>} registeredKeys
+ * @param {function((u2f.Error|u2f.SignResponse))} callback
+ * @param {number=} opt_timeoutSeconds
+ */
+u2f.sendSignRequest = function(appId, challenge, registeredKeys, callback, opt_timeoutSeconds) {
+    u2f.getPortSingleton_(function(port) {
+        var reqId = ++u2f.reqCounter_;
+        u2f.callbackMap_[reqId] = callback;
+        var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ?
+            opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC);
+        var req = u2f.formatSignRequest_(appId, challenge, registeredKeys, timeoutSeconds, reqId);
+        port.postMessage(req);
+    });
+};
+
+/**
+ * Dispatches register requests to available U2F tokens. An array of sign
+ * requests identifies already registered tokens.
+ * If the JS API version supported by the extension is unknown, it first sends a
+ * message to the extension to find out the supported API version and then it sends
+ * the register request.
+ * @param {string=} appId
+ * @param {Array<u2f.RegisterRequest>} registerRequests
+ * @param {Array<u2f.RegisteredKey>} registeredKeys
+ * @param {function((u2f.Error|u2f.RegisterResponse))} callback
+ * @param {number=} opt_timeoutSeconds
+ */
+u2f.register = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) {
+    if (js_api_version === undefined) {
+        // Send a message to get the extension to JS API version, then send the actual register request.
+        u2f.getApiVersion(
+            function (response) {
+                js_api_version = response['js_api_version'] === undefined ? 0: response['js_api_version'];
+                console.log("Extension JS API Version: ", js_api_version);
+                u2f.sendRegisterRequest(appId, registerRequests, registeredKeys,
+                    callback, opt_timeoutSeconds);
+            });
+    } else {
+        // We know the JS API version. Send the actual register request in the supported API version.
+        u2f.sendRegisterRequest(appId, registerRequests, registeredKeys,
+            callback, opt_timeoutSeconds);
+    }
+};
+
+/**
+ * Dispatches register requests to available U2F tokens. An array of sign
+ * requests identifies already registered tokens.
+ * @param {string=} appId
+ * @param {Array<u2f.RegisterRequest>} registerRequests
+ * @param {Array<u2f.RegisteredKey>} registeredKeys
+ * @param {function((u2f.Error|u2f.RegisterResponse))} callback
+ * @param {number=} opt_timeoutSeconds
+ */
+u2f.sendRegisterRequest = function(appId, registerRequests, registeredKeys, callback, opt_timeoutSeconds) {
+    u2f.getPortSingleton_(function(port) {
+        var reqId = ++u2f.reqCounter_;
+        u2f.callbackMap_[reqId] = callback;
+        var timeoutSeconds = (typeof opt_timeoutSeconds !== 'undefined' ?
+            opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC);
+        var req = u2f.formatRegisterRequest_(
+            appId, registeredKeys, registerRequests, timeoutSeconds, reqId);
+        port.postMessage(req);
+    });
+};
+
+
+/**
+ * Dispatches a message to the extension to find out the supported
+ * JS API version.
+ * If the user is on a mobile phone and is thus using Google Authenticator instead
+ * of the Chrome extension, don't send the request and simply return 0.
+ * @param {function((u2f.Error|u2f.GetJsApiVersionResponse))} callback
+ * @param {number=} opt_timeoutSeconds
+ */
+u2f.getApiVersion = function(callback, opt_timeoutSeconds) {
+    u2f.getPortSingleton_(function(port) {
+        // If we are using Android Google Authenticator or iOS client app,
+        // do not fire an intent to ask which JS API version to use.
+        if (port.getPortType) {
+            var apiVersion;
+            switch (port.getPortType()) {
+                case 'WrappedIosPort_':
+                case 'WrappedAuthenticatorPort_':
+                    apiVersion = 1.1;
+                    break;
+
+                default:
+                    apiVersion = 0;
+                    break;
+            }
+            callback({ 'js_api_version': apiVersion });
+            return;
+        }
+        var reqId = ++u2f.reqCounter_;
+        u2f.callbackMap_[reqId] = callback;
+        var req = {
+            type: u2f.MessageTypes.U2F_GET_API_VERSION_REQUEST,
+            timeoutSeconds: (typeof opt_timeoutSeconds !== 'undefined' ?
+                opt_timeoutSeconds : u2f.EXTENSION_TIMEOUT_SEC),
+            requestId: reqId
+        };
+        port.postMessage(req);
+    });
+};

+ 157 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/viewConfig.js

@@ -0,0 +1,157 @@
+/* globals $, urls, updateEnabled */
+(function () {
+    var origData;
+
+    var setupButtonClickOnRefreshedProperties = function () {
+        $('#formRefreshCAS button').on('click', function (e) {
+            e.preventDefault();
+
+            // Show the refreshModal
+            var myModal = $('#refreshModal').modal({
+                keyboard: false,
+                backdrop: 'static'
+            });
+
+            var primaryButton = myModal.find('.modal-footer button.btn-primary');
+
+            // Disable the primary button
+            primaryButton.prop('disabled', true).text('Refreshing...');
+
+            $.post(e.target.parentNode.action, function (data) {
+                if (data.length !== 0) {
+                    $('#refreshModal-label').text('Refreshed Properties');
+                    myModal.find('.modal-content .modal-body').html(
+                        '<pre>' + data + '</pre>' +
+            '<p>Click &quot;OK&quot; to reload page.</p>'
+                    );
+                } else {
+                    myModal.find('.modal-header .modal-title').text('Properties Refreshed');
+                    myModal.find('.modal-content .modal-body').html(
+                        '<p>Click &quot;OK&quot; to reload page.</p>'
+                    );
+                }
+            })
+                .done(function () {
+                    primaryButton.prop('disabled', false).text('Reload page').on('click', function (e) {
+                        e.preventDefault();
+                        window.location.reload();
+                    });
+                })
+                .fail(function (jqXHR) {
+                    $('#refreshModal-label').text('Problem With Refreshing Properties');
+                    myModal.find('.modal-content .modal-body').html(
+                        '<div class="alert alert-warning"><strong>Status: ' + jqXHR.status + '</strong><p/>Unable to refresh the properties. Please try again.</div>'
+                    );
+                    primaryButton.prop('disabled', false).text('OK').on('click', function (e) {
+                        e.preventDefault();
+                        myModal.modal('hide');
+                    });
+                });
+        });
+    };
+
+    var createDataTable = function () {
+        $('#viewConfigsTable').DataTable({
+            'autoWidth': false,
+            'initComplete': function (settings, json) {
+                if (!json) {
+                    $('#loadingMessage').hide();
+                    $('#viewConfigError').show();
+                    $('#view-configuration').hide();
+                } else {
+                    $('#loadingMessage').hide();
+                    $('#viewConfigError').hide();
+                    $('#view-configuration').show();
+                }
+            },
+            'drawCallback': function () {
+                var api = this.api();
+                if (api.page.info().pages > 1) {
+                    $('#' + $.fn.dataTable.tables()[0].id + '_paginate')[0].style.display = 'block';
+                } else {
+                    $('#' + $.fn.dataTable.tables()[0].id + '_paginate')[0].style.display = 'none';
+                }
+
+                if (updateEnabled) {
+                    editTable();
+                }
+            },
+            'processing': true,
+            'ajax': {
+                'url': urls.getConfiguration,
+                'dataSrc': function (json) {
+                    var returnData = [];
+                    for (var item in json) {
+                        returnData.push({
+                            'key': '<code>' + item + '</code>',
+                            'value': '' + json[item] + ''
+                        });
+                    }
+                    return returnData;
+                }
+            },
+            'columns': [
+                {'data': 'key', 'className': 'col-xs-6 key'},
+                {'data': 'value', 'className': 'col-xs-6 value'}
+            ],
+            'pageLength': 50
+        });
+    };
+
+    var getRowData = function (row) {
+        var tds = row.find('td');
+        var tmp = {};
+        $.each(tds, function (i) {
+            if (i % 2 === 0) {
+                tmp.key = $(this).text();
+            } else {
+                tmp.value = $(this).text();
+            }
+        });
+        return tmp;
+    };
+
+    var editTable = function () {
+        $('#viewConfigsTable').editableTableWidget({editor: $('<textarea>')});
+
+        $('#viewConfigsTable td').on('focus', function () {
+            origData = getRowData($(this).closest('tr'));
+        });
+
+        $('#viewConfigsTable tr').on('change', function () {
+            var newChanges = getRowData($(this));
+
+            var data = {old: origData, new: newChanges};
+            $.ajax({url: urls.updateConfiguration, data: JSON.stringify(data), type: 'POST', contentType: 'application/json'})
+                .fail(function () {
+                    var result = 'Failed to save settings.';
+                    $('#alertWrapper').addClass('alert-warning');
+                    $('#alertWrapper').removeClass('alert-success');
+
+                    $('#alertWrapper').text(result);
+                    $('#alertWrapper').show();
+                })
+                .success(function () {
+                    var result = 'Saved settings successfully.';
+                    $('#alertWrapper').removeClass('alert-warning');
+                    $('#alertWrapper').addClass('alert-success');
+
+                    $('#resultText').text(result);
+                    $('#alertWrapper').show();
+                });
+        });
+    };
+
+    // initialization *******
+    (function init () {
+        createDataTable();
+        setupButtonClickOnRefreshedProperties();
+    })();
+
+    // Public Methods
+    return {
+    /**
+     * Not used
+     */
+    };
+})();

+ 136 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/js/viewConfigMetadata.js

@@ -0,0 +1,136 @@
+$('.ui.search').search({
+    type: 'message',
+    searchDelay: 500,
+    silent: true,
+    apiSettings: {
+        silent: true,
+        cache: false,
+        url: urls.search,
+        onResponse: function (casResp) {
+            var response = {
+                results: {}
+            };
+
+            for (var key in casResp) {
+                if (casResp.hasOwnProperty(key)) {
+                    var prop = casResp[key];
+                    var group = prop.group;
+
+                    if (response.results[group] === undefined) {
+                        response.results[group] = {
+                            name: group,
+                            results: []
+                        };
+                    }
+                    response.results[group].results.push({
+                        title: prop.id,
+                        description: prop.description,
+                        defaultValue: prop.defaultValue,
+                        type: prop.type,
+                        deprecated: prop.deprecated,
+                        requiredProperty: prop.requiredProperty,
+                        requiredModule: prop.requiredModule,
+                        requiredModuleAutomated: prop.requiredModuleAutomated
+                    });
+                }
+            }
+
+            return response;
+        },
+    },
+    minCharacters: 3,
+    templates: {
+        message: function (response, type) {
+            var html = '';
+            $('#accordion').empty();
+
+            if (type === 'empty') {
+                html += '<h3><i class=\'fa fa-search\' />&nbsp;<strong>No Results</strong></h3>';
+                html += '<div class=\'alert alert-warning\'>';
+                html += '<i class=\'fa fa-exclamation-circle\'/>&nbsp;';
+                html += 'No search results could be found based on the provided query.';
+                html += '</div>';
+            }
+
+            for (var group in response.results) {
+                var modules = new Set();
+
+                html += '<h2><i class=\'fa fa-users\' />&nbsp;<strong>Group: </strong>' + group + '</h2>';
+                var props = response.results[group].results;
+
+                html += '<div>';
+
+                for (var i = 0; i < props.length; i++) {
+                    html += '<p>';
+                    var prop = props[i];
+                    html += '<i class=\'fa fa-cogs\'/>&nbsp;';
+                    html += 'Property: <code>' + prop.title + '=' + prop.defaultValue + '</code><br/>';
+                    if (prop.deprecated) {
+                        html += '<p/><div class=\'alert alert-warning\'>';
+                        html += '<i class=\'fa fa-exclamation-circle\'/>&nbsp;';
+                        html += 'This property is deprecated and will be removed in future CAS versions.';
+                        html += '</div>';
+                    }
+                    if (prop.requiredProperty) {
+                        html += '<p/><div class=\'alert alert-success\'>';
+                        html += '<i class=\'fa fa-check-square\'/>&nbsp;';
+                        html += 'This property is required.';
+                        html += '</div>';
+                    }
+
+                    html += '<i class=\'fab fa-codepen\' />&nbsp;Type: <code>' + prop.type + '</code><br/>';
+                    if (prop.description != null) {
+                        html += '<p>' + prop.description + '</p>';
+                    }
+
+                    if (prop.requiredModule != null) {
+                        modules.add(prop.requiredModule);
+                    }
+                    html += '<hr>';
+                }
+
+                if (modules.size > 0) {
+                    html += '<div>';
+                    html += '<p><i class=\'fa fa-gear\' />&nbsp;Required Modules</p>';
+                    html += '<ul class=\'nav nav-pills\'>';
+                    html += '<li class=\'active\'><a  href=\'#1\' data-toggle=\'tab\'>Maven</a></li>';
+                    html += '<li><a href=\'#2\' data-toggle=\'tab\'>Gradle</a></li>';
+                    html += '</ul>';
+
+                    for (let moduleString of modules) {
+                        html += '<div class=\'tab-content\'>';
+
+                        var moduleArr = moduleString.split('|');
+                        var module = moduleArr[0];
+
+                        var maven = '&lt;dependency&gt;\n';
+                        maven += '\t&lt;groupId&gt;org.apereo.cas&lt;/groupId&gt;\n';
+                        maven += '\t&lt;artifactId&gt;' + module + '&lt;/artifactId&gt;\n';
+                        maven += '\t&lt;cas.version&gt;${cas.version}&lt;/cas.version&gt;\n';
+                        maven += '&lt;/dependency&gt;\n';
+                        html += '<div class=\'tab-pane active\' id=\'1\'><pre>' + maven + '</pre></div>';
+
+                        var gradle = 'compile \'org.apereo.cas:' + module + ':${project.\'cas.version\'}\'\n';
+                        html += '<div class=\'tab-pane\' id=\'2\'><pre>' + gradle + '</pre></div>';
+
+                        html += '</div>';
+                    }
+
+                    html += '</div>';
+                }
+
+                html += '</div>';
+            }
+
+            html += '</div>';
+
+
+            $('#accordion').html(html);
+            $('#accordion').accordion({
+                heightStyle: 'content'
+            });
+            $('#accordion').accordion('refresh');
+            return '';
+        }
+    }
+});

+ 112 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/sass/admin.scss

@@ -0,0 +1,112 @@
+@import "components/variables";
+
+// Bootstrap and its default variables
+@import "../../../node_modules/bootstrap/scss/bootstrap";
+
+@import "partials/messages";
+
+@import "components/login";
+
+@import "components/footer";
+
+@import "partials/admin-panels";
+
+@import "components/tooltips";
+
+@import "components/alerts";
+
+@import "components/statistics-view";
+
+@import "components/view-configuration";
+
+@import "components/dashboard-view";
+
+
+html {
+  position: relative;
+  min-height: 100%;
+}
+
+body {
+  /* Margin bottom by footer height */
+  margin-bottom: 85px;
+}
+
+body>.container {
+  padding: 85px 15px 0;
+}
+
+a {
+  color: $link-color;
+}
+.logo {
+  width: 80px;
+  display: block;
+}
+
+header {
+  & > .navbar {
+    background-color: $navbar-background-color;
+    color: color-yiq($navbar-background-color);
+
+    .logo {
+      path.cls-1 {
+        @if lightness($navbar-background-color) > lightness(#aaa) {
+          fill: theme-color("cas-primary");
+        } @else {
+          fill: white;
+        }
+      }
+    }
+  }
+}
+
+
+
+// Cards
+.card {
+  margin-bottom: 2em;
+}
+
+#card-unexpired-tgts {
+  color: #3c763d;
+  background-color: #dff0d8;
+}
+#card-unexpired-sts {
+  color: #3c763d;
+  background-color: #dff0d8;
+}
+#card-expired-tgts {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+}
+#card-expired-sts {
+  color: #8a6d3b;
+  background-color: #fcf8e3;
+}
+#card-uptime {
+  background-color: #d9edf7;
+
+  .card-header {
+    color: #31708f;
+  }
+}
+#card-server-info {
+  .card-header {
+    background-color: #d9edf7;
+    color: #31708f;
+  }
+}
+
+
+.huge {
+  font-size: 30pt;
+  font-family: 'Lato', sans-serif;
+  font-weight: 300;
+}
+
+.semi-huge {
+  font-size: 18pt;
+  font-family: 'Lato', sans-serif;
+  font-weight: 300;
+}

+ 19 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/sass/authnEvents.scss

@@ -0,0 +1,19 @@
+@import 'https://fonts.googleapis.com/css?family=PT+Mono';
+
+#authnEvents {
+  .tabsContainer {
+    padding: 0 20px;
+  }
+  .btn .caret {
+    margin-left: 5px;
+  }
+}
+.tab-pane {
+  padding: 20px 10px;
+  border: 1px solid #ddd;
+  border-top: none;
+}
+
+#container {
+  width:100%;
+}

+ 83 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/sass/cas.scss

@@ -0,0 +1,83 @@
+// Bootstrap and its default variables
+@import "components/variables";
+
+@import "../../../node_modules/bootstrap/scss/bootstrap";
+
+@import "mixins/buttons";
+
+@import "partials/messages";
+
+@import "components/login";
+
+@import "components/footer";
+
+@import "components/buttons";
+
+html {
+  position: relative;
+  min-height: 100%;
+}
+
+body {
+  /* Margin bottom by footer height */
+  margin-bottom: 60px;
+}
+
+body>.container {
+  padding: 65px 15px 0;
+}
+
+a {
+  color: $link-color;
+}
+.logo {
+  height: 40px;
+  width: 80px;
+  display: block;
+}
+
+header {
+  & > .navbar {
+    background-color: $navbar-background-color;
+    color: color-yiq($navbar-background-color);
+
+    .logo {
+      path.cls-1 {
+        @if lightness($navbar-background-color) > lightness(#aaa) {
+          fill: theme-color("cas-primary");
+        } @else {
+          fill: white;
+        }
+      }
+    }
+  }
+}
+
+// Cards
+.card {
+  margin-bottom: 2em;
+}
+
+#cas-resource-list {
+  background-color: $cas-resource-list-background-color;
+}
+
+#cookiesDisabled.card {
+  background-color: $cookies-disabled-background-color;
+  color: color-yiq($cookies-disabled-background-color);
+}
+
+#staticAuthentication.card {
+  background-color: $default-auth-background-color;
+  color: color-yiq($default-auth-background-color);
+}
+
+#serviceui.alert {
+  background-color: $serviceui-alert-background-color;
+  color: color-yiq($serviceui-alert-background-color);
+}
+
+#insecureNotice.card {
+  background-color: $insecure-notice-background-color;
+  color: color-yiq($insecure-notice-background-color);
+}

+ 5 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/sass/components/_alerts.scss

@@ -0,0 +1,5 @@
+.alert-default {
+  color: #333;
+  background-color: #dedede;
+  border-color: #3d3d3d;
+}

+ 48 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/sass/components/_buttons.scss

@@ -0,0 +1,48 @@
+@import "variables.scss";
+
+// This sets a default background color for all btn-social implementations.  The actual provider style will
+// override this with their own colors.  This is use as a fallback for unknown social types.
+.btn-social {
+  background-color: slategray;
+  text-transform: capitalize;
+}
+
+@import "../vendor/bootstrap-social/bootstrap-social";
+
+// social-button overrides
+.btn-social, .btn-social-icon {
+  padding-left: 50px;
+}
+
+.btn-social > :first-child, .btn-social-icon > :first-child {
+  line-height: 38px;
+  width: 40px;
+}
+
+/**
+ * Add in our own custom social colors.
+ */
+.btn-submit {
+  @include btn-social(theme-color("btn-submit"));
+
+}
+
+
+.btn-cas { @include btn-social(#153e50) }
+.btn-saml2 { @include btn-social(#cb2027) }
+.btn-oidc { @include btn-social(#f7931e) }
+.btn-google2 { @include btn-social(#DD4B39) }
+.btn-windows { @include btn-social(#2672EC) }
+.btn-wordpress { @include btn-social(#eeeeee, #000) }
+
+// Specific provider overrides
+a.btn.btn-wordpress { color: #000!important; }
+
+// Success appears as the bootstrap success theme color
+.btn-restart { @include btn-social(#28a745) }
+
+// Success appears as the bootstrap warning theme color
+.btn-refresh { @include btn-social(#ffc107) }
+
+// Success appears as the bootstrap danger theme color
+.btn-shutdown { @include btn-social(#dc3545) }

+ 0 - 0
overlays/org.apereo.cas.cas-server-webapp-tomcat-5.3.9/WEB-INF/classes/static/sass/components/_cas.scss


Some files were not shown because too many files changed in this diff