commit de7b7ebc68aa384c29a53eeef24995c0e9d0f0ab Author: Shaun Chyxion Date: Sun Jul 25 16:29:55 2021 +0800 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..910a786 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.* +!.gitignore +!.gitlab-ci.yml +!.gitkeep +*.log +*.iml +target/ +bin/ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..d34a568 --- /dev/null +++ b/pom.xml @@ -0,0 +1,236 @@ + + + + 4.0.0 + org.jasig.cas + cas-server-webapp + 0.0.1 + jar + Apereo CAS Web Application + + + 2.5.3 + 4.2.7 + 1.8.9 + 3.1.5 + + 1.8 + 1.8 + false + yyyy-MM-dd HH:mm:ssa + UTF-8 + UTF-8 + + + + + com.pudonghot.emtomcat + emtomcat-core + 0.0.1 + + + org.jasig.cas + cas-server-webapp-support + ${cas.version} + + + org.jasig.cas + cas-server-core + ${cas.version} + + + org.jasig.cas + cas-server-core-monitor + ${cas.version} + + + org.jasig.cas + cas-server-core-authentication + ${cas.version} + + + org.jasig.cas + cas-server-core-services + ${cas.version} + + + org.jasig.cas + cas-server-core-logout + ${cas.version} + + + org.jasig.cas + cas-server-core-audit + ${cas.version} + + + org.jasig.cas + cas-server-core-logging + ${cas.version} + + + org.jasig.cas + cas-server-core-tickets + ${cas.version} + + + org.jasig.cas + cas-server-core-web + ${cas.version} + + + org.jasig.cas + cas-server-core-validation + ${cas.version} + + + org.jasig.cas + cas-server-core-util + ${cas.version} + + + org.jasig.cas + cas-server-webapp-throttle + ${cas.version} + + + org.jasig.cas + cas-server-webapp-actions + ${cas.version} + + + org.jasig.cas + cas-server-webapp-cookie + ${cas.version} + + + org.jasig.cas + cas-server-webapp-reports + ${cas.version} + + + org.jasig.cas + cas-server-webapp-themes + ${cas.version} + + + org.jasig.cas + cas-server-webapp-validation + ${cas.version} + + + + org.pac4j + spring-webmvc-pac4j + 1.0.1 + + + org.pac4j + pac4j-core + ${pac4j.version} + + + org.pac4j + pac4j-http + ${pac4j.version} + + + com.lmax + disruptor + 3.3.4 + + + + javax.servlet + jstl + 1.2 + + + org.apereo.cas + cas-server-security-filter + 2.0.6 + + + com.ryantenney.metrics + metrics-spring + 3.1.3 + + + io.dropwizard.metrics + metrics-jvm + ${metrics.version} + + + io.dropwizard.metrics + metrics-servlets + ${metrics.version} + + + org.apache.logging.log4j + log4j-web + 2.6.2 + + + org.jasig + spring-webflow-client-repo + 1.0.0 + + + + + + + + org.bouncycastle + bcprov-jdk15on + 1.51 + + + + org.springframework + spring-test + 4.2.8.RELEASE + test + + + junit + junit + 4.13.2 + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + app + ZIP + false + + + org.projectlombok + lombok + + + + + + package + + repackage + + + + + + + + + diff --git a/src/main/java/org/jasig/cas/web/CasWebServer.java b/src/main/java/org/jasig/cas/web/CasWebServer.java new file mode 100644 index 0000000..1b53dcf --- /dev/null +++ b/src/main/java/org/jasig/cas/web/CasWebServer.java @@ -0,0 +1,14 @@ +package org.jasig.cas.web; + +import com.pudonghot.emtomcat.EmTomcat; + +/** + * @author Donghuang + * @date Jul 24, 2021 15:15:58 + */ +public class CasWebServer { + + public static void main(String[] args) { + EmTomcat.run(8090); + } +} diff --git a/src/main/resources/META-INF/.gitkeep b/src/main/resources/META-INF/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/main/resources/META-INF/resources/css/cas.css b/src/main/resources/META-INF/resources/css/cas.css new file mode 100644 index 0000000..9b9eaf6 --- /dev/null +++ b/src/main/resources/META-INF/resources/css/cas.css @@ -0,0 +1,528 @@ +/*@import url(https://fonts.googleapis.com/css?family=Lato);*/ +@import url(https://fonts.googleapis.com/css?family=Lato:700,400,300,100); + +html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, +address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, +b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, +thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, +hgroup, menu, nav, section, summary, time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} +body { line-height: 1; } +nav ul { list-style: none; } +blockquote, q { quotes: none; } +blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } +a { margin: 0; padding: 0; font-size: 100%; vertical-align: baseline; background: transparent; } +ins { background-color: #ff9; color: #000; text-decoration: none; } +mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; } +del { text-decoration: line-through; } +abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; } +table { border-collapse: collapse; border-spacing: 0; } +hr { display: block; height: 1px; border: 0; border-top: 1px solid #cccccc; margin: 1em 0; padding: 0; } +input, select { vertical-align: middle; } +body { font-family: Verdana, sans-serif; font-size: 11px; line-height: 1.4em; background: #eee; } + +#container { width: 960px; margin: 0 auto; } + + + +@media screen and (min-width: 960px) { + #container { width: 960px; } +} + +@media screen and (min-width: 1280px) { + #ssosessions-page #container { width: 1280px; } +} + +@media only screen and (max-width: 960px) { + #container { width: 100%; } + #content { + -webkit-border-bottom-right-radius: 0px; + -webkit-border-bottom-left-radius: 0px; + -moz-border-radius-bottomright: 0px; + -moz-border-radius-bottomleft: 0px; + border-bottom-right-radius: 0px; + border-bottom-left-radius: 0px; + } +} + +body#cas { + background: #153e50; /* Old browsers */ +} + +a:link, a:visited { + color: #257bb2; +} + +a:hover { + color: #a0b757; +} + +p { + margin-bottom: 1.4em; +} + +header { + overflow: hidden; + padding: 20px 0; +} + +#logo { + display: block; + background: url(../images/logo.png) no-repeat; + text-indent: -999em; + float: left; + height: 100px; + width: 80%; + margin-right: 40px; + border: 0px; +} + +header h1 { + float: right; + width: 119px; + height: 60px; + background: url(../images/cas-logo.png) no-repeat; + text-indent: -999em; +} + +#content { + overflow: hidden; + background: #fff; + padding: 20px; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; +} + +#msg { + padding: 20px; + margin-bottom: 40px; +} + +#msg.errors { + border: 1px dotted #BB0000; + color: #BB0000; + padding-left: 100px; + background: url(../images/error.png) no-repeat 20px center; +} + +#msg.success { border: 1px dotted #390; color: #390; padding-left: 100px; background: url(../images/success.png) no-repeat 20px center; } +#msg.info { border: 1px dotted #008; color: #008; padding-left: 100px; background: url(../images/info.png) no-repeat 20px center; } +#msg.question { border: 1px dotted #390; color: #390; padding-left: 100px; background: url(../images/question.png) no-repeat 20px center; } +#msg.warn { border: 1px dotted #960; color: #960; padding-left: 100px; background: #ffbc8f url(../images/info.png) no-repeat 20px center; } + +.errors { + border: 1px dotted #BB0000; + color: #BB0000; + padding-left: 100px; + padding-top:5px; + margin-bottom:5px; + background: url(../images/error.png) no-repeat 20px center; +} + +#serviceui.serviceinfo { + border: 1px dotted #0066FF; + color: black; + padding-left: 10px; + padding-top: 5px; +} + +#servicedesc { + vertical-align:middle; + padding-left: 30px; + width: 90%; +} + +#login { + width: 320px; + float: left; + margin-right: 20px; +} + +#login h2 { + font-weight: normal; + font-size: 1.4em; + margin-bottom: 20px; +} + +#login .row { + padding: 10px 0; +} + +#login label { + display: block; + margin-bottom: 2px; +} + +#login .check label { + display: inline; +} + +#login input[type=text], #login input[type=password] { + font-size: 1.4em; + padding: 5px; +} + +#login .btn-submit { + background: #70ba61; + border: 0; + padding: 10px 20px; + font-weight: bold; + color: white; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +#login .btn-reset { + background: #eee; + padding: 10px 20px; + border: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +#login .btn-submit:hover, #login .btn-reset:hover { + cursor: pointer; +} + +#login .btn-submit:hover { + background: #7fd36e; +} + +#login .btn-reset:hover { + background: #d4d4d4; +} + +#sidebar { + width: auto; + height: 100%; +} + +#sidebar-content { + padding-left: 20px; +} + +#list-providers ul { + margin-bottom: 3em; +} + +#list-languages h3, #list-providers h3 { + margin-bottom: 1.4em; +} + +#list-languages ul li, #list-providers ul li { + list-style: none; + display: inline-block; + margin-right: 2em; +} + +footer { + padding: 20px; + color: white; +} + +footer a:link, footer a:visited { + color: white; +} + +@media only screen and (max-width: 960px) { + header { padding: 20px; } + #container { width: 100%; } + #content { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + } +} + +@media only screen and (max-width: 855px) { + #logo { display: none; } + header h1 { font-size: 1em; width: 70px; height: 40px; background-size: 70px 40px; } + #login { float: none; width: 100%; } + #fm1 .row input[type=text], + #fm1 .row input[type=password] { width: 100%; padding: 10px; box-sizing: border-box; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; } + #fm1 .row .btn-submit { outline: none; -webkit-appearance: none; -webkit-border-radius: 0; border: 0; background: #70ba61; color: white; font-weight: bold; width: 100%; padding: 10px 20px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } + #fm1 .row .btn-reset { display: none; } + #sidebar { margin-top: 20px; } + #sidebar .sidebar-content { padding: 0; } +} + + +/** + * SSO Sessions Styles + */ +#loadingMessage { + font-size: 14px; +} + +#cas-sessions, #no-cas-sessions { + display: none; +} +#no-cas-sessions div { + margin-top: 2em; +} + +.ssoSessions #content { + border-radius: 4px; + padding: 20px; +} + +#container-stable { + margin: 20px 0 20px; +} + +.ssoSessions .btn-success { + background: #70ba61; + border: 0; + padding: 10px 20px; + font-weight: bold; + color: white; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.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 .panel-default>.panel-heading { + background-color: #fff; + border-bottom: none; +} +.ssoSessions .adminPanels .panel-default>.panel-heading h3 { + font-family: 'Lato', sans-serif; + font-weight: 300; + font-size: 20pt; +} + +.ssoSessions .adminPanels .panel-default > .panel-heading:after { + position: absolute; + font-family: FontAwesome; + top: -5px; + right: 30px; + font-size: 70pt; + color: #153e50; + opacity: 0.1; +} +.adminPanels .users-panel.panel-default > .panel-heading:after { + content: "\f0c0"; +} + +.adminPanels .usage-panel.panel-default > .panel-heading:after { + content: "\f201"; +} + +.adminPanels .tickets-panel.panel-default > .panel-heading:after { + content: "\f145"; +} + + +.ssoSessions td.details-control { + cursor: pointer; + font-family: FontAwesome; + font-size: 10pt; + color: #337ab7; +} +.ssoSessions td.details-control:after { + content: "\f067"; + /*content: "\002B"; - thinner plus sign */ +} +.ssoSessions tr.shown td.details-control:after { + content: "\f068"; + /*content: "\002D"; - thinner minus sign */ +} + +.row-detail-wrapper { + /*background-color: cornsilk;*/ + background-color: #d9edf7; +} +.ssoSessions .row-detail thead { + display: none; +} +.ssoSessions .row-detail { + /*font-size: 8pt;*/ + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} +.ssoSessions .field-label { + /*font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;*/ + /*font-size: 8pt;*/ + /*font-weight: bold;*/ +} + +.principal_attributes td:first-child { + width: 30%; +} +table.principal_attributes>tbody>tr>td { + border-top-color: #E6E6E6; +} + +.adminPanels .panel-body { + padding-top: 5px; +} +.adminPanels .panel-body span { + font-family: 'Lato', sans-serif; + font-size: 30pt; + font-weight: 100; +} + +.row-eq-height { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} + +#alertBox { + display: none; +} + +/** + SB Admin Styles + */ + +.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; +} +/** + * Statistics View + */ + +.statisticsView { + display: none; +} + +.statisticsView .progress-meter .background { + fill: #DFEAFD; +} +.statisticsView .progress-meter .foreground { + fill: #2E7AF9; +} +.statisticsView .progress-meter text { + font-family: 'Lato' sans-serif; + font-size: 25pt; + font-weight: 300; +} +.statisticsView .progress-meter .text2 { + font-family: 'Georgia' sans-serif; + font-size: 10pt; +} + +.modal { + display: none; +} + +/** + * Runtime Statistics Gauge styles + */ +.statisticsView .runtimeStatistics .background { + fill: #DFEAFD; +} +.statisticsView .runtimeStatistics .foreground { + fill: #2E7AF9; +} +.statisticsView .runtimeStatistics text { + font-family: 'Lato' sans-serif; + font-size: 25pt; + font-weight: 300; +} +.statisticsView .runtimeStatistics .text2 { + font-family: 'Georgia' sans-serif; + font-size: 10pt; +} +#uptime-panel { + display: none; +} +#uptime { + font-family: 'Lato', sans-serif; + font-size: 16pt; +} + +.thread-dump-view { + height: 600px; + overflow-y: auto; +} + +#metricsGauges strong { + display: block; +} + +#metricsGauges .panel { + width: 100%; +} + +#metricsGauges ul { + height : auto; + overflow : hidden; +} + +#metricsGauges li { + float : left; + width : 80px; + height: 80px; + margin: 0 0 10px 10px; + background : #d8d8d8; + +} +#metricsGauges ul li:nth-child(5n + 1) { + clear : left; +} + + +.statisticsView .equal, .statisticsView .equal > div[class*='col-'] { + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + flex:1 1 auto; +} + +.statisticsView .section { + margin-bottom: 25px; +} + +#viewSsoSessions { + color: white; +} + +.statisticsView .adminPanels.container-fluid { + padding-right: 0; +} + +/** + * View Configuration Styles + */ +#viewConfigError { + display: none; +} +#view-configuration { + display: none; +} diff --git a/src/main/resources/META-INF/resources/css/ssosessions.css b/src/main/resources/META-INF/resources/css/ssosessions.css new file mode 100644 index 0000000..793d0ba --- /dev/null +++ b/src/main/resources/META-INF/resources/css/ssosessions.css @@ -0,0 +1,130 @@ +/* +/* --------------- CUSTOM STYLES +*/ + +body,html { + background: #153e50; +} + +/*body,html,*/ + +#cas-sessions, +#container-stable, +.ui-widget { + font-family: 'Lato', sans-serif !important; + font-size: 14px; +} + + +/* Navigation -- */ +.navbar-default .navbar-brand, +.navbar-default .navbar-toggle { + color: #ffffff; +} +.navbar-default .navbar-brand { + font-family: 'Open Sans', sans-serif; + color: #ffffff; + line-height: 32px; + font-size: 20px; + padding: 0; + position: relative; + top: 8px; + left: 5px; +} +.navbar-default .navbar-brand:hover { + color: #ffffff; +} +.navbar-default .navbar-brand img { + margin-right: 8px; + width: 32px; +} +.navbar-default .navbar-brand .logo { + text-transform: uppercase; + font-size: 26px; +} +.navbar-default .navbar-brand .logo .heavy { + font-weight: 700; +} + +@media (min-width: 768px) { + .navbar-brand { + display: block; + padding: 6px 15px 0; + box-sizing: border-box; + top: auto; + left: auto; + } + .navbar-brand img { + display: inline-block; + width: 32px; + } +} + + + +#navbar > .navbar-nav > li > a { + color: #ffffff; + font-size: 12px; +} +.navbar-default { + border-bottom: 1px solid #dadada; + background-color: #346288; +} +.navbar-default .navbar-header a { + color: #ffffff; +} +.navbar-default .navbar-header a.toggle-sidebar { + padding: 15px 20px; + float: left; +} +#top-navbar .nav > li .navbar-text { + color: #ffffff; + padding: 15px 14px; + margin: 0; +} +#top-navbar .nav > li > a { + color: #ffffff; + padding: 15px 14px; + margin: 0; +} +#top-navbar .nav > li > a:hover, +#top-navbar .nav > li > a:focus { + background-color: #36a9e1; +} + +/* Main content block --*/ +/*#content {*/ + /*border-radius: 4px;*/ +/*}*/ + +/* Session container --*/ +#container-stable { + margin: 40px 0 20px; +} +#container-stable h3, +#container-stable table th, +#container-stable table td { + /*font-family: Arial,"Helvetica Neue",Helvetica,sans-serif;*/ +} +#container-stable table th { + text-align: left; +} + +/* Tables */ +#table-monitor-hdr { + font-weight: bold; + margin-left: 16px; + text-align: center +} + + +/* UI controls */ +.ui-accordion .ui-accordion-header { + margin: 15px 0 0; +} + +.btn.active, .btn:active { + color: #fff; + background-color: #286090; + border-color: #204d74; +} \ No newline at end of file diff --git a/src/main/resources/META-INF/resources/favicon.ico b/src/main/resources/META-INF/resources/favicon.ico new file mode 100644 index 0000000..635bac5 Binary files /dev/null and b/src/main/resources/META-INF/resources/favicon.ico differ diff --git a/src/main/resources/META-INF/resources/images/6inchbrand-64.png b/src/main/resources/META-INF/resources/images/6inchbrand-64.png new file mode 100755 index 0000000..0b97048 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/6inchbrand-64.png differ diff --git a/src/main/resources/META-INF/resources/images/cas-logo.png b/src/main/resources/META-INF/resources/images/cas-logo.png new file mode 100644 index 0000000..febd0bc Binary files /dev/null and b/src/main/resources/META-INF/resources/images/cas-logo.png differ diff --git a/src/main/resources/META-INF/resources/images/confirm.gif b/src/main/resources/META-INF/resources/images/confirm.gif new file mode 100644 index 0000000..533bbba Binary files /dev/null and b/src/main/resources/META-INF/resources/images/confirm.gif differ diff --git a/src/main/resources/META-INF/resources/images/error.gif b/src/main/resources/META-INF/resources/images/error.gif new file mode 100644 index 0000000..b5f4c03 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/error.gif differ diff --git a/src/main/resources/META-INF/resources/images/error.png b/src/main/resources/META-INF/resources/images/error.png new file mode 100644 index 0000000..7815bfb Binary files /dev/null and b/src/main/resources/META-INF/resources/images/error.png differ diff --git a/src/main/resources/META-INF/resources/images/green.gif b/src/main/resources/META-INF/resources/images/green.gif new file mode 100644 index 0000000..8d4f802 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/green.gif differ diff --git a/src/main/resources/META-INF/resources/images/info.gif b/src/main/resources/META-INF/resources/images/info.gif new file mode 100644 index 0000000..4aef02a Binary files /dev/null and b/src/main/resources/META-INF/resources/images/info.gif differ diff --git a/src/main/resources/META-INF/resources/images/info.png b/src/main/resources/META-INF/resources/images/info.png new file mode 100644 index 0000000..e244822 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/info.png differ diff --git a/src/main/resources/META-INF/resources/images/key-point_bl.gif b/src/main/resources/META-INF/resources/images/key-point_bl.gif new file mode 100644 index 0000000..fe6f825 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/key-point_bl.gif differ diff --git a/src/main/resources/META-INF/resources/images/key-point_br.gif b/src/main/resources/META-INF/resources/images/key-point_br.gif new file mode 100644 index 0000000..ba5f51b Binary files /dev/null and b/src/main/resources/META-INF/resources/images/key-point_br.gif differ diff --git a/src/main/resources/META-INF/resources/images/key-point_tl.gif b/src/main/resources/META-INF/resources/images/key-point_tl.gif new file mode 100644 index 0000000..87d7cd0 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/key-point_tl.gif differ diff --git a/src/main/resources/META-INF/resources/images/key-point_tr.gif b/src/main/resources/META-INF/resources/images/key-point_tr.gif new file mode 100644 index 0000000..602127a Binary files /dev/null and b/src/main/resources/META-INF/resources/images/key-point_tr.gif differ diff --git a/src/main/resources/META-INF/resources/images/logo.png b/src/main/resources/META-INF/resources/images/logo.png new file mode 100644 index 0000000..6df4a29 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/logo.png differ diff --git a/src/main/resources/META-INF/resources/images/question.png b/src/main/resources/META-INF/resources/images/question.png new file mode 100644 index 0000000..145e38b Binary files /dev/null and b/src/main/resources/META-INF/resources/images/question.png differ diff --git a/src/main/resources/META-INF/resources/images/red.gif b/src/main/resources/META-INF/resources/images/red.gif new file mode 100644 index 0000000..8362124 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/red.gif differ diff --git a/src/main/resources/META-INF/resources/images/success.png b/src/main/resources/META-INF/resources/images/success.png new file mode 100644 index 0000000..7b7f03b Binary files /dev/null and b/src/main/resources/META-INF/resources/images/success.png differ diff --git a/src/main/resources/META-INF/resources/images/warning.png b/src/main/resources/META-INF/resources/images/warning.png new file mode 100644 index 0000000..bd4b0a0 Binary files /dev/null and b/src/main/resources/META-INF/resources/images/warning.png differ diff --git a/src/main/resources/META-INF/resources/images/webapp.png b/src/main/resources/META-INF/resources/images/webapp.png new file mode 100644 index 0000000..c2ea89b Binary files /dev/null and b/src/main/resources/META-INF/resources/images/webapp.png differ diff --git a/src/main/resources/META-INF/resources/index.jsp b/src/main/resources/META-INF/resources/index.jsp new file mode 100644 index 0000000..08a5002 --- /dev/null +++ b/src/main/resources/META-INF/resources/index.jsp @@ -0,0 +1,6 @@ +<%@ page language="java" session="false" %> + +<% +final String queryString = request.getQueryString(); +final String url = request.getContextPath() + "/login" + (queryString != null ? '?' + queryString : ""); +response.sendRedirect(response.encodeURL(url));%> diff --git a/src/main/resources/META-INF/resources/js/cas.js b/src/main/resources/META-INF/resources/js/cas.js new file mode 100644 index 0000000..f5a2055 --- /dev/null +++ b/src/main/resources/META-INF/resources/js/cas.js @@ -0,0 +1,62 @@ + +head.ready(document, function() { + head.load("https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js", loadjQueryUI); +}); + +function loadjQueryUI() { + head.load("https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js", loadjQueryCookies); +} + +function loadjQueryCookies() { + head.load("https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js", resourceLoadedSuccessfully); +} + +function areCookiesEnabled() { + $.cookie('cookiesEnabled', 'true'); + var value = $.cookie('cookiesEnabled'); + if (value != undefined) { + $.removeCookie('cookiesEnabled'); + return true; + } + return false; +} + +function resourceLoadedSuccessfully() { + $(document).ready(function() { + + if ($(":focus").length === 0){ + $("input:visible:enabled:first").focus(); + } + + + if (areCookiesEnabled()) { + $('#cookiesDisabled').hide(); + } else { + $('#cookiesDisabled').show(); + $('#cookiesDisabled').animate({ backgroundColor: 'rgb(187,0,0)' }, 30).animate({ backgroundColor: 'rgb(255,238,221)' }, 500); + } + + //flash error box + $('#msg.errors').animate({ backgroundColor: 'rgb(187,0,0)' }, 30).animate({ backgroundColor: 'rgb(255,238,221)' }, 500); + + //flash success box + $('#msg.success').animate({ backgroundColor: 'rgb(51,204,0)' }, 30).animate({ backgroundColor: 'rgb(221,255,170)' }, 500); + + //flash confirm box + $('#msg.question').animate({ backgroundColor: 'rgb(51,204,0)' }, 30).animate({ backgroundColor: 'rgb(221,255,170)' }, 500); + + $('#capslock-on').hide(); + $('#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(); + } + }); + +}; diff --git a/src/main/resources/META-INF/resources/js/ssosessions.js b/src/main/resources/META-INF/resources/js/ssosessions.js new file mode 100644 index 0000000..c1c1269 --- /dev/null +++ b/src/main/resources/META-INF/resources/js/ssosessions.js @@ -0,0 +1,181 @@ +var ssoSessions = (function () { + var urls = { + destroy: { + all: '/cas/statistics/ssosessions/destroySsoSessions', + single: '/cas/statistics/ssosessions/destroySsoSession' + }, + getSessions: '/cas/statistics/ssosessions/getSsoSessions' + }; + + 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": '/cas/statistics/ssosessions/getSsoSessions', + "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, type, full, meta ) { + if ( data === true) { + return 'Proxy'; + } else { + return ' '; + } + } + }, + { + "targets": 2, + "data": 'authenticated_principal', + "className": 'col-xs-4 col-md-2', + "render": function ( data, type, full, meta ) { + return type === 'display' && data.length > 20 ? + ''+data.substr( 0, 18 )+'...' : + data; + } + }, + { + "targets": 3, + "data": 'ticket_granting_ticket', + "className": 'hidden-xs hidden-sm col-md-4', + "render": function ( data, type, full, meta ) { + return type === 'display' && data.length > 20 ? + ''+data.substr( 0, 40 )+'...' : + 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, type, full, meta ) { + return ''; + }, + "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(); + + // Create Filter RegEx: + if ( filter == 'proxied') { + var filterRegex = '^Proxy$'; + var deleteValue = 'PROXIED'; + var btnText = 'Remove xx Proxied Sessions'; + } else if ( filter == 'non-proxied') { + var filterRegex = '^ $'; + var deleteValue = 'DIRECT'; + var btnText = 'Remove xx Non-Proxied Sessions'; + } else { + var filterRegex = ''; + var deleteValue = 'ALL'; + var 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 + */ + }; +})(); diff --git a/src/main/resources/META-INF/resources/js/statisticsview.js b/src/main/resources/META-INF/resources/js/statisticsview.js new file mode 100644 index 0000000..ac2513a --- /dev/null +++ b/src/main/resources/META-INF/resources/js/statisticsview.js @@ -0,0 +1,138 @@ +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.scale.linear() + .domain([0, 0.40, 0.50, 1]) + .range(["green", "green", "goldenrod", "red"]); + + var arc = d3.svg.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('uptime-panel'); + var element = document.getElementById(el); + var now = new Date(); + countTo = new Date(countTo); + var difference = (now - countTo); + + 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 = '' + days + hours + mins + secs + ''; + element.innerHTML = timeString; + wrapper.style.display = 'block'; + + upTime.to = setTimeout(function() { + upTime(countTo, el); + },1000); + + } +} + + +// Fill modal with content from link href +$("#threadDumpModal").on("show.bs.modal", function (e) { + var link = $(e.relatedTarget); + $(this).find(".modal-body pre").load(link.val()); +}); + +/** + * Thread Dump Preview + * Returnes the xx amount of characters from the end of the thread dump for preview sake. + * The length can be changed by passing ini a value, otherwise it defaults to 400. + */ +function getThreadDumpPreview(len) { + var len = len || 400; + $.get($('#threadDumpViewButton').val(), function (data) { + $('#threadDumpPreview').html(data.substr(-len)); + }); +} + diff --git a/src/main/resources/META-INF/resources/js/test_data.json b/src/main/resources/META-INF/resources/js/test_data.json new file mode 100644 index 0000000..016225c --- /dev/null +++ b/src/main/resources/META-INF/resources/js/test_data.json @@ -0,0 +1,1117 @@ +{ + "activeSsoSessions": [ + { + "authentication_date": 1441736515763, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736515763, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736452186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser2", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441737515763, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736463186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser4", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441736515663, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736462186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser3", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441736515763, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736452186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser2", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441737515763, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736463186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser4", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441736515663, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736462186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser3", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441736515763, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736452186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser2", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441737515763, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736463186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser4", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441736515663, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736462186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser3", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441736515763, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736452186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser2", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441737515763, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736463186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser4", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441736515663, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736462186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser3", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441736515763, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736452186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser2", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441737515763, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736463186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser4", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441736515663, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736462186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser3", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441736515763, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736452186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser2", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441737515763, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736463186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser4", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + }, + { + "authentication_date": 1441736515663, + "authentication_attributes": { + "authenticationMethod": "HttpBasedServiceCredentialsAuthenticationHandler" + }, + "authenticated_principal": "https://mmoayyed.unicon.net/sample1/proxyUrl", + "number_of_uses": 0, + "ticket_granting_ticket": "PGT-2-IKlUwrZMxpkOFYifIGbcv6CYDnETaEeMdmZfRYjHdpfsndK3XI-cas01.example.org", + "principal_attributes": { + }, + "is_proxied": true, + "proxied_by": "https://mmoayyed.unicon.net/sample1/", + "authenticated_services": { + } + }, + { + "authentication_date": 1441736462186, + "authentication_attributes": { + "authenticationMethod": "AcceptUsersAuthenticationHandler" + }, + "authenticated_principal": "casuser3", + "number_of_uses": 3, + "ticket_granting_ticket": "TGT-1-T5hpkh06BOW2tSY1cwGIMblwru6DjdndCtwpBI6oeUqnGzZepu-cas01.example.org", + "principal_attributes": { + "uid": "uid", + "eduPersonAffiliation": "eduPersonAffiliation", + "memberOf": [ + "faculty", + "staff", + "org" + ], + "groupMembership": "groupMembership" + }, + "is_proxied": false, + "authenticated_services": { + "ST-3-uuFc7ddf4vEdBOIIOpN4-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-1-7ZPfcD9LluG3eBZmWStj-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + }, + "ST-2-ZDheUfp2GsxrVnevhReK-cas01.example.org": { + "id": "https://mmoayyed.unicon.net/sample1/", + "originalUrl": "https://mmoayyed.unicon.net/sample1/", + "artifactId": null, + "loggedOutAlready": false, + "attributes": { + } + } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/META-INF/resources/js/viewConfig.js b/src/main/resources/META-INF/resources/js/viewConfig.js new file mode 100644 index 0000000..3c536fc --- /dev/null +++ b/src/main/resources/META-INF/resources/js/viewConfig.js @@ -0,0 +1,59 @@ +var viewConfigs = (function () { + var createDataTable = function() { + $('#viewConfigsTable').DataTable( { + "initComplete": function(settings, json) { + if (!json || json.length == 0) { + $('#loadingMessage').hide(); + $('#viewConfigError').show(); + $("#view-configuration").hide(); + } else { + $('#loadingMessage').hide(); + $('#viewConfigError').hide(); + $("#view-configuration").show(); + } + }, + "drawCallback": function( settings ) { + 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"; + } + }, + "processing": true, + "ajax": { + "url": '/cas/status/config/getProperties', + "dataSrc": function (json) { + var return_data = new Array(); + for(var i=0;i< json.length; i++){ + var obj = json[i]; + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + return_data.push({ + 'key': key, + 'value' : obj[key], + }) + } + } + } + return return_data; + } + }, + "columns": [ + { "data": "key", 'className': 'col-xs-6' }, + { "data": "value", 'className': 'col-xs-6' } + ], + } ); + }; + // initialization ******* + ( function init () { + createDataTable(); + })(); + + // Public Methods + return { + /** + * Not used + */ + }; +})(); diff --git a/src/main/resources/META-INF/resources/themes/apereo/css/cas.css b/src/main/resources/META-INF/resources/themes/apereo/css/cas.css new file mode 100644 index 0000000..844c94b --- /dev/null +++ b/src/main/resources/META-INF/resources/themes/apereo/css/cas.css @@ -0,0 +1,198 @@ +html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; outline: 0; font-size: 100%; vertical-align: baseline; background: transparent; } +body { line-height: 1; } +nav ul { list-style: none; } +blockquote, q { quotes: none; } +blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } +a { margin: 0; padding: 0; font-size: 100%; vertical-align: baseline; background: transparent; } +ins { background-color: #ff9; color: #000; text-decoration: none; } +mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; } +del { text-decoration: line-through; } +abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; } +table { border-collapse: collapse; border-spacing: 0; } +hr { display: block; height: 1px; border: 0; border-top: 1px solid #cccccc; margin: 1em 0; padding: 0; } +input, select { vertical-align: middle; } +body { font-family: Helvetica, Arial, sans-serif; font-size: 12px; line-height: 1.4em; background: #eee; } + +#container { width: 960px; margin: 0 auto; } + +@media only screen and (max-width: 960px) { + #container { width: 100%; } + #content { -webkit-border-bottom-right-radius: 0px; -webkit-border-bottom-left-radius: 0px; -moz-border-radius-bottomright: 0px; -moz-border-radius-bottomleft: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; } +} + +body { + background: url(../images/bg-tile.gif); /* Old browsers */ +} + +a:link, a:visited { + color: #257bb2; +} + +a:hover { + color: #a0b757; +} + +p { + margin-bottom: 1.4em; +} + +header { + overflow: hidden; + padding: 40px 0; +} + +#logo { + display: block; + width: 250px; + height: 52px; + background: url(../images/apereo-logo.png) no-repeat; + text-indent: -999em; + float: left; + + margin-right: 40px; + border-right: 1px solid rgba(255,255,255,0.25); +} + +header h1 { + display: none; +} + +#content { + overflow: hidden; + background: #fff; + padding: 20px; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + -webkit-box-shadow: 0 0 8px 0 rgba(0,0,0,0.15); + box-shadow: 0 0 8px 0 rgba(0,0,0,0.15); +} + +#msg { + padding: 20px; + margin-bottom: 40px; +} + +#msg.errors { + border: 1px dotted #BB0000; + color: #BB0000; + padding-left: 100px; + background: url(../../../images/error.png) no-repeat 20px center; +} + +#msg.success { border: 1px dotted #390; color: #390; padding-left: 100px; background: url(../../../images/success.png) no-repeat 20px center; } +#msg.info { border: 1px dotted #008; color: #008; padding-left: 100px; background: url(../../../images/info.png) no-repeat 20px center; } +#msg.question { border: 1px dotted #390; color: #390; padding-left: 100px; background: url(../../../images/question.png) no-repeat 20px center; } +#msg.warn { border: 1px dotted #960; color: #960; padding-left: 100px; background: #ffbc8f url(../../../images/info.png) no-repeat 20px center; } + +#login { + width: 320px; + float: left; + margin-right: 20px; +} + +#login h2 { + font-weight: normal; + font-size: 1.4em; + margin-bottom: 20px; +} + +#login .row { + padding: 10px 0; +} + +#login label { + display: block; + margin-bottom: 2px; +} + +#login .check label { + display: inline; +} + +#login input[type=text], #login input[type=password] { + font-size: 1.4em; + padding: 5px; +} + +#login .btn-submit { + background: #2aa4a5; + border: 0; + padding: 10px 20px; + font-weight: bold; + color: white; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +#login .btn-reset { + background: #eee; + padding: 10px 20px; + border: 0; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +#login .btn-submit:hover, #login .btn-reset:hover { + cursor: pointer; +} + +#login .btn-submit:hover { + background: #30bfbf; +} + +#login .btn-reset:hover { + background: #d4d4d4; +} + +#sidebar { + width: auto; + height: 100%; +} + +#sidebar-content { + padding-left: 20px; +} + +#list-languages h3 { + margin-bottom: 1.4em; +} + +#list-languages ul li { + list-style: none; + display: inline-block; + margin-right: 2em; +} + +footer { + padding: 20px; + color: black; +} + +footer a:link, footer a:visited { + color: black; +} + +@media only screen and (max-width: 960px) { + header { padding: 20px; } + #container { width: 100%; } + #content { + -webkit-border-radius: 0px; + -moz-border-radius: 0px; + border-radius: 0px; + } +} + +@media only screen and (max-width: 799px) { + header { padding: 10px;} + #logo { width: 156px; height: 32px; background-size: 156px 32px; margin-right: 20px; } + #login { float: none; width: 100%; } + #fm1 .row input[type=text], + #fm1 .row input[type=password] { width: 100%; padding: 10px; box-sizing: border-box; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; } + #fm1 .row .btn-submit { outline: none; -webkit-appearance: none; -webkit-border-radius: 0; border: 0; background: #2aa4a5; color: white; font-weight: bold; width: 100%; padding: 10px 20px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } + #fm1 .row .btn-reset { display: none; } + #sidebar { margin-top: 20px; } + #sidebar .sidebar-content { padding: 0; } +} \ No newline at end of file diff --git a/src/main/resources/META-INF/resources/themes/apereo/images/apereo-logo.png b/src/main/resources/META-INF/resources/themes/apereo/images/apereo-logo.png new file mode 100644 index 0000000..b40f22c Binary files /dev/null and b/src/main/resources/META-INF/resources/themes/apereo/images/apereo-logo.png differ diff --git a/src/main/resources/META-INF/resources/themes/apereo/images/bg-tile.gif b/src/main/resources/META-INF/resources/themes/apereo/images/bg-tile.gif new file mode 100644 index 0000000..41332ee Binary files /dev/null and b/src/main/resources/META-INF/resources/themes/apereo/images/bg-tile.gif differ diff --git a/src/main/resources/META-INF/resources/themes/apereo/js/cas.js b/src/main/resources/META-INF/resources/themes/apereo/js/cas.js new file mode 100644 index 0000000..7e22762 --- /dev/null +++ b/src/main/resources/META-INF/resources/themes/apereo/js/cas.js @@ -0,0 +1,20 @@ +$(document).ready(function(){ + //focus username field + if ($(":focus").length === 0){ + $("input:visible:enabled:first").focus(); + } + + //flash error box + $('#msg.errors').animate({ backgroundColor: 'rgb(187,0,0)' }, 30).animate({ backgroundColor: 'rgb(255,238,221)' }, 500); + + //flash success box + $('#msg.success').animate({ backgroundColor: 'rgb(51,204,0)' }, 30).animate({ backgroundColor: 'rgb(221,255,170)' }, 500); + + //flash confirm box + $('#msg.question').animate({ backgroundColor: 'rgb(51,204,0)' }, 30).animate({ backgroundColor: 'rgb(221,255,170)' }, 500); + + /* + * Using the JavaScript Debug library, you may issue log messages such as: + * debug.log("Welcome to Central Authentication Service"); + */ +}); diff --git a/src/main/resources/WEB-INF/cas-servlet.xml b/src/main/resources/WEB-INF/cas-servlet.xml new file mode 100644 index 0000000..1298744 --- /dev/null +++ b/src/main/resources/WEB-INF/cas-servlet.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/WEB-INF/cas.properties b/src/main/resources/WEB-INF/cas.properties new file mode 100644 index 0000000..c1954c9 --- /dev/null +++ b/src/main/resources/WEB-INF/cas.properties @@ -0,0 +1,709 @@ +server.name=http://localhost:8080 +server.prefix=${server.name}/cas + +# security configuration based on IP address to access the /status and /statistics pages +# cas.securityContext.adminpages.ip=127\.0\.0\.1 + +## +# Unique CAS node name +# host.name is used to generate unique Service Ticket IDs and SAMLArtifacts. This is usually set to the specific +# hostname of the machine running the CAS node, but it could be any label so long as it is unique in the cluster. +# host.name= + +## +# JPA Ticket Registry Database Configuration +# +# ticketreg.database.ddl.auto=create-drop +# ticketreg.database.dialect=org.hibernate.dialect.OracleDialect|MySQLInnoDBDialect|HSQLDialect +# ticketreg.database.batchSize=10 +# ticketreg.database.driverClass=org.hsqldb.jdbcDriver +# ticketreg.database.url=jdbc:hsqldb:mem:cas-ticket-registry +# ticketreg.database.user=sa +# ticketreg.database.password= +# ticketreg.database.pool.minSize=6 +# ticketreg.database.pool.maxSize=18 +# ticketreg.database.pool.maxWait=10000 +# ticketreg.database.pool.maxIdleTime=120 +# ticketreg.database.pool.acquireIncrement=6 +# ticketreg.database.pool.idleConnectionTestPeriod=30 +# ticketreg.database.pool.connectionHealthQuery=select 1 +# ticketreg.database.pool.acquireRetryAttempts=5 +# ticketreg.database.pool.acquireRetryDelay=2000 +# ticketreg.database.pool.connectionHealthQuery=select 1 + +## +# JPA Service Registry Database Configuration +# +# svcreg.database.ddl.auto=create-drop +# svcreg.database.hibernate.dialect=org.hibernate.dialect.OracleDialect|MySQLInnoDBDialect|HSQLDialect +# svcreg.database.hibernate.batchSize=10 +# svcreg.database.driverClass=org.hsqldb.jdbcDriver +# svcreg.database.url=jdbc:hsqldb:mem:cas-ticket-registry +# svcreg.database.user=sa +# svcreg.database.password= +# svcreg.database.pool.minSize=6 +# svcreg.database.pool.maxSize=18 +# svcreg.database.pool.maxWait=10000 +# svcreg.database.pool.maxIdleTime=120 +# svcreg.database.pool.acquireIncrement=6 +# svcreg.database.pool.idleConnectionTestPeriod=30 +# svcreg.database.pool.connectionHealthQuery=select 1 +# svcreg.database.pool.acquireRetryAttempts=5 +# svcreg.database.pool.acquireRetryDelay=2000 +# svcreg.database.pool.connectionHealthQuery=select 1 + +## +# CAS SSO Cookie Generation & Security +# See https://github.com/mitreid-connect/json-web-key-generator +# +# Do note that the following settings MUST be generated per deployment. +# +# The encryption secret key. By default, must be a octet string of size 256. +# tgc.encryption.key= + +# The signing secret key. By default, must be a octet string of size 512. +# tgc.signing.key= + +# Decides whether SSO cookie should be created only under secure connections. +# tgc.secure=true + +# The expiration value of the SSO cookie +# tgc.maxAge=-1 + +# The name of the SSO cookie +# tgc.name=TGC + +# The path to which the SSO cookie will be scoped +# tgc.path=/cas + +# The expiration value of the SSO cookie for long-term authentications +# tgc.remember.me.maxAge=1209600 + +# Decides whether SSO Warning cookie should be created only under secure connections. +# warn.cookie.secure=true + +# The expiration value of the SSO Warning cookie +# warn.cookie.maxAge=-1 + +# The name of the SSO Warning cookie +# warn.cookie.name=CASPRIVACY + +# The path to which the SSO Warning cookie will be scoped +# warn.cookie.path=/cas + +# Whether we should track the most recent session by keeping the latest service ticket +# tgt.onlyTrackMostRecentSession = true + +## +# CAS UI Theme Resolution +# +# cas.themeResolver.defaultThemeName=cas-theme-default +# cas.themeResolver.pathprefix=/WEB-INF/view/jsp/ +# cas.themeResolver.param.name=theme +# Location of the Spring xml config file where views may be collected +# cas.viewResolver.xmlFile=/META-INF/spring/views.xml + +## +# CAS Logout Behavior +# WEB-INF/cas-servlet.xml +# +# Specify whether CAS should redirect to the specified service parameter on /logout requests +# cas.logout.followServiceRedirects=false + +## +# CAS Cached Attributes Timeouts +# Controls the cached attribute expiration policy +# +# Notes the duration in which attributes will be kept alive +# cas.attrs.timeToExpireInHours=2 + +## +# Single Sign-On Session +# +# Indicates whether an SSO session should be created for renewed authentication requests. +# create.sso.renewed.authn=true +# +# Indicates whether an SSO session can be created if no service is present. +# create.sso.missing.service=true + +## +# CAS Authentication Policy +# +# cas.authn.policy.any.tryall=false +# cas.authn.policy.req.tryall=false +# cas.authn.policy.req.handlername=handlerName + +## +# CAS PersonDirectory Principal Resolution +# +# cas.principal.resolver.persondir.principal.attribute=cn +# cas.principal.resolver.persondir.return.null=false + +## +# CAS Internationalization +# +# locale.default=en +# locale.param.name=locale +# message.bundle.encoding=UTF-8 +# message.bundle.cacheseconds=180 +# message.bundle.fallback.systemlocale=false +# message.bundle.usecode.message=true +# message.bundle.basenames=classpath:custom_messages,classpath:messages + +## +# CAS Authentication Throttling +# +#cas.throttle.failure.threshold= +#cas.throttle.failure.range.seconds= +#cas.throttle.username.parameter= +#cas.throttle.appcode= +#cas.throttle.authn.failurecode= +#cas.throttle.audit.query= + +## +# CAS Health Monitoring +# +# cas.monitor.st.warn.threshold=5000 +# cas.monitor.tgt.warn.threshold=10000 +# cas.monitor.free.mem.threshold=10 + +## +# CAS MongoDB Service Registry +# +# mongodb.host=mongodb database url +# mongodb.port=mongodb database port +# mongodb.userId=mongodb userid to bind +# mongodb.userPassword=mongodb password to bind +# cas.service.registry.mongo.db=Collection name to store service definitions +# mongodb.timeout=5000 + +## +# Spring Webflow Web Application Session +# Define the settings that are required to encrypt and persist the CAS web application session. +# See the cas-servlet.xml file to understand how these properties are used. +# +# The encryption secret key. By default, must be a octet string of size 256. +# webflow.encryption.key= + +# The signing secret key. By default, must be a octet string of size 512. +# webflow.signing.key= + +## +# Remote User Authentication +# +# ip.address.range= + +## +# Apache Shiro Authentication +# +# shiro.authn.requiredRoles= +# shiro.authn.requiredPermissions= +# shiro.authn.config.file=classpath:shiro.ini + +## +# YubiKey Authentication +# +# yubikey.client.id= +# yubikey.secret.key= + +## +# JDBC Authentication +# +# cas.jdbc.authn.query.encode.sql= +# cas.jdbc.authn.query.encode.alg= +# cas.jdbc.authn.query.encode.salt.static= +# cas.jdbc.authn.query.encode.password= +# cas.jdbc.authn.query.encode.salt= +# cas.jdbc.authn.query.encode.iterations.field= +# cas.jdbc.authn.query.encode.iterations= + +# cas.jdbc.authn.query.sql= + +# cas.jdbc.authn.search.password= +# cas.jdbc.authn.search.user= +# cas.jdbc.authn.search.table= + +## +# Duo security 2fa authentication provider +# https://www.duosecurity.com/docs/duoweb#1.-generate-an-akey +# +# cas.duo.api.host= +# cas.duo.integration.key= +# cas.duo.secret.key= +# cas.duo.application.key= + +## +# File Authentication +# +# file.authn.filename=classpath:people.txt +# file.authn.separator=:: + +## +# General Authentication +# +# cas.principal.transform.upperCase=false +# cas.authn.password.encoding.char=UTF-8 +# cas.authn.password.encoding.alg=SHA-256 +# cas.principal.transform.prefix= +# cas.principal.transform.suffix= + +## +# X509 Authentication +# +# cas.x509.authn.crl.checkAll=false +# cas.x509.authn.crl.throw.failure=true +# cas.x509.authn.crl.refresh.interval= +# cas.x509.authn.revocation.policy.threshold= +# cas.x509.authn.trusted.issuer.dnpattern= +# cas.x509.authn.max.path.length= +# cas.x509.authn.max.path.length.unspecified= +# cas.x509.authn.check.key.usage= +# cas.x509.authn.require.key.usage= +# cas.x509.authn.subject.dnpattern= +# cas.x509.authn.principal.descriptor= +# cas.x509.authn.principal.serial.no.prefix= +# cas.x509.authn.principal.value.delim= + +## +# Accepted Users Authentication +# +accept.authn.users=casuser::Mellon + +## +# Rejected Users Authentication +# +# reject.authn.users= + +## +# JAAS Authentication +# +# cas.authn.jaas.realm=CAS +# cas.authn.jaas.kerb.realm= +# cas.authn.jaas.kerb.kdc= + +## +# Single Sign-On Session TGT Timeouts +# +# Inactivity Timeout Policy +# tgt.timeout.maxTimeToLiveInSeconds=28800 + +# Hard Timeout Policy +# tgt.timeout.hard.maxTimeToLiveInSeconds +# +# Throttled Timeout Policy +# tgt.throttled.maxTimeToLiveInSeconds=28800 +# tgt.throttled.timeInBetweenUsesInSeconds=5 + +# Default Expiration Policy +# tgt.maxTimeToLiveInSeconds=28800 +# tgt.timeToKillInSeconds=7200 + +## +# Service Ticket Timeout +# +# st.timeToKillInSeconds=10 +# st.numberOfUses=1 + +## +# Http Client Settings +# +# The http client read timeout in milliseconds +# http.client.read.timeout=5000 + +# The http client connection timeout in milliseconds +# http.client.connection.timeout=5000 +# +# The http client truststore file, in addition to the default's +# http.client.truststore.file=classpath:truststore.jks +# +# The http client truststore's password +# http.client.truststore.psw=changeit + +## +# Single Logout Out Callbacks +# +# To turn off all back channel SLO requests set this to true +# slo.callbacks.disabled=false +# +# To send callbacks to endpoints synchronously, set this to false +# slo.callbacks.asynchronous=true + +## +# CAS Protocol Security Filter +# +# Are multi-valued parameters accepted? +# cas.http.allow.multivalue.params=false + +# Define the list of request parameters to examine for sanity +# cas.http.check.params=ticket,service,renew,gateway,warn,target,SAMLart,pgtUrl,pgt,pgtId,pgtIou,targetService + +# Define the list of request parameters only allowed via POST +# cas.http.allow.post.params=username,password + +## +# JSON Service Registry +# +# Directory location where JSON service files may be found. +# service.registry.config.location=classpath:services + +## +# Service Registry Periodic Reloading Scheduler +# Default sourced from WEB-INF/spring-configuration/applicationContext.xml +# +# Force a startup delay of 2 minutes. +# service.registry.quartz.reloader.startDelay=120000 +# +# Reload services every 2 minutes +# service.registry.quartz.reloader.repeatInterval=120000 + +## +# Background Scheduler +# +# Wait for scheduler to finish running before shutting down CAS. +# scheduler.shutdown.wait=true +# +# Attempt to interrupt background jobs when shutting down CAS +# scheduler.shutdown.interruptJobs=true + +## +# Audits +# +# Use single line format for audit blocks +# cas.audit.singleline=true +# Separator to use between each fields in a single audit event +# cas.audit.singleline.separator=| +# Application code for audits +# cas.audit.appcode=CAS +# +## JDBC Audits +# +#cas.audit.max.agedays= +#cas.audit.database.dialect= +#cas.audit.database.batchSize= +#cas.audit.database.ddl.auto= +#cas.audit.database.gen.ddl= +#cas.audit.database.show.sql= +#cas.audit.database.driverClass= +#cas.audit.database.url= +#cas.audit.database.user= +#cas.audit.database.password= +#cas.audit.database.pool.minSize= +#cas.audit.database.pool.minSize= +#cas.audit.database.pool.maxSize= +#cas.audit.database.pool.maxIdleTime= +#cas.audit.database.pool.maxWait= +#cas.audit.database.pool.acquireIncrement= +#cas.audit.database.pool.acquireRetryAttempts= +#cas.audit.database.pool.acquireRetryDelay= +#cas.audit.database.pool.idleConnectionTestPeriod= +#cas.audit.database.pool.connectionHealthQuery= + +## +# Metrics +# Default sourced from WEB-INF/spring-configuration/metricsConfiguration.xml: +# +# Define how often should metric data be reported. Default is 30 seconds. +# metrics.refresh.interval=30s + +## +# Encoding +# +# Set the encoding to use for requests. Default is UTF-8 +# httprequest.web.encoding=UTF-8 + +# Default is true. Switch this to "false" to not enforce the specified encoding in any case, +# applying it as default response encoding as well. +# httprequest.web.encoding.force=true + +## +# Response Headers +# +# httpresponse.header.cache=false +# httpresponse.header.hsts=false +# httpresponse.header.xframe=false +# httpresponse.header.xcontent=false +# httpresponse.header.xss=false + +## +# SAML +# +# Indicates the SAML response issuer +# cas.saml.response.issuer=localhost +# +# Indicates the skew allowance which controls the issue instant of the SAML response +# cas.saml.response.skewAllowance=0 +# +# Indicates whether SAML ticket id generation should be saml2-compliant. +# cas.saml.ticketid.saml2=false + +## +# Default Ticket Registry +# +# default.ticket.registry.initialcapacity=1000 +# default.ticket.registry.loadfactor=1 +# default.ticket.registry.concurrency=20 + +## +# Ticket Registry Cleaner +# +# Indicates how frequently the Ticket Registry cleaner should run. Configured in seconds. +# ticket.registry.cleaner.startdelay=20 +# ticket.registry.cleaner.repeatinterval=5000 + +## +# Ticket ID Generation +# +# lt.ticket.maxlength=20 +# st.ticket.maxlength=20 +# tgt.ticket.maxlength=50 +# pgt.ticket.maxlength=50 + +## +# Google Apps public/private key +# +# cas.saml.googleapps.publickey.file=file:/etc/cas/public.key +# cas.saml.googleapps.privatekey.file=file:/etc/cas/private.p8 +# cas.saml.googleapps.key.alg=RSA + +## +# WS-FED +# +# The claim from ADFS that should be used as the user's identifier. +# cas.wsfed.idp.idattribute=upn +# +# Federation Service identifier +# cas.wsfed.idp.id=https://adfs.example.org/adfs/services/trust +# +# The ADFS login url. +# cas.wsfed.idp.url=https://adfs.example.org/adfs/ls/ +# +# Identifies resource(s) that point to ADFS's signing certificates. +# These are used verify the WS Federation token that is returned by ADFS. +# Multiple certificates may be separated by comma. +# cas.wsfed.idp.signingcerts=classpath:adfs-signing.crt +# +# Unique identifier that will be set in the ADFS configuration. +# cas.wsfed.rp.id=urn:cas:localhost +# +# Slack dealing with time-drift between the ADFS Server and the CAS Server. +# cas.wsfed.idp.tolerance=10000 +# +# Decides which bundle of attributes should be resolved during WS-FED authentication. +# cas.wsfed.idp.attribute.resolver.enabled=true +# cas.wsfed.idp.attribute.resolver.type=WSFED +# +# Private/Public keypair used to decrypt assertions, if any. +# cas.wsfed.idp.enc.privateKey=classpath:private.key +# cas.wsfed.idp.enc.cert=classpath:certificate.crt +# cas.wsfed.idp.enc.privateKeyPassword=NONE + +## +# LDAP User Details +# +# ldap.userdetails.service.user.attr= +# ldap.userdetails.service.role.attr= + +## +# LDAP Service Registry +# +# svcreg.ldap.baseDn=dc=example,dc=org + +## +# Password Policy +# +# Warn all users of expiration date regardless of warningDays value. +# password.policy.warnAll=false + +# Threshold number of days to begin displaying password expiration warnings. +# password.policy.warningDays=30 + +# URL to which the user will be redirected to change the password. +# password.policy.url=https://password.example.edu/change + +# password.policy.warn.attribute.name=attributeName +# password.policy.warn.attribute.value=attributeValue +# password.policy.warn.display.matched=true + +## +# CAS REST API Services +# +# cas.rest.services.attributename= +# cas.rest.services.attributevalue= + +## +# Ticket Registry +# +# Secret key to use when encrypting tickets in a distributed ticket registry. +# ticket.encryption.secretkey=C@$W3bSecretKey! + +# Secret key to use when signing tickets in a distributed ticket registry. +# By default, must be a octet string of size 512. +# ticket.signing.secretkey=szxK-5_eJjs-aUj-64MpUZ-GPPzGLhYPLGl0wrYjYNVAGva2P0lLe6UGKGM7k8dWxsOVGutZWgvmY3l5oVPO3w +# Secret key algorithm used +# ticket.secretkey.alg=AES + +## +# Hazelcast Ticket Registry +# +# hz.config.location=file:/etc/cas/hazelcast.xml +# hz.mapname=tickets +# hz.cluster.logging.type=slf4j +# hz.cluster.portAutoIncrement=true +# hz.cluster.port=5701 +# hz.cluster.multicast.enabled=false +# hz.cluster.members=cas1.example.com,cas2.example.com +# hz.cluster.tcpip.enabled=true +# hz.cluster.multicast.enabled=false +# hz.cluster.max.heapsize.percentage=85 +# hz.cluster.max.heartbeat.seconds=300 +# hz.cluster.eviction.percentage=10 +# hz.cluster.eviction.policy=LRU +# hz.cluster.instance.name=${host.name} + +## +# Ehcache Ticket Registry +# +# ehcache.config.file=classpath:ehcache-replicated.xml +# ehcache.cachemanager.shared=false +# ehcache.cachemanager.name=ticketRegistryCacheManager +# ehcache.disk.expiry.interval.seconds=0 +# ehcache.disk.persistent=false +# ehcache.eternal=false +# ehcache.max.elements.memory=10000 +# ehcache.max.elements.disk=0 +# ehcache.eviction.policy=LRU +# ehcache.overflow.disk=false +# ehcache.cache.st.name=org.jasig.cas.ticket.ServiceTicket +# ehcache.cache.st.timeIdle=0 +# ehcache.cache.st.timeAlive=300 +# ehcache.cache.tgt.name=org.jasig.cas.ticket.TicketGrantingTicket +# ehcache.cache.tgt.timeIdle=7201 +# ehcache.cache.tgt.timeAlive=0 +# ehcache.cache.loader.async=true +# ehcache.cache.loader.chunksize=5000000 +# ehcache.repl.async.interval=10000 +# ehcache.repl.async.batch.size=100 +# ehcache.repl.sync.puts=true +# ehcache.repl.sync.putscopy=true +# ehcache.repl.sync.updates=true +# ehcache.repl.sync.updatesCopy=true +# ehcache.repl.sync.removals=true + +## +# Ehcache Monitoring +# +# cache.monitor.warn.free.threshold=10 +# cache.monitor.eviction.threshold=0 + +## +# Memcached Ticket Registry +# +# memcached.servers=localhost:11211 +# memcached.hashAlgorithm=FNV1_64_HASH +# memcached.protocol=BINARY +# memcached.locatorType=ARRAY_MOD +# memcached.failureMode=Redistribute + +## +# Memcached Monitoring +# +# cache.monitor.warn.free.threshold=10 +# cache.monitor.eviction.threshold=0 + +## +# RADIUS Authentication Server +# +# cas.radius.client.inetaddr=localhost +# cas.radius.client.port.acct= +# cas.radius.client.socket.timeout=60 +# cas.radius.client.port.authn= +# cas.radius.client.sharedsecret=N0Sh@ar3d$ecReT +# cas.radius.server.protocol=EAP_MSCHAPv2 +# cas.radius.server.retries=3 +# cas.radius.server.nasIdentifier= +# cas.radius.server.nasPort=-1 +# cas.radius.server.nasPortId=-1 +# cas.radius.server.nasRealPort=-1 +# cas.radius.server.nasPortType=-1 +# cas.radius.server.nasIpAddress= +# cas.radius.server.nasIpv6Address= +# cas.radius.failover.authn=false +# cas.radius.failover.exception=false + +## +# SPNEGO Authentication +# +# cas.spnego.ldap.attribute=spnegoattribute +# cas.spnego.ldap.filter=host={0} +# cas.spnego.ldap.basedn= +# cas.spnego.hostname.pattern=.+ +# cas.spnego.ip.pattern= +# cas.spnego.alt.remote.host.attribute +# cas.spengo.use.principal.domain=false +# cas.spnego.ntlm.allowed=true +# cas.spnego.kerb.debug=false +# cas.spnego.kerb.realm=EXAMPLE.COM +# cas.spnego.kerb.kdc=172.10.1.10 +# cas.spnego.login.conf.file=/path/to/login +# cas.spnego.jcifs.domain= +# cas.spnego.jcifs.domaincontroller= +# cas.spnego.jcifs.netbios.cache.policy:600 +# cas.spnego.jcifs.netbios.wins= +# cas.spnego.jcifs.password= +# cas.spnego.jcifs.service.password= +# cas.spnego.jcifs.socket.timeout:300000 +# cas.spnego.jcifs.username= +# cas.spnego.kerb.conf= +# cas.spnego.ntlm=false +# cas.spnego.supportedBrowsers=MSIE,Trident,Firefox,AppleWebKit +# cas.spnego.mixed.mode.authn=false +# cas.spnego.send.401.authn.failure=false +# cas.spnego.principal.resolver.transform=NONE +# cas.spnego.service.principal=HTTP/cas.example.com@EXAMPLE.COM + +## +# NTLM Authentication +# +# ntlm.authn.domain.controller= +# ntlm.authn.include.pattern= +# ntlm.authn.load.balance=true + +## +# Authentication delegation using pac4j +# +# cas.pac4j.client.authn.typedidused=true +# cas.pac4j.facebook.id= +# cas.pac4j.facebook.secret= +# cas.pac4j.facebook.scope= +# cas.pac4j.facebook.fields= +# cas.pac4j.twitter.id= +# cas.pac4j.twitter.secret= +# cas.pac4j.saml.keystorePassword= +# cas.pac4j.saml.privateKeyPassword= +# cas.pac4j.saml.keystorePath= +# cas.pac4j.saml.identityProviderMetadataPath= +# cas.pac4j.saml.maximumAuthenticationLifetime= +# cas.pac4j.saml.serviceProviderEntityId= +# cas.pac4j.saml.serviceProviderMetadataPath= +# cas.pac4j.cas.loginUrl= +# cas.pac4j.cas.protocol= +# cas.pac4j.oidc.id= +# cas.pac4j.oidc.secret= +# cas.pac4j.oidc.discoveryUri= +# cas.pac4j.oidc.useNonce= +# cas.pac4j.oidc.preferredJwsAlgorithm= +# cas.pac4j.oidc.maxClockSkew= +# cas.pac4j.oidc.customParamKey1= +# cas.pac4j.oidc.customParamValue1= +# cas.pac4j.oidc.customParamKey2= +# cas.pac4j.oidc.customParamValue2= + +## +# CAS Acceptable Usage Policy Settings +# +# cas.aup.ldap.search.filter=cn={0} +# cas.aup.ldap.url=ldap://127.0.0.1:1389 +# cas.aup.ldap.ssl=false +# cas.aup.ldap.startTLS=false +# cas.aup.ldap.basedn=dc=example,dc=org +# cas.aup.attribute= diff --git a/src/main/resources/WEB-INF/deployerConfigContext.xml b/src/main/resources/WEB-INF/deployerConfigContext.xml new file mode 100644 index 0000000..1596b19 --- /dev/null +++ b/src/main/resources/WEB-INF/deployerConfigContext.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + memberOf + + faculty + staff + org + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/WEB-INF/spring-configuration/applicationContext.xml b/src/main/resources/WEB-INF/spring-configuration/applicationContext.xml new file mode 100644 index 0000000..ae6d5b9 --- /dev/null +++ b/src/main/resources/WEB-INF/spring-configuration/applicationContext.xml @@ -0,0 +1,121 @@ + + + + This is the main Spring configuration file with some of the main "core" classes defined. You shouldn't really + modify this unless you know what you're doing! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + passThroughController + pingController + threadsController + metricsController + healthController + + + + + + + com.codahale.metrics.servlets.HealthCheckServlet + + + healthServlet + + + + + + com.codahale.metrics.servlets.MetricsServlet + + + metricsServlet + + + + + + com.codahale.metrics.servlets.PingServlet + + + ping + + + + + + com.codahale.metrics.servlets.ThreadDumpServlet + + + threads + + + + + + + + + + + ${scheduler.shutdown.interruptJobs:true} + + ${scheduler.shutdown.interruptJobs:true} + + + + + + + diff --git a/src/main/resources/WEB-INF/spring-configuration/auditTrailContext.xml b/src/main/resources/WEB-INF/spring-configuration/auditTrailContext.xml new file mode 100644 index 0000000..368cc6d --- /dev/null +++ b/src/main/resources/WEB-INF/spring-configuration/auditTrailContext.xml @@ -0,0 +1,108 @@ + + + + + Configuration file for the Inspektr package which handles auditing for Java applications. + If enabled this should be modified to log audit and statistics information the same way + your local applications do. The default is currently to log to the console which is good + for debugging/testing purposes. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/WEB-INF/spring-configuration/filters.xml b/src/main/resources/WEB-INF/spring-configuration/filters.xml new file mode 100644 index 0000000..6653264 --- /dev/null +++ b/src/main/resources/WEB-INF/spring-configuration/filters.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/WEB-INF/spring-configuration/metricsContext.xml b/src/main/resources/WEB-INF/spring-configuration/metricsContext.xml new file mode 100644 index 0000000..d04fb73 --- /dev/null +++ b/src/main/resources/WEB-INF/spring-configuration/metricsContext.xml @@ -0,0 +1,38 @@ + + + + This is the Spring configuration file that orchestrates the CAS metrics. + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/WEB-INF/spring-configuration/propertyFileConfigurer.xml b/src/main/resources/WEB-INF/spring-configuration/propertyFileConfigurer.xml new file mode 100644 index 0000000..6596390 --- /dev/null +++ b/src/main/resources/WEB-INF/spring-configuration/propertyFileConfigurer.xml @@ -0,0 +1,23 @@ + + + + This file lets CAS know where you've stored the cas.properties file which details some of the configuration + options + that are specific to your environment. You can specify the location of the file here. You may wish to place the + file outside + of the Servlet context if you have options that are specific to a tier (i.e. test vs. production) so that the + WAR file + can be moved between tiers without modification. + + + + + + + diff --git a/src/main/resources/WEB-INF/spring-configuration/protocolViewsConfiguration.xml b/src/main/resources/WEB-INF/spring-configuration/protocolViewsConfiguration.xml new file mode 100644 index 0000000..dc845b5 --- /dev/null +++ b/src/main/resources/WEB-INF/spring-configuration/protocolViewsConfiguration.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/WEB-INF/spring-configuration/securityContext.xml b/src/main/resources/WEB-INF/spring-configuration/securityContext.xml new file mode 100644 index 0000000..2b89f9c --- /dev/null +++ b/src/main/resources/WEB-INF/spring-configuration/securityContext.xml @@ -0,0 +1,35 @@ + + + + + Security configuration for sensitive areas of CAS : status and statistics. + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/WEB-INF/spring-configuration/webflowContext.xml b/src/main/resources/WEB-INF/spring-configuration/webflowContext.xml new file mode 100644 index 0000000..a65ee55 --- /dev/null +++ b/src/main/resources/WEB-INF/spring-configuration/webflowContext.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + cas_views + + + + + + + diff --git a/src/main/resources/WEB-INF/unused-spring-configuration/clearpass-configuration.xml b/src/main/resources/WEB-INF/unused-spring-configuration/clearpass-configuration.xml new file mode 100644 index 0000000..d07faf6 --- /dev/null +++ b/src/main/resources/WEB-INF/unused-spring-configuration/clearpass-configuration.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + clearPassController + + + + + + + + + + + + + + + ... + + + + + + + + + + + diff --git a/src/main/resources/WEB-INF/view/jsp/authorizationFailure.jsp b/src/main/resources/WEB-INF/view/jsp/authorizationFailure.jsp new file mode 100644 index 0000000..84d3986 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/authorizationFailure.jsp @@ -0,0 +1,23 @@ + + +<%@ page isErrorPage="true" %> +<%@ page import="org.jasig.cas.web.support.WebUtils"%> + +
+

${pageContext.errorData.statusCode} -

+ + <% + Object casAcessDeniedKey = request.getAttribute(WebUtils.CAS_ACCESS_DENIED_REASON); + request.setAttribute("casAcessDeniedKey", casAcessDeniedKey); + + %> + + + +

+
+
+

<%=request.getAttribute("javax.servlet.error.message")%>

+

+
+ diff --git a/src/main/resources/WEB-INF/view/jsp/default/ui/casAcceptableUsagePolicyView.jsp b/src/main/resources/WEB-INF/view/jsp/default/ui/casAcceptableUsagePolicyView.jsp new file mode 100644 index 0000000..4ee34fd --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/default/ui/casAcceptableUsagePolicyView.jsp @@ -0,0 +1,26 @@ + +
+ + +

Acceptable Usage Policy

+
+ The purpose of this policy is to establish acceptable and unacceptable use of electronic devices and network resources in conjunction with the established culture of ethical and lawful behavior, openness, trust, and integrity. + +

+ By using these resources, you agree to abide by the Acceptable Usage Policy. +

+ +

Click '' to continue. Otherwise, click ''.

+
+ +
+ + + " type="submit" /> + " type="button" + onclick="location.href = location.href;" /> +
+
+
+ diff --git a/src/main/resources/WEB-INF/view/jsp/default/ui/casAccountDisabledView.jsp b/src/main/resources/WEB-INF/view/jsp/default/ui/casAccountDisabledView.jsp new file mode 100644 index 0000000..0deddbf --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/default/ui/casAccountDisabledView.jsp @@ -0,0 +1,6 @@ + +
+

+

+
+ diff --git a/src/main/resources/WEB-INF/view/jsp/default/ui/casAccountLockedView.jsp b/src/main/resources/WEB-INF/view/jsp/default/ui/casAccountLockedView.jsp new file mode 100644 index 0000000..c41bccd --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/default/ui/casAccountLockedView.jsp @@ -0,0 +1,6 @@ + +
+

+

+
+ diff --git a/src/main/resources/WEB-INF/view/jsp/default/ui/casBadHoursView.jsp b/src/main/resources/WEB-INF/view/jsp/default/ui/casBadHoursView.jsp new file mode 100644 index 0000000..ace5f80 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/default/ui/casBadHoursView.jsp @@ -0,0 +1,6 @@ + +
+

+

+
+ diff --git a/src/main/resources/WEB-INF/view/jsp/default/ui/casBadWorkstationView.jsp b/src/main/resources/WEB-INF/view/jsp/default/ui/casBadWorkstationView.jsp new file mode 100644 index 0000000..6f5ead2 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/default/ui/casBadWorkstationView.jsp @@ -0,0 +1,6 @@ + +
+

+

+
+ diff --git a/src/main/resources/WEB-INF/view/jsp/default/ui/casConfirmView.jsp b/src/main/resources/WEB-INF/view/jsp/default/ui/casConfirmView.jsp new file mode 100644 index 0000000..5d8cc96 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/default/ui/casConfirmView.jsp @@ -0,0 +1,5 @@ + +
+

+
+ \ No newline at end of file diff --git a/src/main/resources/WEB-INF/view/jsp/default/ui/casExpiredPassView.jsp b/src/main/resources/WEB-INF/view/jsp/default/ui/casExpiredPassView.jsp new file mode 100644 index 0000000..8ae8775 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/default/ui/casExpiredPassView.jsp @@ -0,0 +1,6 @@ + +
+

+

+
+ diff --git a/src/main/resources/WEB-INF/view/jsp/default/ui/casGenericSuccessView.jsp b/src/main/resources/WEB-INF/view/jsp/default/ui/casGenericSuccessView.jsp new file mode 100644 index 0000000..956ed44 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/default/ui/casGenericSuccessView.jsp @@ -0,0 +1,8 @@ + +
+

+

+

+
+ + diff --git a/src/main/resources/WEB-INF/view/jsp/default/ui/casLoginMessageView.jsp b/src/main/resources/WEB-INF/view/jsp/default/ui/casLoginMessageView.jsp new file mode 100644 index 0000000..716cac3 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/default/ui/casLoginMessageView.jsp @@ -0,0 +1,22 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + +
+

Authentication Succeeded with Warnings

+ + +

${message.text}

+
+ +
+ + + + + + + + + diff --git a/src/main/resources/WEB-INF/view/jsp/default/ui/casLoginView.jsp b/src/main/resources/WEB-INF/view/jsp/default/ui/casLoginView.jsp new file mode 100644 index 0000000..dbccf30 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/default/ui/casLoginView.jsp @@ -0,0 +1,198 @@ + + + +
+

+

+
+
+ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+

${fn:escapeXml(registeredServiceName)}

+

${fn:escapeXml(registeredServiceDescription)}

+
+
+

+ + +

+ + + + +

+ +
+ + + + + " /> + + + + + + +
+ +
+ + <%-- + NOTE: Certain browsers will offer the option of caching passwords for a user. There is a non-standard attribute, + "autocomplete" that when set to "off" will tell certain browsers not to prompt to cache credentials. For more + information, see the following web page: + http://www.technofundo.com/tech/web/ie_autocomplete.html + --%> + + + +
+ + + +
+ + + + + " tabindex="6" type="submit" /> + " tabindex="7" type="reset" /> +
+
+
+ + + + diff --git a/src/main/resources/WEB-INF/view/jsp/default/ui/casLogoutView.jsp b/src/main/resources/WEB-INF/view/jsp/default/ui/casLogoutView.jsp new file mode 100644 index 0000000..187c52a --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/default/ui/casLogoutView.jsp @@ -0,0 +1,7 @@ + +
+

+

+

+
+ \ No newline at end of file diff --git a/src/main/resources/WEB-INF/view/jsp/default/ui/casMustChangePassView.jsp b/src/main/resources/WEB-INF/view/jsp/default/ui/casMustChangePassView.jsp new file mode 100644 index 0000000..47772dd --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/default/ui/casMustChangePassView.jsp @@ -0,0 +1,6 @@ + +
+

+

+
+ diff --git a/src/main/resources/WEB-INF/view/jsp/default/ui/includes/bottom.jsp b/src/main/resources/WEB-INF/view/jsp/default/ui/includes/bottom.jsp new file mode 100644 index 0000000..0bde3a8 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/default/ui/includes/bottom.jsp @@ -0,0 +1,22 @@ +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + + + + + + + + + + + + + diff --git a/src/main/resources/WEB-INF/view/jsp/default/ui/includes/top.jsp b/src/main/resources/WEB-INF/view/jsp/default/ui/includes/top.jsp new file mode 100644 index 0000000..85cb24b --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/default/ui/includes/top.jsp @@ -0,0 +1,33 @@ + + +<%@ page pageEncoding="UTF-8" %> +<%@ page contentType="text/html; charset=UTF-8" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + + + + + + CAS – Central Authentication Service + + + + + + + " /> + " type="image/x-icon" /> + + + + +
+
+ +

Central Authentication Service (CAS)

+
+
diff --git a/src/main/resources/WEB-INF/view/jsp/default/ui/serviceErrorSsoView.jsp b/src/main/resources/WEB-INF/view/jsp/default/ui/serviceErrorSsoView.jsp new file mode 100644 index 0000000..a9fcb96 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/default/ui/serviceErrorSsoView.jsp @@ -0,0 +1,11 @@ + + + + + + +
+

+

+
+ diff --git a/src/main/resources/WEB-INF/view/jsp/default/ui/serviceErrorView.jsp b/src/main/resources/WEB-INF/view/jsp/default/ui/serviceErrorView.jsp new file mode 100644 index 0000000..2624d1d --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/default/ui/serviceErrorView.jsp @@ -0,0 +1,6 @@ + +
+

+

+
+ diff --git a/src/main/resources/WEB-INF/view/jsp/errors.jsp b/src/main/resources/WEB-INF/view/jsp/errors.jsp new file mode 100644 index 0000000..ed48be6 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/errors.jsp @@ -0,0 +1,6 @@ + +
+

+

+
+ diff --git a/src/main/resources/WEB-INF/view/jsp/monitoring/viewConfig.jsp b/src/main/resources/WEB-INF/view/jsp/monitoring/viewConfig.jsp new file mode 100644 index 0000000..0a380a8 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/monitoring/viewConfig.jsp @@ -0,0 +1,74 @@ +<%@include file="/WEB-INF/view/jsp/default/ui/includes/top.jsp"%> + + + + + + + +
+

+ + +
+

+
+ "> +
+
+ +
+
+ +
+
+

+
+
+
+ + + + + + + + + + + + + + +
+
+ +
+ +
+
+ "> +
+
+ +
+<%@include file="/WEB-INF/view/jsp/default/ui/includes/bottom.jsp" %> diff --git a/src/main/resources/WEB-INF/view/jsp/monitoring/viewSsoSessions.jsp b/src/main/resources/WEB-INF/view/jsp/monitoring/viewSsoSessions.jsp new file mode 100644 index 0000000..58bcc17 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/monitoring/viewSsoSessions.jsp @@ -0,0 +1,323 @@ +<%@include file="/WEB-INF/view/jsp/default/ui/includes/top.jsp"%> + + + +
+

+ +
+

+
+ "> +
+
+ +
+
+ +
+
+

+
+
+
+
+
+
+
+
+
+ +
+
+
0
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
0
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
0
+
+
+
+
+
+
+ <%--
graph
--%> +
+
+ +
+
+ + + +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
   
UserTGTAuth_DateUsage_Count
+
+
+ +
+ "> +
+
+
+
+
+<%@include file="/WEB-INF/view/jsp/default/ui/includes/bottom.jsp" %> diff --git a/src/main/resources/WEB-INF/view/jsp/monitoring/viewStatistics.jsp b/src/main/resources/WEB-INF/view/jsp/monitoring/viewStatistics.jsp new file mode 100644 index 0000000..22c8ced --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/monitoring/viewStatistics.jsp @@ -0,0 +1,218 @@ +<%@include file="/WEB-INF/view/jsp/default/ui/includes/top.jsp"%> + + + +
Loading...
+ +
+

+ +
+ <%-- Registry Ticket Section --%> +

+
+
+
+
+
+
+
+
${unexpiredTgts}
+
+
+
+
+
+
+
+
+
+
+
+
${unexpiredSts}
+
+
+
+
+
+
+
+
+
+
+
+
${expiredTgts}
+
+
+
+
+
+
+
+
+
+
+
+
${expiredSts}
+
+
+
+
+
+
+
+ +
+
+ +

+
+ <%-- JVM Server Section --%> +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
${serverIpAddress} (${serverHostName})
${casTicketSuffix}
${startTime}
${upTime}
${freeMemory} MB
${totalMemory} MB
${maxMemory} MB
${availableProcessors}
+
+
+
+
+ +
+ <%-- Thread Dump Section --%> +
+

+
+

+                    
+                
+
+
+ +
+ <%-- Metrics Section --%> +
+

+ +
+
+
+ + + + + + +<%@include file="/WEB-INF/view/jsp/default/ui/includes/bottom.jsp" %> diff --git a/src/main/resources/WEB-INF/view/jsp/protocol/2.0/casProxyFailureView.jsp b/src/main/resources/WEB-INF/view/jsp/protocol/2.0/casProxyFailureView.jsp new file mode 100644 index 0000000..6e8d26e --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/protocol/2.0/casProxyFailureView.jsp @@ -0,0 +1,7 @@ +<%@ page session="false" contentType="application/xml; charset=UTF-8" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + + ${fn:escapeXml(description)} + + diff --git a/src/main/resources/WEB-INF/view/jsp/protocol/2.0/casProxySuccessView.jsp b/src/main/resources/WEB-INF/view/jsp/protocol/2.0/casProxySuccessView.jsp new file mode 100644 index 0000000..2a948ff --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/protocol/2.0/casProxySuccessView.jsp @@ -0,0 +1,7 @@ +<%@ page session="false" contentType="application/xml; charset=UTF-8" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + + ${fn:escapeXml(ticket)} + + diff --git a/src/main/resources/WEB-INF/view/jsp/protocol/2.0/casServiceValidationFailure.jsp b/src/main/resources/WEB-INF/view/jsp/protocol/2.0/casServiceValidationFailure.jsp new file mode 100644 index 0000000..cdeaebe --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/protocol/2.0/casServiceValidationFailure.jsp @@ -0,0 +1,7 @@ +<%@ page session="false" contentType="application/xml; charset=UTF-8" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + + ${fn:escapeXml(description)} + + diff --git a/src/main/resources/WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp b/src/main/resources/WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp new file mode 100644 index 0000000..8c1434f --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/protocol/2.0/casServiceValidationSuccess.jsp @@ -0,0 +1,18 @@ +<%@ page session="false" contentType="application/xml; charset=UTF-8" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> + + + ${fn:escapeXml(principal.id)} + + ${pgtIou} + + + + + ${fn:escapeXml(proxy.principal.id)} + + + + + diff --git a/src/main/resources/WEB-INF/view/jsp/protocol/3.0/casServiceValidationFailure.jsp b/src/main/resources/WEB-INF/view/jsp/protocol/3.0/casServiceValidationFailure.jsp new file mode 100644 index 0000000..cdeaebe --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/protocol/3.0/casServiceValidationFailure.jsp @@ -0,0 +1,7 @@ +<%@ page session="false" contentType="application/xml; charset=UTF-8" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + + ${fn:escapeXml(description)} + + diff --git a/src/main/resources/WEB-INF/view/jsp/protocol/3.0/casServiceValidationSuccess.jsp b/src/main/resources/WEB-INF/view/jsp/protocol/3.0/casServiceValidationSuccess.jsp new file mode 100644 index 0000000..6c7c996 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/protocol/3.0/casServiceValidationSuccess.jsp @@ -0,0 +1,36 @@ +<%@ page session="false" contentType="application/xml; charset=UTF-8" %> +<%@ page import="java.util.*, java.util.Map.Entry" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> + + + ${fn:escapeXml(principal.id)} + + ${pgtIou} + + + + + ${fn:escapeXml(proxy.principal.id)} + + + + + + + + + + ${fn:escapeXml(attrval)} + + + + + + + diff --git a/src/main/resources/WEB-INF/view/jsp/protocol/casPostResponseView.jsp b/src/main/resources/WEB-INF/view/jsp/protocol/casPostResponseView.jsp new file mode 100644 index 0000000..0c2a471 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/protocol/casPostResponseView.jsp @@ -0,0 +1,17 @@ +<%@ page language="java" session="false"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> + + +
" method="post"> +
+ + + +
+ +
+ + \ No newline at end of file diff --git a/src/main/resources/WEB-INF/view/jsp/protocol/clearPass/clearPassFailure.jsp b/src/main/resources/WEB-INF/view/jsp/protocol/clearPass/clearPassFailure.jsp new file mode 100644 index 0000000..8e3a273 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/protocol/clearPass/clearPassFailure.jsp @@ -0,0 +1,5 @@ +<%@ page session="false" contentType="application/xml; charset=UTF-8" %> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + ${fn:escapeXml(description)} + diff --git a/src/main/resources/WEB-INF/view/jsp/protocol/clearPass/clearPassSuccess.jsp b/src/main/resources/WEB-INF/view/jsp/protocol/clearPass/clearPassSuccess.jsp new file mode 100644 index 0000000..aa85b18 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/protocol/clearPass/clearPassSuccess.jsp @@ -0,0 +1,8 @@ +<%@ page session="false" contentType="application/xml; charset=UTF-8" %> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> + + + ${fn:escapeXml(credentials)} + + diff --git a/src/main/resources/WEB-INF/view/jsp/protocol/oauth/confirm.jsp b/src/main/resources/WEB-INF/view/jsp/protocol/oauth/confirm.jsp new file mode 100644 index 0000000..defed10 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/protocol/oauth/confirm.jsp @@ -0,0 +1,13 @@ + +
+

+ +

+ +

+ +

+ +

+
+ diff --git a/src/main/resources/WEB-INF/view/jsp/protocol/openid/casOpenIdAssociationFailureView.jsp b/src/main/resources/WEB-INF/view/jsp/protocol/openid/casOpenIdAssociationFailureView.jsp new file mode 100644 index 0000000..8e376b0 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/protocol/openid/casOpenIdAssociationFailureView.jsp @@ -0,0 +1 @@ +<%= "openid.mode:cancel\n" %> \ No newline at end of file diff --git a/src/main/resources/WEB-INF/view/jsp/protocol/openid/casOpenIdAssociationSuccessView.jsp b/src/main/resources/WEB-INF/view/jsp/protocol/openid/casOpenIdAssociationSuccessView.jsp new file mode 100644 index 0000000..dea573d --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/protocol/openid/casOpenIdAssociationSuccessView.jsp @@ -0,0 +1,9 @@ +<%@ page import="java.util.Set, java.util.Map, java.util.Iterator" %><% + Map parameters = (Map)request.getAttribute("parameters"); + Iterator iterator = parameters.keySet().iterator(); + while (iterator.hasNext()) { + String key = (String)iterator.next(); + String parameter = (String)parameters.get(key); + out.print(key+":"+parameter+"\n"); + } +%> \ No newline at end of file diff --git a/src/main/resources/WEB-INF/view/jsp/protocol/openid/casOpenIdServiceFailureView.jsp b/src/main/resources/WEB-INF/view/jsp/protocol/openid/casOpenIdServiceFailureView.jsp new file mode 100644 index 0000000..31150f3 --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/protocol/openid/casOpenIdServiceFailureView.jsp @@ -0,0 +1 @@ +<%= "openid.mode:id_res\nis_valid:false\n" %> \ No newline at end of file diff --git a/src/main/resources/WEB-INF/view/jsp/protocol/openid/casOpenIdServiceSuccessView.jsp b/src/main/resources/WEB-INF/view/jsp/protocol/openid/casOpenIdServiceSuccessView.jsp new file mode 100644 index 0000000..d108cde --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/protocol/openid/casOpenIdServiceSuccessView.jsp @@ -0,0 +1 @@ +<%= "openid.mode:id_res\nis_valid:true\n" %> \ No newline at end of file diff --git a/src/main/resources/WEB-INF/view/jsp/protocol/openid/user.jsp b/src/main/resources/WEB-INF/view/jsp/protocol/openid/user.jsp new file mode 100644 index 0000000..05a1dbc --- /dev/null +++ b/src/main/resources/WEB-INF/view/jsp/protocol/openid/user.jsp @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/resources/WEB-INF/web.xml b/src/main/resources/WEB-INF/web.xml new file mode 100644 index 0000000..7cbeb61 --- /dev/null +++ b/src/main/resources/WEB-INF/web.xml @@ -0,0 +1,258 @@ + + + Central Authentication System (CAS) + + + isLog4jAutoInitializationDisabled + true + + + org.apache.logging.log4j.web.Log4jServletContextListener + + + + contextConfigLocation + + /WEB-INF/spring-configuration/*.xml + /WEB-INF/deployerConfigContext.xml + + classpath*:/META-INF/spring/*.xml + + + + + characterEncodingFilter + org.springframework.web.filter.DelegatingFilterProxy + true + + + characterEncodingFilter + /* + + + + CAS Client Info Logging Filter + org.jasig.inspektr.common.web.ClientInfoThreadLocalFilter + true + + + CAS Client Info Logging Filter + /* + + + + requestParameterSecurityFilter + org.springframework.web.filter.DelegatingFilterProxy + true + + + requestParameterSecurityFilter + /* + + + + responseHeadersSecurityFilter + org.springframework.web.filter.DelegatingFilterProxy + true + + + responseHeadersSecurityFilter + /* + + + + + + org.springframework.web.context.ContextLoaderListener + + + + + org.jasig.cas.CasEnvironmentContextListener + + + + + + cas + + org.springframework.web.servlet.DispatcherServlet + + + contextConfigLocation + + /WEB-INF/cas-servlet.xml,classpath*:/META-INF/cas-servlet-*.xml,/WEB-INF/cas-servlet-*.xml + + + publishContext + false + + 1 + true + + + + cas + /login + + + + cas + /logout + + + + cas + /validate + + + + cas + /serviceValidate + + + + cas + /p3/serviceValidate + + + + cas + /proxy + + + + cas + /proxyValidate + + + + cas + /p3/proxyValidate + + + + cas + /CentralAuthenticationService + + + + cas + /status + + + + cas + /statistics + + + + cas + /statistics/ping + + + + cas + /statistics/metrics + + + + cas + /statistics/threads + + + + cas + /statistics/healthcheck + + + + cas + /statistics/ssosessions/* + + + + cas + /statistics/ssosessions + + + + cas + /status/config/* + + + + cas + /status/config + + + + cas + /authorizationFailure.html + + + + cas + /v1/tickets/* + + + cas + /v1/services/* + + + + + 5 + COOKIE + + true + + + + + 401 + /authorizationFailure.html + + + + 403 + /authorizationFailure.html + + + + 404 + / + + + + 500 + /WEB-INF/view/jsp/errors.jsp + + + + 501 + /WEB-INF/view/jsp/errors.jsp + + + + 503 + /WEB-INF/view/jsp/errors.jsp + + + + index.jsp + + diff --git a/src/main/resources/WEB-INF/webflow/login/login-webflow.xml b/src/main/resources/WEB-INF/webflow/login/login-webflow.xml new file mode 100644 index 0000000..e4bd281 --- /dev/null +++ b/src/main/resources/WEB-INF/webflow/login/login-webflow.xml @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/WEB-INF/webflow/logout/logout-webflow.xml b/src/main/resources/WEB-INF/webflow/logout/logout-webflow.xml new file mode 100644 index 0000000..100ccc3 --- /dev/null +++ b/src/main/resources/WEB-INF/webflow/logout/logout-webflow.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/apereo.properties b/src/main/resources/apereo.properties new file mode 100644 index 0000000..6a3e01e --- /dev/null +++ b/src/main/resources/apereo.properties @@ -0,0 +1,2 @@ +standard.custom.css.file=/themes/apereo/css/cas.css +cas.javascript.file=/themes/apereo/js/cas.js diff --git a/src/main/resources/cas-theme-default.properties b/src/main/resources/cas-theme-default.properties new file mode 100644 index 0000000..54d5d9f --- /dev/null +++ b/src/main/resources/cas-theme-default.properties @@ -0,0 +1,2 @@ +standard.custom.css.file=/css/cas.css +cas.javascript.file=/js/cas.js diff --git a/src/main/resources/cas_views.properties b/src/main/resources/cas_views.properties new file mode 100644 index 0000000..224480d --- /dev/null +++ b/src/main/resources/cas_views.properties @@ -0,0 +1,7 @@ +# A placeholder for view definitions that are to be defined +# in the format of: +# viewName.(class)=org.jasig.cas.web.view.ViewClassName +# This file is exclusively reserved for custom views that +# would be put into a CAS overlay by deployers and removes +# the need to have to overlay the entire xml view definition file. + diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000..b51a098 --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties new file mode 100644 index 0000000..018e0a7 --- /dev/null +++ b/src/main/resources/messages.properties @@ -0,0 +1,243 @@ +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 log out 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=Username: +screen.welcome.label.netid.accesskey=u +screen.welcome.label.password=Password: +screen.welcome.label.password.accesskey=p +screen.welcome.label.publicstation=I am at a public workstation. +screen.welcome.label.warn=Warn me before logging me into other sites. +screen.welcome.label.warn.accesskey=w +screen.welcome.button.login=LOGIN +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.aup.button.accept=ACCEPT +screen.aup.button.cancel=CANCEL + +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. + +logo.title=go to Apereo home page +copyright=Copyright © 2005–2015 Apereo, Inc. +screen.capslock.on = CAPSLOCK key is turned on! + +# Remember-Me Authentication +screen.rememberme.checkbox.title=Remember Me + +# Blocked Errors Page +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=Click here to go to the application. + +#Generic Success Screen Messages +screen.success.header=Log In Successful +screen.success.success=You, {0}, have successfully logged into the Central Authentication Service. +screen.success.security=When you are finished, for security reasons, please log out and exit your web browser. + +#Logout Screen Messages +screen.logout.header=Logout successful +screen.logout.success=You have successfully logged out of the Central Authentication Service. +screen.logout.security=For security reasons, exit your web browser. +screen.logout.redirect=The service from which you arrived has supplied a link you may follow by clicking here. + +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. +screen.service.required.message=You attempted authentication without specifying the target application. Please re-examine the request and try again. + +username.required=Username is a required field. +password.required=Password is a required field. + +# Authentication failure messages +authenticationFailure.AccountDisabledException=This account has been disabled. +authenticationFailure.AccountLockedException=This account has been locked. +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.UNKNOWN=Invalid credentials. + +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_TICKET=Ticket ''{0}'' not recognized +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. +UNAUTHORIZED_SERVICE_PROXY=The supplied service ''{0}'' is not authorized to use CAS proxy authentication. + +screen.service.error.header=Application Not Authorized to Use CAS +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. +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. + +# Password policy +password.expiration.warning=Your password expires in {0} day(s). Please change your password now. +password.expiration.loginsRemaining=You have {0} login(s) remaining before you MUST 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 change your password. +screen.mustchangepass.heading=You must change your password. +screen.mustchangepass.message=Please change your password. +screen.badhours.heading=Your account is forbidden to login at this time. +screen.badhours.message=Please try again later. +screen.badworkstation.heading=You cannot login from this workstation. +screen.badworkstation.message=Please contact the system administrator to regain access. + +# OAuth +screen.oauth.confirm.header=Authorization +screen.oauth.confirm.message=Do you want to grant access to your complete profile to "{0}" ? +screen.oauth.confirm.allow=Allow + +# Unavailable +screen.unavailable.heading=CAS is Unavailable +screen.unavailable.message=There was an error trying to complete your request. \ +Please notify your support desk or try again. \ +
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.

If you are having problems logging in using CAS, \ +you will need to contact the IT staff or Help Desk of your organization for assistance. \ +

We wish we could be more directly helpful to you.
+ + + + + +##################################################################### +# SSO Sessions View +##################################################################### +# No sessions found screen +cas.ssosessions.loading=Loading SSO Sessions... +cas.ssosessions.nosessionsfound=No Sessions Found +cas.ssosessions.button.refresh=Refresh + + +# 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.removesingle=Remove + +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. + +cas.sessions.alert.removal.success.multi.partone=Successfully removed +cas.sessions.alert.removal.success.multi.parttwo=sessions. + +cas.sessions.alert.removal.error.multi.partone=Error removing +cas.sessions.alert.removal.error.multi.parttwo=sessions. Please try your request again. + +cas.sessions.alert.removal.success.single.partone=Successfully removed +cas.sessions.alert.removal.success.single.parttwo=session. +cas.sessions.alert.removal.error.single.partone=Error removing +cas.sessions.alert.removal.error.single.parttwo=Please try your request again. + +# Ex of passing attributes +#footer.poweredBy=Powered by Apereo Central Authentication Service {0} +# + +##################################################################### +# Statistics View +##################################################################### +# Ticket Registry Section +cas.statistics.pagetitle=Statistics View +cas.statistics.section.ticket.title=Ticket Registry 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 +cas.statistics.section.serverstatistics.panel.uptime.day=day +cas.statistics.section.serverstatistics.panel.uptime.days=days +cas.statistics.section.serverstatistics.panel.uptime.hour=hour +cas.statistics.section.serverstatistics.panel.uptime.hours=hours +cas.statistics.section.serverstatistics.panel.uptime.minute=minute +cas.statistics.section.serverstatistics.panel.uptime.minutes=minutes +cas.statistics.section.serverstatistics.panel.uptime.second=second +cas.statistics.section.serverstatistics.panel.uptime.seconds=seconds + +## 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 + +## Thread Dump Section +cas.statistics.section.threaddump.title=Thread Dump +cas.statistics.section.threaddump.button=View more +cas.statistics.section.threaddump.modal.title=Thread Dump + +## Metrics Section +cas.statistics.section.metrics.title=Metrics +cas.statistics.section.metrics.button=View Metrics + +## Modal +cas.statistics.modal.close.button=Close + +## +## End Statistics View +##################################################################### + + +##################################################################### +# Configuration View +##################################################################### +# Error loading screen +cas.viewconfig.loading=Loading Configuration... +cas.viewconfig.errormessage=Error reading configuration +cas.viewconfig.button.refresh=Refresh + +# Report View +cas.viewconfig.pagetitle=View Configuration +cas.viewconfig.table.column.key=Key +cas.viewconfig.table.column.value=Value + +## +## End Configuration View +##################################################################### diff --git a/src/main/resources/messages_zh_CN.properties b/src/main/resources/messages_zh_CN.properties new file mode 100644 index 0000000..a387c4c --- /dev/null +++ b/src/main/resources/messages_zh_CN.properties @@ -0,0 +1,108 @@ +#Welcome Screen Messages + +# +# Licensed to Apereo under one or more contributor license +# agreements. See the NOTICE file distributed with this work +# for additional information regarding copyright ownership. +# Apereo licenses this file to you under the Apache License, +# Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a +# copy of the License at the following location: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +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\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 © 2005–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 \u8fd9\u91cc \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\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.logout.redirect=\u60a8\u53ef\u4ee5\u901a\u8fc7\u5982\u4e0bURL\u8bbf\u95ee\u5230\u76ee\u6807\u670d\u52a1\uff1a\u76ee\u6807\u670d\u52a1. + +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\u518d\u6b21\u8ba4\u8bc1\u3002 + +error.invalid.loginticket=\u60a8\u4e0d\u80fd\u591f\u518d\u6b21\u63d0\u4ea4\u5df2\u7ecf\u63d0\u4ea4\u8fc7\u7684\u8868\u5355\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\u4fee\u6539\u4f60\u7684\u5bc6\u7801\u3002 +password.expiration.loginsRemaining=\u5728\u5fc5\u987b\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\u4fee\u6539\u4f60\u7684\u5bc6\u7801\u3002 +screen.mustchangepass.heading=\u4f60\u5fc5\u987b\u4fee\u6539\u4f60\u7684\u5bc6\u7801\u3002 +screen.mustchangepass.message=\u8bf7\u4fee\u6539\u4f60\u7684\u5bc6\u7801\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 diff --git a/src/main/resources/services/Apereo-10000002.json b/src/main/resources/services/Apereo-10000002.json new file mode 100644 index 0000000..04403d3 --- /dev/null +++ b/src/main/resources/services/Apereo-10000002.json @@ -0,0 +1,29 @@ +{ + "@class" : "org.jasig.cas.services.RegexRegisteredService", + "serviceId" : "^https://www.apereo.org", + "name" : "Apereo", + "theme" : "apereo", + "id" : 10000002, + "description" : "Apereo foundation sample service", + "proxyPolicy" : { + "@class" : "org.jasig.cas.services.RefuseRegisteredServiceProxyPolicy" + }, + "evaluationOrder" : 1, + "usernameAttributeProvider" : { + "@class" : "org.jasig.cas.services.DefaultRegisteredServiceUsernameProvider" + }, + "logoutType" : "BACK_CHANNEL", + "attributeReleasePolicy" : { + "@class" : "org.jasig.cas.services.ReturnAllowedAttributeReleasePolicy", + "principalAttributesRepository" : { + "@class" : "org.jasig.cas.authentication.principal.DefaultPrincipalAttributesRepository" + }, + "authorizedToReleaseCredentialPassword" : false, + "authorizedToReleaseProxyGrantingTicket" : false + }, + "accessStrategy" : { + "@class" : "org.jasig.cas.services.DefaultRegisteredServiceAccessStrategy", + "enabled" : true, + "ssoEnabled" : true + } +} \ No newline at end of file diff --git a/src/main/resources/services/HTTPSandIMAPS-10000001.json b/src/main/resources/services/HTTPSandIMAPS-10000001.json new file mode 100644 index 0000000..78aa082 --- /dev/null +++ b/src/main/resources/services/HTTPSandIMAPS-10000001.json @@ -0,0 +1,28 @@ +{ + "@class" : "org.jasig.cas.services.RegexRegisteredService", + "serviceId" : "^(https|imaps)://.*", + "name" : "HTTPS and IMAPS", + "id" : 10000001, + "description" : "This service definition authorized all application urls that support HTTPS and IMAPS protocols.", + "proxyPolicy" : { + "@class" : "org.jasig.cas.services.RefuseRegisteredServiceProxyPolicy" + }, + "evaluationOrder" : 10000, + "usernameAttributeProvider" : { + "@class" : "org.jasig.cas.services.DefaultRegisteredServiceUsernameProvider" + }, + "logoutType" : "BACK_CHANNEL", + "attributeReleasePolicy" : { + "@class" : "org.jasig.cas.services.ReturnAllowedAttributeReleasePolicy", + "principalAttributesRepository" : { + "@class" : "org.jasig.cas.authentication.principal.DefaultPrincipalAttributesRepository" + }, + "authorizedToReleaseCredentialPassword" : false, + "authorizedToReleaseProxyGrantingTicket" : false + }, + "accessStrategy" : { + "@class" : "org.jasig.cas.services.DefaultRegisteredServiceAccessStrategy", + "enabled" : true, + "ssoEnabled" : true + } +} diff --git a/src/main/resources/truststore.jks b/src/main/resources/truststore.jks new file mode 100644 index 0000000..c408465 Binary files /dev/null and b/src/main/resources/truststore.jks differ diff --git a/src/test/java/org/jasig/cas/WiringTests.java b/src/test/java/org/jasig/cas/WiringTests.java new file mode 100644 index 0000000..3461c70 --- /dev/null +++ b/src/test/java/org/jasig/cas/WiringTests.java @@ -0,0 +1,58 @@ +package org.jasig.cas; + +import org.jasig.cas.authentication.principal.PrincipalFactory; +import org.junit.Before; +import org.junit.Test; +import org.springframework.core.io.FileSystemResource; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; +import org.springframework.mock.web.MockServletContext; +import org.springframework.web.context.support.XmlWebApplicationContext; + +import static org.junit.Assert.*; + +/** + * Unit test to verify Spring context wiring. + * + * @author Middleware Services + * @since 3.0.0 + */ +public class WiringTests { + private XmlWebApplicationContext applicationContext; + + @Before + public void setUp() { + applicationContext = new XmlWebApplicationContext(); + applicationContext.setConfigLocations( + "classpath:/webappContext.xml", + "file:src/main/webapp/WEB-INF/cas-servlet.xml", + "file:src/main/webapp/WEB-INF/deployerConfigContext.xml", + "file:src/main/webapp/WEB-INF/spring-configuration/*.xml"); + applicationContext.setServletContext(new MockServletContext(new ResourceLoader() { + @Override + public Resource getResource(final String location) { + return new FileSystemResource("src/main/webapp" + location); + } + + @Override + public ClassLoader getClassLoader() { + return getClassLoader(); + } + })); + applicationContext.refresh(); + } + + @Test + public void verifyWiring() throws Exception { + assertTrue(applicationContext.getBeanDefinitionCount() > 0); + } + + @Test + public void checkPrincipalFactory() throws Exception { + final PrincipalFactory factory1 = + applicationContext.getBean("principalFactory", PrincipalFactory.class); + final PrincipalFactory factory2 = + applicationContext.getBean("principalFactory", PrincipalFactory.class); + assertEquals("principal factories should be equal instances", factory1, factory2); + } +} diff --git a/src/test/resources/log4j2.xml b/src/test/resources/log4j2.xml new file mode 100644 index 0000000..5465b2a --- /dev/null +++ b/src/test/resources/log4j2.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/webappContext.xml b/src/test/resources/webappContext.xml new file mode 100644 index 0000000..c67e820 --- /dev/null +++ b/src/test/resources/webappContext.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + diff --git a/start.sh b/start.sh new file mode 100755 index 0000000..2cb69f0 --- /dev/null +++ b/start.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +#!/bin/bash + +# get real path of softlink +get_real_path() { + local f="$1" + while [ -h "$f" ]; do + ls=`ls -ld "$f"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + f="$link" + else + f=`dirname "$f"`/"$link" + fi + done + echo "$f" +} + +prg_path=$(get_real_path "$0") +echo "Script path [$prg_path]" + +# Service Home +pushd $(dirname "$prg_path") > /dev/null +WORK_DIR=$(pwd) +echo "Work dir [$WORK_DIR]" + +mvn -T 4C -DskipTests clean \ + spring-boot:run \ + -Dspring-boot.run.jvmArguments='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000' \ + -Dspring-boot.run.fork=false + +popd > /dev/null +