ci
build-push / build-push (push) Failing after 24s

This commit is contained in:
chenxing
2026-08-31 18:26:28 +08:00
parent 6daf5db8c1
commit 60da1f6edf
883 changed files with 49953 additions and 0 deletions
@@ -0,0 +1,53 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.acceptableusagepolicyview.pagetitle}"></title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body id="cas">
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="login" class="card">
<form method="post" id="fm1">
<div class="card-header text-center">
<h3 th:text="#{screen.aup.heading}">Acceptable Usage Policy</h3>
</div>
<div class="card-body">
<div>
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.
<div>
<p/>
<p>By using these resources, you agree to abide by the Acceptable Usage Policy.</p>
</div>
</div>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="_eventId" value="submit"/>
<input class="btn btn-success"
name="submit"
accesskey="s"
th:value="#{screen.aup.button.accept}"
value="ACCEPT"
type="submit"/>
<span style="width: 3px"></span>
<input
class="btn btn-warning"
name="cancel"
accesskey="c"
th:value="#{screen.aup.button.cancel}"
value="CANCEL"
type="button"
onclick="location.href = location.href;"/>
</div>
</form>
</div>
</main>
</body>
</html>
@@ -0,0 +1,23 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.accountdisabled.heading}">CAS Account Disabled View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
<h2 th:utext="#{screen.accountdisabled.heading}">This account has been disabled.</h2>
<p th:utext="#{screen.accountdisabled.message}">Please contact the system administrator to regain
access.</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.accountlocked.heading}">Account Locked View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
<h2 th:utext="#{screen.accountlocked.heading}">This account has been locked.</h2>
<p th:utext="#{screen.accountlocked.message}">Please contact the system administrator to regain access.</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,23 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.authnblocked.heading}">Authentication Blocked View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
<h2 th:utext="#{screen.authnblocked.heading}">Authentication attempt is blocked.</h2>
<p th:utext="#{screen.authnblocked.message}">Your authentication attempt is untrusted and unauthorized from
your current workstation.</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,41 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.mfa.authy.pagetitle}">Authy Login View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="box fl-panel" id="login">
<form method="post" id="fm1" class="fm-v clearfix" th:object="${credential}" th:action="@{/login}">
<div id="msg" class="alert alert-danger" role="alert" th:if="${#fields.hasErrors('*')}">
<span th:each="err : ${#fields.errors('*')}" th:utext="${err}">this error block and text is only shown if there are errors</span>
</div>
<div class="form-group">
<label for="token" th:utext="#{screen.welcome.label.password}"><span
class="accesskey">P</span>assword:</label>
<input type="password" class="form-control required" id="token" size="25" tabindex="1"
th:field="*{token}"
th:accesskey="#{screen.welcome.label.password.accesskey}" autocomplete="off"/>
</div>
<input class="btn btn-submit" name="_eventId_submit" accesskey="l"
th:value="#{screen.welcome.button.login}" tabindex="4" type="submit" value="LOGIN"/>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="geolocation"/>
</form>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,53 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.mfa.azure.pagetitle}">Microsoft Authenticator View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
<style>
textarea {
border: 2pt;
font-family: "Courier New";
font-weight: bold;
font-size: 45px;
display: block;
margin-left: auto;
margin-right: auto;
}
</style>
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="login" class="box">
<form method="post" id="fm1" class="fm-v clearfix" th:object="${credential}" th:action="@{/login}">
<div id="msg" class="alert alert-danger" role="alert" th:if="${#fields.hasErrors('*')}">
<span th:each="err : ${#fields.errors('*')}" th:utext="${err}">this error block and text is only shown if there are errors</span>
</div>
<div class="form-group">
<label for="token">Press 'LOGIN' below and provide the displayed code via your mobile device.</label>
<textarea readonly class="form-control" id="token" size="25" rows="1" cols="8"
th:field="*{token}"></textarea>
</div>
<input class="btn btn-submit"
name="_eventId_submit"
accesskey="l"
tabindex="1"
th:value="#{screen.welcome.button.login}"
id="submitBtn"
type="submit"
value="LOGIN"/>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="geolocation"/>
</form>
</div>
</main>
</body>
</html>
@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.badhours.heading}">Bad Hours View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
<h2 th:utext="#{screen.badhours.heading}">Your account is forbidden to login at this time.</h2>
<p th:utext="#{screen.badhours.message}">Please try again later.</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.badworkstation.heading}">Bad Workstation View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body id="cas">
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
<h2 th:utext="#{screen.badworkstation.heading}">You cannot login from this workstation.</h2>
<p th:utext="#{screen.badworkstation.message}">Please contact the system administrator to regain access.</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,42 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.logout.confirm.header}">Confirm Logout View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-info">
<h2 th:utext="#{screen.logout.confirm.header}">Do you want to log out completely?</h2>
<p th:utext="#{screen.logout.confirm.text}">An application may have redirected you to the Central
Authentication Service \
to completely log you out and destroy your single sign-on session. If you choose to log out, you will be
asked again \
to provide your credentials and re-autheticate once you attempt to access an application.
<p>
<p><br>Do you want to proceed?</p>
<div align="center">
<form method="post" id="fm1">
<input type="hidden" name="LogoutRequestConfirmed" value="true"/>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="_eventId" value="success"/>
<input class="btn btn-primary"
name="success"
accesskey="l"
th:value="#{screen.welcome.button.logout}"
value="Logout"
type="submit"/>
</form>
</div>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,43 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.confirmation.message}">Confirm View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" class="confirmView">
<div class="alert alert-info">
<h4 th:text="#{screen.confirmation.message}">You asked to be warned before logging into applications. Please
proceed.</h4>
<form method="post" id="form" class="fm-v clearfix">
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<div class="form-group">
<div class="form-check">
<input id="ignorewarn"
class="form-check-input"
name="ignorewarn"
value="true"
tabindex="1"
type="checkbox"/>
<label for="ignorewarn" class="form-check-label" th:utext="#{screen.welcome.label.warnremove}">Do
not warn me again</label>
</div>
</div>
<input class="btn btn-submit" name="_eventId_success" accesskey="l"
th:value="#{screen.button.continue}" tabindex="4" type="submit" value="Continue"/>
</form>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,25 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.logout.header}">Consent Logout View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body id="cas">
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-success">
<h2 th:utext="#{screen.logout.header}">Logout successful</h2>
<p th:utext="#{screen.consent.review.logout.success}">You have successfully logged out of the Consent Review
page. You may completely <a href="../logout">log out</a> of the Central Authentication Service and end
your single sign-on session.</p>
<p th:utext="#{screen.logout.security}">For security reasons, exit your web browser.</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,161 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.consent.review.header}">Consent Review View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
<script th:src="@{#{webjars.datatables.jquery.datatablesmin.js}}"></script>
<script th:src="@{#{webjars.datatables.datatables.bootstrapmin.js}}"></script>
<script type="text/javascript" th:inline="javascript">
var urls = {
delete: /*[[@{/consentReview/deleteConsentDecision}]]*/,
getConsentDecisions: /*[[@{/consentReview/getConsentDecisions}]]*/
};
var strings = {
error: /*[[#{screen.consent.review.error}]]*/,
success: /*[[#{screen.consent.review.success}]]*/,
confirm: /*[[#{screen.consent.review.confirm}]]*/,
yes: /*[[#{screen.consent.review.yes}]]*/,
no: /*[[#{screen.consent.review.no}]]*/,
data: {
search: /*[[#{screen.consent.review.data.search}]]*/,
zeroRecords: /*[[#{screen.consent.review.data.zerorecords}]]*/,
info: /*[[#{screen.consent.review.data.info}]]*/,
infoFiltered: /*[[#{screen.consent.review.data.infofiltered}]]*/,
infoEmpty: /*[[#{screen.consent.review.data.infoempty}]]*/
}
};
function jqueryReady() {
head.load(
/*[[@{/js/consentReview.js}]]*/
);
};
</script>
<link rel="stylesheet" th:href="@{/css/consentReview.css}"/>
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div id="content">
<div class="card consentOverview">
<div class="card-header">
<h3 th:utext="#{screen.consent.review.header}">Review Attribute Consent</h3>
</div>
<div class="card-body">
<div id="loadingMessage">
<h4 th:text="#{screen.consent.review.loading}">Loading consent decisions...</h4>
</div>
<div id="no-consent-decisions">
<p th:text="#{screen.consent.review.noconsentdecisions}">There are no consent decisions
registered for you.</p>
</div>
<div id="consent-decisons">
<div id="alertWrapper"></div>
<table id="consentDecisions" class="table table-striped table-hover">
<thead>
<th th:text="#{screen.consent.review.date}">Date</th>
<th th:texT="#{screen.consent.review.service}">Service</th>
</thead>
<tbody>
<tr class="info hidden">
<td class="info" colspan="3">
<div>
<table class="table table-bordered row-detail">
<tbody>
<tr>
<td class="field-label active consent-created-date-label col-3"
th:utext="#{screen.consent.review.createddate}">Created Date:
</td>
<td class="created-date"></td>
</tr>
<tr>
<td class="field-label active consent-reminder-label col-3"
th:utext="#{screen.consent.review.reminder}">Reminder:
</td>
<td class="consent-reminder">
<span class="seconds"
th:utext="#{screen.consent.options.timeunit.seconds}">Seconds</span>
<span class="minutes"
th:utext="#{screen.consent.options.timeunit.minutes}">Minutes</span>
<span class="hours"
th:utext="#{screen.consent.options.timeunit.hours}">Hours
<span class="days"
th:utext="#{screen.consent.options.timeunit.days}">Days</span>
<span class="weeks"
th:utext="#{screen.consent.options.timeunit.weeks}">Weeks</span>
<span class="months"
th:utext="#{screen.consent.options.timeunit.months}">Months</span>
<span class="years"
th:utext="#{screen.consent.options.timeunit.years}">Years</span>
</td>
</tr>
<tr>
<td class="field-label active consent-option-label col-3"
th:utext="#{screen.consent.review.option}">Option:
</td>
<td class="consent-options">
<span class="attribute-name label label-default"
th:utext="#{screen.consent.options.attributename}"
th:title="#{screen.consent.review.options.desc.attributename}"
data-toggle="tooltip"
data-placement="bottom">Attribute Name</span>
<span class="attribute-value label label-default"
th:utext="#{screen.consent.options.attributevalue}"
th:title="#{screen.consent.review.options.desc.attributevalue}"
data-toggle="tooltip"
data-placement="bottom">Attribute Value</span>
<span class="always label label-default"
th:utext="#{screen.consent.options.always}"
th:title="#{screen.consent.review.options.desc.always}"
data-toggle="tooltip" data-placement="bottom">Show the consent screen every time I attempt to log in.</span>
</td>
</tr>
<tr>
<td class="field-label active consent-attributes-label col-3"
th:utext="#{screen.consent.review.attributes}">Attributes:
</td>
<td>
<table class="table table-striped table-bordered consent-attributes">
<thead>
<tr>
<th th:text="#{screen.consent.attributes.attribute}">
Attribute
</th>
<th th:text="#{screen.consent.attributes.values}">Value(s)
</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<button type="button" class="btn btn-danger"
th:utext="#{screen.consent.review.delete}">DELETE
</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<button type="button" name="logout" id="logout" class="btn btn-primary"
th:utext="#{screen.welcome.button.logout}">Logout
</button>
</div>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,198 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.consent.title}">Consent View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
<link rel="stylesheet" th:href="@{#{webjars.bootstrap-selectmin.css}}">
<script th:src="@{#{webjars.bootstrap-selectmin.js}}"></script>
<script th:src="@{#{webjars.bootstrapmin.js}}"></script>
<link rel="stylesheet" th:href="@{#{webjars.datatables.bootstrapmin.css}}"/>
<script th:src="@{#{webjars.datatables.jquery.datatablesmin.js}}"></script>
<script th:src="@{#{webjars.datatables.datatables.bootstrapmin.js}}"></script>
<script th:inline="javascript">
/*<![CDATA[*/
var data = {
attributes: /*[[${attributes}]]*/
};
var strings = {
info: /*[[#{screen.consent.attributes.data.info}]]*/
};
/*]]>*/
</script>
<script type="text/javascript" th:inline="javascript">
function jqueryReady() {
head.load(
/*[[@{/js/consent.js}]]*/
);
}
</script>
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<form method="post" id="fm1">
<div class="alert alert-info">
<h2 th:text="#{screen.consent.title}">Attribute Consent</h2>
<ul class="nav nav-tabs" id="consentTabs" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="attributes-tab" data-toggle="tab" href="#attributesPanel"
role="tab" aria-controls="attributes" aria-selected="true"
th:text="#{screen.consent.attributes}">Attributes</a>
</li>
<li class="nav-item">
<a class="nav-link" id="options-tab" data-toggle="tab" href="#optionsPanel" role="tab"
aria-controls="options" aria-selected="false" th:text="#{screen.consent.options}">Options</a>
</li>
</ul>
<div class="mb-4 tab-content" id="consentTabsContent">
<div class="tab-pane fade show active bg-white p-4" id="attributesPanel" role="tabpanel"
aria-labelledby="attributes-tab">
<p th:utext="#{screen.consent.attributes.header(${service.id})}">The following attributes will
be released to</p>
<table id="attributesTable" class="display table table-striped table-bordered">
<thead>
<tr>
<th th:text="#{screen.consent.attributes.attribute}">Attribute</th>
<th th:text="#{screen.consent.attributes.values}">Value(s)</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
<div class="tab-pane fade bg-white p-4" id="optionsPanel" role="tabpanel"
aria-labelledby="options-tab">
<div class="card mb-4">
<div class="card-header bg-info text-white" th:text="#{screen.consent.options.header}">How
should I be prompted
for consent again?
</div>
<div class="card-body">
<div class="form-check">
<input class="form-check-input" type="radio" name="option" id="optionAlways"
value="0"
th:checked="${option == 0}"
onclick="optionSelected()"/>
<label class="form-check-label" for="optionAlways"
th:utext="#{screen.consent.options.always}">Always</label>
<span class="help-block"
th:text="#{screen.consent.options.desc.always(${service.id})}">help block</span>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="option" id="optionAttributeName"
value="1"
th:checked="${option == 1}"
onclick="optionSelected()"/>
<label class="form-check-label" for="optionAttributeName"
th:utext="#{screen.consent.options.attributename}">Attribute Name</label>
<span class="help-block"
th:text="#{screen.consent.options.desc.attributename(${service.id})}">help block</span>
</span>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="option" value="2"
th:checked="${option == 2}"
onclick="optionSelected()" />
<label class="form-check-label" th:utext="#{screen.consent.options.attributevalue}">Attribute
Value</label>
<span class="help-block" th:utext="#{screen.consent.options.desc.attributevalue.intro} +
'<ul><li>' +
#{screen.consent.options.desc.attributevalue.first(${service.id})} +
'</li><li>' +
#{screen.consent.options.desc.attributevalue.second(${service.id})} +
'</li><li>' +
#{screen.consent.options.desc.attributevalue.third(${service.id})} +
'</li><ul>'"/>
</div>
</div>
</div>
<div id="reminderPanel" class="card">
<div class="card-header bg-info text-white"
th:text="#{screen.consent.options.reminder.header}">How often should I be reminded to
consent again?
</div>
<div class="card-body">
<p th:text="#{screen.consent.options.reminder.expl(${service.id})}">Show the consent
screen, as a
reminder, in the event that there is no change to the collection of attributes
released to
{0}.</p>
<table>
<tr>
<td>
<input name="reminder" id="reminder" class="form-control" type="number"
th:value="${reminder}">
</td>
<td>
<select name="reminderTimeUnit" id="reminderTimeUnit" class="form-control">
<option value="seconds"
th:selected="${#strings.toLowerCase(reminderTimeUnit) == 'seconds'}"
th:text="#{screen.consent.options.timeunit.seconds}">Seconds
</option>
<option value="minutes"
th:selected="${#strings.toLowerCase(reminderTimeUnit) == 'minutes'}"
th:text="#{screen.consent.options.timeunit.minutes}">Minutes
</option>
<option value="hours"
th:selected="${#strings.toLowerCase(reminderTimeUnit) == 'hours'}"
th:text="#{screen.consent.options.timeunit.hours}">Hours
</option>
<option value="days"
th:selected="${#strings.toLowerCase(reminderTimeUnit) == 'days'}"
th:text="#{screen.consent.options.timeunit.days}">Days
</option>
<option value="weeks"
th:selected="${#strings.toLowerCase(reminderTimeUnit) == 'weeks'}"
th:text="#{screen.consent.options.timeunit.weeks}">Weeks
</option>
<option value="months"
th:selected="${#strings.toLowerCase(reminderTimeUnit) == 'months'}"
th:text="#{screen.consent.options.timeunit.months}">Months
</option>
<option value="years"
th:selected="${#strings.toLowerCase(reminderTimeUnit) == 'years'}"
th:text="#{screen.consent.options.timeunit.years}">Years
</option>
</select>
</td>
</tr>
</table>
</div>
</div>
</div> <!-- end Options Panel -->
</div>
</div>
<div class="text-center form-group">
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="_eventId" value="confirm"/>
<input class="btn btn-submit"
name="confirm"
accesskey="l"
th:value="#{screen.consent.confirm}"
value="Confirm"
type="submit"/>
<a class="btn btn-default" id="cancel" name="cancel"
th:href="@{/login}" th:text="#{screen.consent.cancel}">Cancel</a>
</div>
</form>
</div>
</main>
</body>
</html>
@@ -0,0 +1,44 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.mfa.duologin.pagetitle}">Duo Login View</title>
<script th:src="@{/js/duo/Duo-Web-v2.min.js}"></script>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<form method="post" id="duo_form" class="fm-v clearfix" th:object="${credential}" th:action="@{/login}">
<div id="msg" class="alert alert-danger" role="alert" th:if="${#fields.hasErrors('*')}">
<span th:each="err : ${#fields.errors('*')}" th:utext="${err}">this error block and text is only shown if there are errors</span>
</div>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="_eventId" value="submit"/>
<input type="hidden" name="geolocation"/>
<div id="login">
<iframe id="duo_iframe"
frameborder="0"
th:attr="data-host=${apiHost},data-sig-request=${sigRequest}"
data-post-argument="signedDuoResponse">
</iframe>
<style>
#duo_iframe {
width: 100%;
min-width: 304px;
max-width: 620px;
height: 330px;
border: none;
}
</style>
</div>
</form>
</div>
</main>
</body>
</html>
@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.expiredpass.heading}">CAS Expired Password View</title>
<script type="text/javascript" th:src="@{/js/passwordMeter.js}"></script>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div th:replace="fragments/pwdupdateform(expiredPass='true')">
<a href="fragments/pwdupdateform.html">pwdupdateform</a>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,59 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.success.header}">Generic Success View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" class="row">
<div class="alert alert-success">
<h2 th:utext="#{screen.success.header}">Log In Successful</h2>
<p th:utext="#{screen.success.success(${principal.id})}">You, <strong>username</strong>, have successfully
logged into the Central Authentication Service. However, you are seeing this page because CAS does not
know about your target destination and how to get you there. Examine the authentication request again
and make sure a target service/application that is authorized and registered with CAS is specified.</p>
<p th:unless="${#maps.isEmpty(principal.attributes)}"><a data-toggle="collapse" href="#divAttributes" aria-expanded="false" aria-controls="divAttributes">Click here</a>
to view attributes resolved and retrieved for <strong><span th:utext="${principal.id}"/></strong>.</p>
<p th:utext="#{screen.success.security}">When you are finished, for security reasons, please <a
href="logout">log out</a> and exit your web browser.</p>
<div class="collapse" id="divAttributes">
<table id="attributesTable" class="table table-striped table-bordered mt-3">
<thead>
<tr>
<th>Attribute</th>
<th>Value(s)</th>
</tr>
</thead>
<tbody>
<tr th:each="attribute : ${principal.attributes}">
<td><kbd><span th:utext="${attribute.key}"/></kbd></td>
<td><code><span th:utext="${attribute.value}"/></code></td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="notices" class="col-md mt-3 mt-md-0">
<div th:replace="fragments/cas-resources-list :: cas-resource-list">
<a href="fragments/cas-resources-list.html">cas-resource</a> list fragment
</div>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,38 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.mfa.googleauth.pagetitle}">Google Authentication View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="login">
<form method="post" id="fm1" class="fm-v clearfix" th:object="${credential}" th:action="@{/login}">
<div id="msg" class="errors" th:if="${#fields.hasErrors('*')}">
<span th:each="err : ${#fields.errors('*')}" th:utext="${err}"/>
</div>
<div class="form-group">
<label for="token" class="fl-label" th:utext="#{cas.mfa.googleauth.label.token}">Token:</label>
<input type="password" class="form-control required" id="token" size="25" tabindex="1"
th:field="*{token}"
th:accesskey="#{screen.welcome.label.password.accesskey}" autocomplete="off"/>
<div>
<p/>
</div>
</div>
<input class="btn btn-submit" name="_eventId_submit" accesskey="l"
th:value="#{screen.welcome.button.login}" tabindex="4" type="submit" value="Login"/>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="geolocation"/>
</form>
</div>
</main>
</body>
</html>
@@ -0,0 +1,45 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.mfa.googleauth.pagetitle}">Google Authentication Registration Review View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body id="cas">
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="login">
<h3 th:text="#{screen.authentication.gauth.register}">Your account is not registered. Use the below settings to
register your device with CAS.</h3>
<form method="post" id="fm1" class="fm-v clearfix" th:action="@{/login}">
<div class="form-group">
<img th:src="@{'data:image/jpeg;base64,' + ${QRcode}}"/>
<br/>
<div>
<p th:utext="#{screen.authentication.gauth.key(${key.getSecretKey()})}">Secret key to register is
...</p>
</div>
<p>Scratch Codes:</p>
<ul>
<li th:each="code : ${key.getScratchCodes()}" th:text="${code}">code</li>
</ul>
<input type="hidden" name="_eventId" value="submit"/>
<input class="btn btn-submit" name="submit" accesskey="l"
th:value="#{screen.welcome.button.register}" tabindex="4" type="submit" value="Register"/>
<input class="btn btn-info" name="print" accesskey="p"
th:value="#{screen.welcome.button.print}"
tabindex="5" type="button"
value="Print"
onclick="window.print();"/>
</div>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
</form>
</div>
</main>
</body>
</html>
@@ -0,0 +1,45 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.login.pagetitle}">Gua Display User Graphics View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="login">
<div class="alert alert-warning" role="alert">
<h4 th:text="${guaUsername}">guaUsername</h4>
<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
<strong th:utext="#{screen.gua.confirm.message}">If you do not recognize this image as yours, do NOT
continue.</strong>
</div>
<div align="middle">
<img style="width:130px;height:130px;border-radius:20%;
box-shadow: 0 0 2px 1px rgba(0, 140, 186, 0.5);
border: 1px solid #ddd;border-radius: 4px;"
th:src="@{'data:image/jpeg;base64,' + ${guaUserImage}}"/>
<div>
<p/>
</div>
<form method="post" id="fm1" class="fm-v clearfix" th:action="@{/login}">
<input class="btn btn-submit" name="_eventId_submit" accesskey="l"
th:value="#{screen.button.continue}" tabindex="4" type="submit" value="Continue"/>
<div class="row btn-row">
<input type="hidden" name="username" th:value="${guaUsername}"/>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
</div>
</form>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,38 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.login.pagetitle}">Gua Get User Id View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="login">
<form method="post" id="fm1" class="fm-v clearfix" th:action="@{/login}">
<div class="form-group">
<label for="username" th:utext="#{screen.welcome.label.netid}"><span class="accesskey">U</span>sername:</label>
<input class="form-control"
type="password"
id="username"
name="username"
size="25"
tabindex="2"
th:accesskey="#{screen.welcome.label.netid.accesskey}"
autocomplete="off"
required/>
<div>
<p/>
</div>
<input class="btn btn-submit" name="_eventId_submit" accesskey="l"
th:value="#{screen.welcome.button.login}" tabindex="4" type="submit" value="LOGIN"/>
</div>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
</form>
</div>
</main>
</body>
</html>
@@ -0,0 +1,76 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.login.pagetitle}">CAS Interrupt View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
<script th:inline="javascript" th:if="${interrupt.autoRedirect}">
/*<![CDATA[*/
var autoRedirect = /*[[${interrupt.autoRedirect}]]*/;
var emptyLinks = /*[[${#maps.isEmpty(interrupt.links)}]]*/;
if (autoRedirect && !emptyLinks) {
var link = /*[[${interrupt.links.values().iterator().next()}]]*/;
var redirectTimeout = /*[[${interrupt.autoRedirectAfterSeconds}]]*/;
setTimeout(function () {
window.location = link;
}, redirectTimeout <= 0 ? 0 : redirectTimeout * 1000);
}
/*]]>*/
</script>
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<h1 th:text="#{screen.interrupt.title}">Authentication Interrupt</h1>
<p th:utext="#{screen.interrupt.message(${principal.id})}">The authentication flow has been interrupted. CAS has
not yet established a single sign-on session for <strong>{0}</strong>.</p>
<div th:if="${interrupt.message}" class="alert alert-info">
<p th:utext="${interrupt.message}">interrupt.message</p>
<br/>
<div th:if="${interrupt.links}">
<a class="btn btn-success"
th:each="link : ${interrupt.links}"
th:text="${link.key}"
th:href="${link.value}">link.key</a>
</div>
</div>
<form method="post" id="fm1" th:if="${not interrupt.block}">
<div class="form-group text-center">
<div class="col-12">
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="_eventId" value="proceed"/>
<input class="btn btn-primary"
name="proceed"
accesskey="l"
th:value="#{screen.interrupt.btn.proceed}"
value="Proceed"
type="submit"/>
&nbsp;<a class="btn btn-primary" id="login" name="login"
th:href="${service?.id} ?: @{/login}" th:text="#{screen.error.page.loginagain}">Login Again</a>
</div>
</div>
</form>
<div th:if="${interrupt.block}" class="text-center">
<a class="btn btn-warning" id="cancel" name="cancel" th:href="@{/login}"
th:text="#{screen.interrupt.btn.cancel}">Cancel</a>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,43 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.authentication.warning}">CAS Login Message View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" class="loginMessageView">
<div class="alert alert-warning">
<h2 th:text="#{screen.authentication.warning}">Authentication Succeeded with Warnings</h2>
<div th:each="message : ${messages}">
<p class="message" th:utext="${message.text}">Message Text</p>
</div>
<section class="row">
<div class="col-sm-3">
<form method="post" id="form" class="fm-v clearfix" th:action="@{/login}">
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="_eventId" value="proceed"/>
<input class="btn btn-submit" name="continue" accesskey="l"
th:value="#{screen.button.continue}" tabindex="4" type="submit" value="Continue"/>
</form>
</div>
<div class="col-sm-3" th:if="${passwordManagementEnabled}">
<form th:if="${passwordExpirationWarningFound}" method="post" id="changePasswordForm" class="fm-v clearfix" th:action="@{/login}">
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="_eventId" value="changePassword"/>
<input class="btn btn-info" name="changePassword" accesskey="l"
th:value="#{screen.button.changePassword}" tabindex="5" type="submit"
value="Change Password"/>
</form>
</div>
</section>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,40 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.login.pagetitle}">CAS Acceptable Use Policy View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body class="login">
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" class="row">
<div class="col-md">
<div th:replace="fragments/loginform :: loginform"><a href="fragments/loginform.html">Login Form goes
here</a></div>
</div>
<div id="notices" class="col-md mt-3 mt-md-0">
<div th:replace="fragments/insecure :: insecure"><a href="fragments/insecure.html">insecure alert goes
here</a></div>
<div th:replace="fragments/defaultauthn :: staticAuthentication">
<a href="fragments/defaultauthn.html">defaultAuthn</a>
fragment
</div>
<div th:replace="fragments/cookies :: cookiesDisabled"><a href="fragments/cookies.html">cookies</a> fragment
</div>
<div th:replace="fragments/serviceui :: serviceUI"><a href="fragments/serviceui.html">service ui</a> fragment</div>
<div th:replace="fragments/loginProviders :: loginProviders"><a href="fragments/loginProviders.html">loginProviders</a>
fragment
</div>
<div th:replace="fragments/cas-resources-list :: cas-resource-list">
<a href="fragments/cas-resources-list.html">cas-resource</a> list fragment
</div>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.logout.header}">CAS Logout</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-success">
<h2 th:utext="#{screen.logout.header}">Logout successful</h2>
<p th:utext="#{screen.logout.success}">You have successfully logged out of the Central Authentication
Service. You may <a href="login">log in</a> again.</p>
<p th:utext="#{screen.logout.security}">For security reasons, exit your web browser.</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,38 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.mfa.registerdevice.pagetitle}">CAS MFA Register Device View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="login">
<h2 th:text="#{cas.mfa.registerdevice.label.title}">Register Device</h2>
<div th:text="#{cas.mfa.registerdevice.label.intro}">Please name the current device.</div>
<form method="post" id="registerform" class="fm-v clearfix">
<div class="form-group">
<label for="deviceName" class="fl-label" th:utext="#{cas.mfa.registerdevice.label.name}">Name</label>
<input type="text" class="form-control" name="deviceName" id="deviceName" size="25"
tabindex="1"
autocomplete="off"
required/>
<div>
<br/>
<input class="btn btn-submit" name="_eventId_submit" accesskey="l"
th:value="#{cas.mfa.registerdevice.button.register}" tabindex="4" type="submit"
value="Register"/>
</div>
</div>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
</form>
</div>
</main>
</body>
</html>
@@ -0,0 +1,20 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.mustchangepass.heading}">You must change your password View</title>
<script type="text/javascript" th:src="@{/js/passwordMeter.js}"></script>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div th:replace="fragments/pwdupdateform"><a href="fragments/pwdupdateform.html">pwdupdateform</a></div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,59 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.pac4j.unauthz.pagetitle}">Pac4j Stop Webflow View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
<h2 th:utext="#{screen.pac4j.unauthz.heading}">Unauthorized Access</h2>
<p th:utext="#{screen.pac4j.unauthz.message}">Either the authentication request was rejected/cancelled, or
the authentication provider denied access due to permissions, etc. Review logs to find the root cause of
the issue.</p>
<div>
<p/>
<table th:if="${error != null or reason != null or code != null or description != null}"
class="table table-bordered table-hover table-responsive">
<thead>
<tr>
<th>Error</th>
<th>Reason</th>
<th>Code</th>
<th>Description</th>
<th>Provider</th>
<th>Destination</th>
</tr>
</thead>
<tbody>
<tr class="active">
<td th:text="${error}">Error</td>
<td th:text="${reason}">reason</td>
<td th:text="${code}">code</td>
<td th:text="${description}">description</td>
<td th:text="${client}">client</td>
<td>
<a th:href="${service}" th:text="#{screen.pac4j.unauthz.gotoapp}">Goto Application</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>
<a class="btn btn-submit" th:href="@{/login}" th:text="#{screen.pac4j.unauthz.login}">Back to CAS</a>
<a class="btn btn-submit" th:href="${service}" th:text="#{screen.pac4j.unauthz.gotoapp}">Goto
Application</a>
</p>
</div>
</main>
</body>
</html>
@@ -0,0 +1,29 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.success.header}">Password Update Success View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-success">
<h2 th:utext="#{screen.pm.success.header}">Password Change Successful</h2>
<p th:utext="#{screen.pm.success.message}">Your account password is successfully updated.</p>
<form method="post" id="form" class="fm-v clearfix" th:action="@{/login}">
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="_eventId" value="proceed"/>
<input class="btn btn-submit" name="continue" accesskey="l"
th:value="#{screen.welcome.button.login}" tabindex="4" type="submit" value="Login"/>
</form>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,48 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.login.pagetitle}">Passwordless Display View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="login">
<div class="alert alert-info">
<strong>Provide Token</strong><p>
Please provide the security token sent to you via email, phone, etc. Note that the token is valid for only a brief window and
upon submission, all other tokens will be invalidated and removed.</p>
</div>
<div class="alert alert-danger alert-dismissible" th:if="${error}">
<a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>
<strong>Authentication Failure</strong><p>The provided token could not be verified. It may have been invalidated, removed or expired.</p>
</div>
<form method="post" id="fm1" class="fm-v clearfix" th:action="@{/login}">
<div class="form-group">
<label for="password">Token:</label>
<input class="form-control"
type="password"
id="password"
name="password"
size="25"
tabindex="2"
autocomplete="off"
required/>
<div>
<p/>
</div>
<input type="hidden" name="username" th:if="${passwordlessAccount}" th:value="${passwordlessAccount.username}"/>
<input class="btn btn-submit" name="_eventId_submit" accesskey="l"
th:value="#{screen.welcome.button.login}" tabindex="4" type="submit" value="LOGIN"/>
</div>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
</form>
</div>
</main>
</body>
</html>
@@ -0,0 +1,40 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.login.pagetitle}">Passwordless Get User Id View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="login">
<form method="post" id="fm1" class="fm-v clearfix" th:action="@{/login}">
<div class="form-group">
<label for="username" th:utext="#{screen.welcome.label.netid}"><span class="accesskey">U</span>sername:</label>
<input class="form-control"
type="password"
id="username"
name="username"
size="25"
tabindex="2"
th:accesskey="#{screen.welcome.label.netid.accesskey}"
autocomplete="off"
required/>
<div>
<p/>
</div>
<input class="btn btn-submit" accesskey="l"
th:value="#{screen.welcome.button.login}" tabindex="4" type="submit" value="LOGIN"/>
</div>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="_eventId" value="submit"/>
</form>
</div>
</main>
</body>
</html>
@@ -0,0 +1,91 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.logout.header}">Propagate Logout View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
<link href="https://use.fontawesome.com/releases/v5.0.6/css/all.css" rel="stylesheet">
<script th:src="@{#{webjars.poppermin.js}}"></script>
<script>
$(function () {
$('[data-toggle="tooltip"]').tooltip();
});
</script>
<script th:inline="javascript">
/*<![CDATA[*/
function redirectToApp() {
window.location = [[${logoutRedirectUrl}]];
}
function handleCallback(index, status) {
if (status == 200) {
$('#service' + index).addClass('fa-check').removeClass('fa-question');
$('#service' + index).prop('title', 'Logout request was successfully received.');
} else {
$('#service' + index).addClass('fa-warning').removeClass('fa-question');
$('#service' + index).prop('title', 'Logout notification could not be sent.');
}
}
/*]]>*/
</script>
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-success">
<h2 th:utext="#{screen.logout.header}">Logout successful</h2>
<p th:utext="#{screen.logout.fc.success}">You have successfully logged out of the Central Authentication
Service. Given single logout is enabled with CAS, \
the following list of applications are <strong> only notified</strong> to log you out and destroy your
user session. Remember that this \
is just a notification, not a guarantee. It is up the application itself to honor these notifications
and properly take action to log you \
out.</p>
<ol start="a">
<li th:each="entry,iterStat : ${logoutUrls}">
<script type="text/javascript" th:inline="javascript">
/*<![CDATA[*/
$.ajax({
url: [[${entry.key.logoutUrl.toExternalForm()}]],
dataType: 'jsonp',
async: true,
contentType: [[${entry.value.contentType}]]
, data: [[${entry.value.message}]]
, success: function (data) {
var index = [[${iterStat.index}]];
handleCallback(index, 200);
},
error: function (err, textStatus, errorThrown) {
var index = [[${iterStat.index}]];
handleCallback(index, err.status);
}
});
/*]]>*/
</script>
<p>
<i data-toggle="tooltip" data-placement="top" class="fa fa-question"
th:id="${'service'+iterStat.index}" title="Logout request pending..."> </i>
<kbd th:text="${entry.key.service.id}">entry.key.service.id</kbd>
</p>
</li>
</ol>
<p th:utext="#{screen.logout.security}">For security reasons, exit your web browser.</p>
<input type="button" th:if="${logoutRedirectUrl}"
class="btn btn-primary btn-success" onclick="redirectToApp();"
th:value="${'Go to ' + logoutRedirectUrl}" value="Go to...">
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,36 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.mfa.radius.pagetitle}">Radius Login View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="login">
<form method="post" id="fm1" class="fm-v clearfix" th:object="${credential}" th:action="@{/login}">
<div class="alert alert-danger" th:if="${#fields.hasErrors('*')}">
<span th:each="err : ${#fields.errors('*')}" th:utext="${err}">error message</span>
</div>
<div class="form-group">
<label for="token" class="fl-label" th:utext="#{screen.welcome.label.password}"><span class="accesskey">P</span>assword:</label>
<input type="password" class="form-control required" id="token" size="25" tabindex="1"
th:field="*{token}"
th:accesskey="#{screen.welcome.label.password.accesskey}" autocomplete="off"/>
</div>
<input class="btn btn-submit" name="_eventId_submit" accesskey="l"
th:value="#{screen.welcome.button.login}" tabindex="4" type="submit" value="Login"/>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="geolocation"/>
</form>
</div>
</main>
</body>
</html>
@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.pm.reset.title}">Password Reset Error View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
<h2 th:utext="#{screen.pm.reset.heading}">Password Reset Failed</h2>
<p th:utext="#{screen.pm.reset.message}">We were unable to process your password reset request at this time.</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,50 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.pm.reset.title}">Reset Password Send Instructions View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="reset">
<h3 th:utext="#{screen.pm.reset.title}">Reset your password</h3>
<span th:utext="#{screen.pm.reset.instructions}">Please provide your username. You will receive an email with follow-up instructions on how to reset your password.</span>
<form method="post" id="fm1" class="fm-v clearfix">
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="_eventId" value="findAccount"/>
<div class="form-group">
<label for="username" class="fl-label" th:utext="#{screen.pm.reset.username}"/>
<input type="text" class="form-control" id="username" name="username"
size="45" tabindex="1" required/>
</div>
<input class="btn btn-submit" accesskey="s"
th:value="#{screen.pm.button.submit}" tabindex="2" type="submit" value="SUBMIT"/>
&nbsp;
<input class="btn btn-danger"
name="cancel"
accesskey="c"
th:value="#{screen.pm.button.cancel}"
type="button"
onclick="location.href = location.href;" value="CANCEL"/>
</form>
<p/>
</div>
<script type="text/javascript" th:inline="javascript">
var i = [[#{screen.welcome.button.loginwip}]];
$('#fm1').submit(function () {
$(':submit').attr('disabled', true);
$(':submit').attr('value', i);
return true;
});
</script>
</div>
</main>
</body>
</html>
@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.pm.reset.title}">Reset Password Sent Instructions View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-success">
<h2 th:utext="#{screen.pm.reset.sent}">Password Reset Instructions Sent Successfully.</h2>
<p th:utext="#{screen.pm.reset.sentInstructions}">You should shortly receive an email with
follow-instructions to reset your password. Please do not take long as the password reset instructions
may expire.</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,42 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.pm.reset.title}">Reset Password Verify Questions View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<h2 th:utext="#{screen.pm.reset.qstitle}">Answer Security Questions</h2>
<p th:utext="#{screen.pm.reset.qsmsg(${username})}">Welcome <strong>{0}</strong>. Before you can reset your
password, you must answer the following security questions.</p>
<form method="post" id="fm1" class="fm-v clearfix">
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="_eventId" value="submit"/>
<input type="hidden" name="username" th:value="${username}"/>
<input type="hidden" name="token" th:value="${token}"/>
<div class="form-group">
<table width="100%" th:if="${questionsEnabled}" class="table">
<tr th:each="q : ${questions}">
<td th:utext="${q}">Question text</td>
<td>
<input type="password" class="form-control required" required th:name="${'q' + qStat.index}"
size="45"/>
</td>
</tr>
</table>
</div>
<input class="btn btn-submit" accesskey="s"
th:value="#{screen.pm.button.submit}" tabindex="2" type="submit" value="SUBMIT"/>
</form>
</div>
</main>
</body>
</html>
@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.risk.authnblocked.heading}">Risk Authentication Blocked View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
<h2 th:utext="#{screen.risk.authnblocked.heading}">Authentication attempt is blocked.</h2>
<p th:utext="#{screen.risk.authnblocked.message}">Your authentication attempt is untrusted and unauthorized from your current workstation.</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,23 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.service.error.header}">Service Error View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
<h2 th:utext="#{screen.service.error.header}">Application Not Authorized to Use CAS</h2>
<p th:if="${rootCauseException != null and rootCauseException.code != null}"
th:utext="#{${rootCauseException.code}}">rootCauseException.code</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,54 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.surrogates.account.selection.header}">Surrogate Account Selection View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-info">
<form method="post" id="loginForm" class="fm-v clearfix">
<div class="alert alert-danger alert-dismissible fade show" th:if="${flowRequestContext.messageContext.hasErrorMessages()}">
<span th:each="message : ${flowRequestContext.messageContext.allMessages}" th:utext="#{${message.text}}">Message Text</span>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="form-group">
<h2 th:text="#{screen.surrogates.choose.account}">Choose Account</h2>
<div th:utext="#{screen.surrogates.message}">
<p>You are provided with a list of accounts on behalf of which you are allowed to authenticate. </p>
<p>Select one and continue.</p>
</div>
<label for="surrogateTarget" class="fl-label">Account:</label>
<select name="surrogateTarget" id="surrogateTarget" class="form-control">
<option th:each="surrogate: ${surrogates}" th:value="${surrogate}" th:text="${surrogate}"/>
</select>
</div>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="_eventId" value="submit"/>
<input class="btn btn-submit" name="submit" accesskey="l"
th:value="#{screen.welcome.button.login}" type="submit" value="Login"/>
&nbsp;<a class="btn btn-danger" id="cancel" name="cancel"
th:unless="${service}"
th:href="@{/login}" th:text="#{screen.surrogates.button.cancel}">Cancel</a>
&nbsp;<a class="btn btn-primary" id="login" name="login"
th:if="${service}"
th:href="${service.id}" th:text="#{screen.error.page.loginagain}">Login</a>
</form>
</div>
</div>
</body>
</html>
@@ -0,0 +1,40 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.mfa.swivel.pagetitle}">Swivel Login View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="login">
<h3 th:text="#{cas.mfa.swivel.label.header}">Swivel Authentication</h3>
<form method="post" id="fm1" class="fm-v clearfix" th:object="${credential}" th:action="@{/login}">
<div id="msg" class="alert alert-danger errors" th:if="${#fields.hasErrors('*')}">
<span th:each="err : ${#fields.errors('*')}" th:utext="${err}">Error message</span>
</div>
<div class="form-group">
<p class="text-center">
<img th:src="@{/swivel/turingImage(principal=${principal})}"
src="http://via.placeholder.com/150x50"/>
</p>
<label for="token" class="fl-label" th:utext="#{cas.mfa.swivel.label.token}">Token:</label>
<input type="password" class="form-control required" required id="token" size="25" tabindex="1"
th:field="*{token}"
th:accesskey="#{screen.welcome.label.password.accesskey}" autocomplete="off"/>
</div>
<input class="btn btn-submit" name="_eventId_submit" accesskey="l"
th:value="#{screen.welcome.button.login}" tabindex="4" type="submit" value="Login"/>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
</form>
</div>
</main>
</body>
</html>
@@ -0,0 +1,62 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.mfa.u2f.pagetitle}">U2f Login View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
<script th:src="@{/js/u2f/u2f-api.js}"></script>
<script th:inline="javascript">
/*<![CDATA[*/
var appId = /*[[${u2fAuth.appId}]]*/;
var version = /*[[${u2fAuth.version}]]*/;
var challenge = /*[[${u2fAuth.challenge}]]*/;
var keyHandle = /*[[${u2fAuth.keyHandle}]]*/;
setTimeout(function () {
var registeredKeys = [{version: version, keyHandle: keyHandle}];
u2f.sign(appId, challenge, registeredKeys, function (data) {
var form = document.getElementById('form');
var reg = document.getElementById('tokenResponse');
reg.value = JSON.stringify(data);
form.submit();
});
}, 1000);
/*]]>*/
</script>
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="login">
<div class="alert alert-info">
<h3 th:text="#{cas.mfa.u2f.authentication.device}">Authenticate Device</h3>
<div th:utext="#{cas.mfa.u2f.authentication.message}">
<p><strong>Please touch the flashing U2F device now.</strong></p>
<p> You may be prompted to allow the site permission to access your security keys. After granting
permission, the device will start to blink.</p>
</div>
<form method="POST" id="form" th:object="${credential}" th:action="@{/login}">
<input type="hidden" name="tokenResponse" id="tokenResponse" th:field="*{token}"/>
<input type="hidden" name="_eventId" value="submit"/>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="geolocation"/>
</form>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,61 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.mfa.u2f.pagetitle}">U2f Registration View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
<script th:src="@{/js/u2f/u2f-api.js}"></script>
<script th:inline="javascript">
/*<![CDATA[*/
setTimeout(function () {
var appId = /*[[${u2fReg.appId}]]*/;
var version = /*[[${u2fReg.version}]]*/;
var challenge = /*[[${u2fReg.challenge}]]*/;
var registerRequests = [{version: version, challenge: challenge}];
console.log(appId, registerRequests);
u2f.register(appId, registerRequests, [], function (data) {
var form = document.getElementById('form');
var reg = document.getElementById('tokenResponse');
if (data.errorCode) {
console.log('U2F failed: error ' + data.errorCode);
return;
}
reg.value = JSON.stringify(data);
form.submit();
});
}, 1000);
/*]]>*/
</script>
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="login">
<div class="alert alert-info">
<h3 th:text="#{cas.mfa.u2f.register.device}">Register Device</h3>
<div th:utext="#{cas.mfa.u2f.authentication.message}">
<p><strong>Please touch the flashing U2F device now.</strong></p>
<p> You may be prompted to allow the site permission to access your security keys. After granting
permission, the device will start to blink.</p>
</div>
<form method="POST" id="form">
<input type="hidden" name="tokenResponse" id="tokenResponse"/>
<input type="hidden" name="_eventId" value="submit"/>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
</form>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,23 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title>Wsfederation Webflow Stopped</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
Either the authentication request was rejected/cancelled, or
the authentication provider denied access due to permissions, etc. Review logs to find the root cause of
the issue.
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,39 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.mfa.yubikey.pagetitle}">YubiKey Login View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="login">
<form method="post" id="yubiKeyForm" th:object="${credential}" th:action="@{/login}">
<div class="alert alert-info" th:text="#{cas.mfa.yubikey.authenticate}">
Use your registered YubiKey device to authenticate.
</div>
<div class="alert alert-danger" th:if="${#fields.hasErrors('*')}">
<span th:each="err : ${#fields.errors('*')}" th:utext="${err}">Error message</span>
</div>
<div class="form-group">
<label for="token" th:utext="#{screen.welcome.label.password}"><span class="accesskey">P</span>assword:</label>
<input type="password" class="form-control required" required id="token" size="25" tabindex="1"
th:field="*{token}"
th:accesskey="#{screen.welcome.label.password.accesskey}" autocomplete="off"/>
</div>
<input class="btn btn-submit" name="_eventId_submit" accesskey="l"
th:value="#{screen.welcome.button.login}" tabindex="2" type="submit" value="Login"/>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="geolocation"/>
</form>
</div>
</main>
</body>
</html>
@@ -0,0 +1,34 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{cas.mfa.yubikey.pagetitle}">YubiKey Registration View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="login">
<form method="post" id="yubiKeyForm" class="fm-v clearfix">
<div class="alert alert-info" th:text="#{cas.mfa.yubikey.register}">
Your device is not yet registered. Use the below form to register your device with CAS.
</div>
<div class="form-group">
<label for="token" class="fl-label" th:utext="#{cas.mfa.yubikey.label.token}">Token:</label>
<input type="password" class="form-control" required id="token" th:name="token"
size="25" tabindex="1"
autocomplete="off"/>
</div>
<input class="btn btn-submit" name="_eventId_submit" accesskey="s"
th:value="#{screen.welcome.button.register}" tabindex="2" type="submit" value="Register"/>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
</form>
</div>
</main>
</body>
</html>
@@ -0,0 +1,39 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.unavailable.header}">CAS Error View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
<script th:inline="javascript">
/*<![CDATA[*/
function showErrorDetails() {
$("#errorMsg").hide();
$("#errorDetails").empty();
$("#errorDetails").append("<p><pre style='white-space: pre-wrap;'>" + /*[[${#strings.escapeXml(trace)}]]*/ +"</pre></p>");
}
/*]]>*/
</script>
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
<h2 th:utext="#{screen.unavailable.heading(${status},${error})}">CAS is unable to process this request: "{0}:{1}"</h2>
<div th:utext="#{screen.unavailable.message}">screen.unavailable.message would go here</div>
<pre id="errorMsg" class="mt-4" style="white-space: pre-wrap;" th:text="${'Error: ' + message}">error message would go here</pre>
<p id="errorDetails">
<button type="button" class="btn btn-shutdown"
onclick="showErrorDetails();">View Details
</button>
</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,25 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.error.page.title.accessdenied}">Error - 401</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
<h2 th:utext="#{screen.error.page.accessdenied}">Access Denied</h2>
<p th:utext="#{screen.error.page.permissiondenied}">You do not have permission to view this page.</p>
<a class="btn btn-submit" th:href="@{/login}" th:utext="#{screen.error.page.loginagain}">Login
Again</a>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.error.page.title.permissiondenied}">Error - Permission Denied</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
<h2 th:utext="#{screen.error.page.authdenied}">Authorization Denied</h2>
<p th:utext="#{screen.error.page.permissiondenied}">You do not have permission to view this page.</p>
<a class="btn btn-submit" th:href="@{/login}" th:utext="#{screen.error.page.loginagain}">Login Again</a>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,26 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.error.page.title.pagenotfound}">Error - Page Not Found</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-info">
<h2 th:utext="#{screen.error.page.notfound}">Page Not Found</h2>
<p th:utext="#{screen.error.page.doesnotexist}">The page you are attempting to access does not exist at the
moment.</p>
<a class="btn btn-submit" th:href="@{/login}" th:utext="#{screen.error.page.loginagain}">Login
Again</a>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.error.page.title.requestunsupported}">Error - Unsupported Request</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
<h2 th:utext="#{screen.error.page.requestunsupported}">The request type or syntax is not supported.</h2>
<p th:utext="#{screen.error.page.permissiondenied}">You do not have permission to view this page.</p>
<a class="btn btn-submit" th:href="@{/login}" th:utext="#{screen.error.page.loginagain}">Login
Again</a>
</div>
</div>
</body>
</html>
@@ -0,0 +1,24 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.error.page.title.blocked}">Error - Permission Denied</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
<h2 th:utext="#{screen.blocked.header}">Access Denied</h2>
<p th:utext="#{screen.blocked.message}">You've entered the wrong password for the user too many times.
You've been throttled.</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title>CAS Resource List Fragment</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div th:fragment="cas-resource-list" id="cas-resource-list" class="card d-sm-none d-md-block">
<div class="card-body">
<h3 class="card-title" th:text="#{cas.login.resources.header}">Links to CAS Resources</h3>
<ul class="list-group">
<li class="list-group-item">
<a th:href="@{/status/dashboard}" th:inline="text">
<i class="fa fa-cogs"></i>[[#{cas.login.resources.dashboard}]]
</a>
</li>
<li class="list-group-item" th:if="${attributeConsentEnabled}">
<a th:href="@{/consentReview}" th:inline="text">
<i class="fa fa-cogs"></i>[[#{screen.consent.title}]]
</a>
</li>
<li class="list-group-item">
<a href="http://apereo.github.io/cas" th:inline="text">
<i class="fa fa-file"></i>[[#{cas.login.resources.wiki}]]
</a>
</li>
<li class="list-group-item">
<a href="https://github.com/apereo/cas/pulls" th:inline="text">
<i class="fa fa-bug"></i>[[#{cas.login.resources.pulls}]]
</a>
</li>
<li class="list-group-item">
<a href="https://apereo.github.io/cas/developer/Contributor-Guidelines.html" th:inline="text">
<i class="fa fa-bug"></i>[[#{cas.login.resources.contribguide}]]
</a>
</li>
<li class="list-group-item">
<a href="https://apereo.github.io/cas/Mailing-Lists.html" th:inline="text">
<i class="fa fa-envelope"></i>[[#{cas.login.resources.mailinglist}]]
</a>
</li>
<li class="list-group-item">
<a href="https://gitter.im/apereo/cas" th:inline="text">
<i class="far fa-comment-alt"></i>[[#{cas.login.resources.chat}]]
</a>
</li>
<li class="list-group-item">
<a href="https://apereo.github.io/" th:inline="text">
<i class="fa fa-rss"></i> [[#{cas.login.resources.blog}]]
</a>
</li>
</ul>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title>Cookies Notice Fragment</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<div th:fragment="cookiesDisabled" id="cookiesDisabled" class="card" style="display: none;">
<div class="card-body">
<h5 class="card-title" th:utext="#{screen.cookies.disabled.title}">screen.cookies.disabled.title</h5>
<p class="card-text" th:utext="#{screen.cookies.disabled.message}">screen.cookies.disabled.message</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title>staticAuthentication Fragment</title>
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div th:fragment="staticAuthentication" id="staticAuthentication" class="card" th:if="${staticAuthentication}">
<div class="card-body">
<h5 class="card-title" th:utext="#{screen.defaultauthn.title}">screen.defaultauthn.title text</h5>
<p class="card-text" th:utext="#{screen.defaultauthn.heading}">screen.defaultauthn.heading text</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title>Footer Fragment</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<footer th:fragment="footer" class="footer" role="contentinfo">
<div class="container">
<span id="copyright" th:utext="#{copyright}"></span>
<span>Powered by <a href="http://www.apereo.org/cas">
Apereo Central Authentication Service
<span th:text="${T(org.apereo.cas.util.CasVersion).getVersion()}"></span>
<span th:text="${T(org.apereo.cas.util.CasVersion).getDateTime()}"></span> </a>
</span>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,18 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title>Header Fragment</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<header th:fragment="header" role="banner">
<nav class="navbar navbar-expand-md fixed-top">
<a class="navbar-brand" href="#"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 336.82 167.83" class="logo"><defs><style>.cls-1{fill:#024d71;}.cls-2{fill:#74c163;}</style></defs><title>cas_logo</title><g id="Layer_2" data-name="Layer 2"><path class="cls-1" d="M217.72,469.85c-17.68,1.31-38.31,1-54.18-7.87-12.59-7-23.71-18.52-28.72-32.14a82,82,0,0,1-4.49-27.49c0-36.26,16.11-64.23,40.29-80.34,16.59-11.38,36-16.83,58.54-16.83,17.3,0,30.34,4,35.08,6.64l-9.48,27.73c-4.5-2.38-15.17-5.22-28.92-5.22s-26.78,4.27-36.5,12.33c-13.27,11.13-22,29.39-22,51.66,0,25.6,14.46,42.67,42.43,42.67a161.48,161.48,0,0,0,22.38-1.19Z" transform="translate(-130.33 -305.18)"/><path class="cls-1" d="M322.77,398.75l-2.72-30.4c-.71-8.76-1.42-21.56-2.14-31.28h-.71c-4,9.72-8.53,22-12.8,31.28l-13.69,30.08-13.53,33.43-17.33,38.41h-36.5l78-159.75h43.85l18.49,159.75H327.87l-3.05-38.12Z" transform="translate(-130.33 -305.18)"/><path class="cls-1" d="M364.31,438.85c12.27,3.81,21.29,5.19,36.22,5.19,13,0,20.87-6.71,20.87-19,0-9.24-6.87-14.93-21.57-22.75-16.82-9-32.94-21.8-32.94-42.42,0-32.24,28-51.91,62.81-51.91,19.19,0,30.57,4.27,37.44,7.82l-10.66,28.44a62.94,62.94,0,0,0-29.63-6.87c-15.88,0-24.17,7.82-24.17,16.59,0,9.48,9.72,15.17,23.23,22.75,19.43,10.19,31.52,23.23,31.52,42.43,0,35.55-29.44,55.72-64.71,53.8a231.52,231.52,0,0,1-24.78-2.61Z" transform="translate(-130.33 -305.18)"/></g><g id="swoosh"><path class="cls-2" d="M257.45,432.24a41.64,41.64,0,0,1,13.11-.32,39.17,39.17,0,0,1,16.89,6.2l0,0c10.55-15,29.11-25,50.24-25,19.75,0,37.34,8.85,48.16,22.28l1-.77c-12.85-17.31-37.44-29-65.67-29-26.92,0-50.54,10.65-63.81,26.65Z" transform="translate(-130.33 -305.18)"/></g></svg></a>
</nav>
</header>
</body>
</html>
@@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title>insecure notice Fragment</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div th:fragment="insecure" id="insecureNotice" class="card" th:if="${not #httpServletRequest.secure}">
<div class="card-body">
<h5 class="card-title" th:utext="#{screen.nonsecure.title}">screen.nonsecure.title text</h5>
<p class="card-text" th:utext="#{screen.nonsecure.message}">screen.nonsecure.message text</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,87 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title>loginProviders Fragment</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div th:fragment="loginProviders" th:remove="tag">
<div th:if="${pac4jUrls}" id="list-providers" class="card d-sm-none d-md-block bg-light">
<div class="card-body">
<h3 class="card-title" th:utext="#{screen.welcome.label.loginwith}">Or login with:</h3>
<div class="card-text">
<ul>
<li th:each="entry: ${pac4jUrls}" th:switch="${entry.type}">
<a class="btn btn-block btn-social"
th:classappend="'btn-' + ${entry.type}"
th:href="@{${entry.redirectUrl}}"
th:attr="autoredirect=${entry.autoRedirect}"
th:inline="text"
th:title="${entry.name}">
<span th:case="twitter" class="fab fa-twitter-square"></span>
<span th:case="foursquare" class="fab fa-foursquare"></span>
<span th:case="windowslive" class="fab fa-windows"></span>
<span th:case="yahoo" class="fab fa-yahoo"></span>
<span th:case="bitbucket" class="fab fa-bitbucket"></span>
<span th:case="wordpress" class="fab fa-wordpress"></span>
<span th:case="google2" class="fab fa-google-plus"></span>
<span th:case="github" class="fab fa-github-alt"></span>
<span th:case="dropbox" class="fab fa-dropbox"></span>
<span th:case="linkedin" class="fab fa-linkedin"></span>
<span th:case="facebook" class="fab fa-facebook-square"></span>
<span th:case="oidc" class="fab fa-openid"></span>
<span th:case="saml2" th:class="${entry.cssClass}"></span>
<span th:case="*" class="fa fa-sign-in-alt"></span>
[[${entry.name}]]
</a>
</li>
</ul>
</div>
</div>
</div>
<div th:if="${wsfedUrls}" id="list-providers" class="card d-sm-none d-md-block bg-light">
<div class="card-body">
<h3 class="card-title" th:utext="#{screen.welcome.label.loginwith}"/>
<div class="card-text">
<ul>
<li th:each="entry: ${wsfedUrls}">
<a class="btn btn-block btn-social"
th:classappend="btn-sm"
th:href="@{${entry.redirectUrl}}"
th:inline="text"
onload=""
th:attr="autoredirect=${entry.autoRedirect}"
th:title="${entry.name}">
<span class="fab fa-windows"></span>
[[${entry.name}]]
</a>
</li>
</ul>
</div>
</div>
</div>
<script>
var redirectTo = $( "a[autoRedirect=true]" ).attr("href");
if (redirectTo != null && redirectTo != undefined) {
window.location.href = redirectTo;
}
</script>
</div>
</main>
</body>
</html>
@@ -0,0 +1,160 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title>Login Form Fragment</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div class="row">
<div class="col-md">
<!-- Login form template begins here -->
<div th:fragment="loginform" class="card">
<div class="card-header text-center">
<h2 th:text="#{cas.login.pagetitle}">Login</h2>
<span class="fa-stack fa-2x hidden-xs">
<i class="fa fa-circle fa-stack-2x"></i>
<i class="fa fa-lock fa-stack-1x fa-inverse"></i>
</span>
</div>
<div class="card-body">
<form method="post" id="fm1" th:object="${credential}" action="login">
<div class="alert alert-danger" th:if="${#fields.hasErrors('*')}">
<span th:each="err : ${#fields.errors('*')}" th:utext="${err}">Example error</span>
</div>
<h3 th:utext="#{screen.welcome.instructions}">Enter your Username and Password</h3>
<section class="form-group">
<label for="username" th:utext="#{screen.welcome.label.netid}">Username</label>
<div th:if="${openIdLocalId}">
<strong>
<span th:utext="${openIdLocalId}"/>
</strong>
<input type="hidden"
id="username"
name="username"
th:value="${openIdLocalId}"/>
</div>
<div th:unless="${openIdLocalId}">
<input class="form-control required"
id="username"
size="25"
tabindex="1"
type="text"
th:disabled="${guaEnabled}"
th:field="*{username}"
th:accesskey="#{screen.welcome.label.netid.accesskey}"
autocomplete="off"/>
</div>
</section>
<section class="form-group">
<label for="password" th:utext="#{screen.welcome.label.password}">Password</label>
<div>
<input class="form-control required"
type="password"
id="password"
size="25"
tabindex="2"
th:accesskey="#{screen.welcome.label.password.accesskey}"
th:field="*{password}"
autocomplete="off"/>
<span id="capslock-on" style="display:none;">
<p>
<i class="fa fa-exclamation-circle"></i>
<span th:utext="#{screen.capslock.on}"/>
</p>
</span>
</div>
</section>
<section class="form-check" th:if="${passwordManagementEnabled && param.doChangePassword != null}">
<p>
<input type="checkbox" name="doChangePassword" id="doChangePassword"
value="true" th:checked="${param.doChangePassword != null}" tabindex="4"/>
<label for="doChangePassword" th:text="#{screen.button.changePassword}">Change Password</label>
</p>
</section>
<section class="form-check" th:if="${rememberMeAuthenticationEnabled}">
<p>
<input type="checkbox" name="rememberMe" id="rememberMe" value="true" tabindex="5"/>
<label for="rememberMe" th:text="#{screen.rememberme.checkbox.title}">Remember Me</label>
</p>
</section>
<section class="row" th:if="${recaptchaSiteKey != null AND recaptchaInvisible != null AND recaptchaSiteKey != null AND !recaptchaInvisible}">
<div class="g-recaptcha" th:attr="data-sitekey=${recaptchaSiteKey}"/>
</section>
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="_eventId" value="submit"/>
<input type="hidden" name="geolocation"/>
<p th:if="${#request.getMethod().equalsIgnoreCase('POST')}">
<span th:each="entry : ${httpRequestInitialPostParameters}" th:remove="tag">
<span th:each="entryValue : ${entry.value}" th:remove="tag">
<input type="hidden" th:name="${entry.key}" th:value="${entryValue}" />
</span>
</span>
</p>
<input class="btn btn-block btn-submit"
th:unless="${recaptchaSiteKey != null AND recaptchaInvisible != null AND recaptchaSiteKey != null AND recaptchaInvisible}"
name="submit"
accesskey="l"
th:value="#{screen.welcome.button.login}"
tabindex="6"
type="submit"
value="Login3"
/>
<button class="btn btn-block btn-submit g-recaptcha"
th:if="${recaptchaSiteKey != null AND recaptchaInvisible != null AND recaptchaSiteKey != null AND recaptchaInvisible}"
th:attr="data-sitekey=${recaptchaSiteKey}, data-badge=${recaptchaPosition}"
data-callback="onSubmit"
name="submitBtn"
accesskey="l"
th:text="#{screen.welcome.button.login}"
tabindex="6"
/>
</form>
<form th:if="${passwordManagementEnabled}" method="post" id="passwordManagementForm">
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="_eventId" value="resetPassword"/>
<span class="fa fa-unlock"></span>
<a th:utext="#{screen.pm.button.resetPassword}" href="javascript:void(0)" onclick="$('#passwordManagementForm').submit();"/>
<p/>
</form>
<div th:unless="${passwordManagementEnabled}">
<span class="fa fa-question-circle"></span>
<span th:utext="#{screen.pm.button.forgotpwd}">Forgot your password?</span>
<p/>
</div>
<script type="text/javascript" th:inline="javascript">
var i = [[#{screen.welcome.button.loginwip}]]
$( document ).ready(function() {
$("#fm1").submit(function () {
$(":submit").attr("disabled", true);
$(":submit").attr("value", i);
console.log(i);
return true;
});
});
</script>
<div th:replace="fragments/loginsidebar :: loginsidebar" />
</div>
</div>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title>Login Sidebar Fragment</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div th:fragment="loginsidebar" id="sidebar">
<div class="sidebar-content">
<p th:utext="#{screen.welcome.security}">For security reasons, please <a href="logout">log out</a> and exit
your web browser when you are done accessing \
services that require authentication!</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,91 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title>Password Update Form</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
<script th:inline="javascript">
/*<![CDATA[*/
var policyPattern = /*[[${policyPattern}]]*/;
var passwordStrengthI18n = {
0: /*[[#{screen.pm.password.strength.0}]]*/,
1: /*[[#{screen.pm.password.strength.1}]]*/,
2: /*[[#{screen.pm.password.strength.2}]]*/,
3: /*[[#{screen.pm.password.strength.3}]]*/,
4: /*[[#{screen.pm.password.strength.4}]]*/
};
/*]]>*/
</script>
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div class="alert alert-info">
<h3 th:utext="${expiredPass} ? #{screen.expiredpass.heading} : #{screen.mustchangepass.heading}">Change Password
Heading</h3>
<form id="passwordManagementForm" th:if="${passwordManagementEnabled}" method="post" th:object="${password}">
<div class="alert alert-danger" th:if="${#fields.hasErrors('*')}">
<span th:each="err : ${#fields.errors('*')}" th:utext="${err}">Error text</span>
</div>
<div class="form-group">
<label for="password" th:utext="#{screen.pm.enterpsw}">Enter Password:</label>&nbsp;
<input class="form-control" type="password" id="password" th:field="*{password}" required/>
</div>
<div class="form-group">
<label for="confirmedPassword" th:utext="#{screen.pm.confirmpsw}">Confirm Password:</label>&nbsp;
<input class="form-control" type="password" id="confirmedPassword" th:field="*{confirmedPassword}"
required/>
</div>
<div class="form-group">
<div>
<span th:text="#{screen.pm.password.strength}">Strength:</span>&nbsp;
<span id="password-strength-icon" class="fas" aria-hidden="true"></span>
</div>
<div class="progress">
<div id="strengthProgressBar" class="progress-bar"></div>
</div>
<div>
<span id="password-strength-warning"></span>&nbsp;<span id="password-strength-suggestions"></span>
</div>
</div>
<div class="form-group" id="password-strength-notes">
<div id="password-policy-violation-msg" class="alert alert-danger" role="alert" style="display: none;">
<span class="fas fa-exclamation-circle" aria-hidden="true"></span>&nbsp;
<strong th:text="#{screen.pm.password.policyViolation}">Password does not match the password policy requirement.</strong>
</div>
<div id="password-confirm-mismatch-msg" class="alert alert-danger" role="alert" style="display: none;">
<span class="fas fa-exclamation-circle" aria-hidden="true"></span>&nbsp;
<strong th:text="#{screen.pm.password.confirmMismatch}">Passwords do not match.</strong>
</div>
</div>
<div class="form-group text-center">
<input type="hidden" name="execution" th:value="${flowExecutionKey}"/>
<input type="hidden" name="_eventId" value="submit"/>
<input class="btn btn-submit"
name="submit"
accesskey="s"
th:value="#{screen.pm.button.submit}"
value="SUBMIT"
id="submit"
type="submit"
disabled="true"/>
&nbsp;
<a class="btn btn-danger" th:href="@{/login}" th:text="#{screen.pm.button.cancel}">CANCEL</a>
</div>
</form>
<p th:unless="${passwordManagementEnabled}"
th:utext="${expiredPass} ? #{screen.expiredpass.message} : #{screen.mustchangepass.message}">Expired/Must
Change Password text</p>
</div>
</main>
</body>
</html>
@@ -0,0 +1,62 @@
<script type="text/javascript" th:src="@{#{webjars.zxcvbn.js}}"></script>
<script type="text/javascript" th:src="@{#{webjars.jqueryui.js}}"></script>
<script type="text/javascript" th:src="@{#{webjars.jquerycookie.js}}"></script>
<script src="//www.google.com/recaptcha/api.js" async defer th:if="${recaptchaSiteKey}"></script>
<script th:src="@{#{webjars.bootstrapmin.js}}"></script>
<script th:src="@{#{webjars.headmin.js}}"></script>
<script th:src="@{#{webjars.storemin.js}}"></script>
<script type="text/javascript" th:src="@{${#themes.code('cas.javascript.file')}}"></script>
<script th:inline="javascript">
head.ready(document, function () {
if (!window.jQuery) {
var jqueryUrl = /*[[@{#{webjars.jquerymin.js}}]]*/;
head.load(jqueryUrl, loadjQueryUI);
} else {
notifyResourcesAreLoaded(resourceLoadedSuccessfully);
}
});
function loadjQueryUI() {
var jqueryUrl = /*[[@{#{webjars.jqueryui.js}}]]*/;
head.load(jqueryUrl, loadjQueryCookies);
}
function loadjQueryCookies() {
var jqueryUrl = /*[[@{#{webjars.jquerycookie.js}}]]*/;
head.load(jqueryUrl, notifyResourcesAreLoaded(resourceLoadedSuccessfully));
}
function notifyResourcesAreLoaded(callback) {
if (typeof callback === "function") {
callback();
}
}
</script>
<script th:inline="javascript">
/*<![CDATA[*/
var trackGeoLocation = /*[[${trackGeoLocation}]]*/ === "true";
var googleAnalyticsTrackingId = /*[[${googleAnalyticsTrackingId}]]*/;
if (googleAnalyticsTrackingId != null && googleAnalyticsTrackingId != '') {
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga');
ga('create', googleAnalyticsTrackingId, 'auto');
ga('send', 'pageview');
}
/*]]>*/
</script>
<script type="text/javascript" th:if="${recaptchaSiteKey != null AND recaptchaInvisible != null AND recaptchaSiteKey != null AND recaptchaInvisible}" th:inline="javascript">
function onSubmit(token) {
$('#fm1').submit();
}
</script>
@@ -0,0 +1,62 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title>Service UI Fragment</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div th:fragment="serviceUI" th:if="${registeredService}" id="serviceui" class="alert alert-info">
<div th:if="${serviceUIMetadata}">
<table>
<tr>
<td>
<img th:if="${serviceUIMetadata.logoUrl}"
th:title="${serviceUIMetadata.displayName}"
th:alt="${serviceUIMetadata.displayName}"
th:src="${serviceUIMetadata.logoUrl}"
th:width="${serviceUIMetadata.logoWidth}"
th:height="${serviceUIMetadata.logoHeight}"/>
<img th:unless="${serviceUIMetadata.logoUrl}"
th:title="${serviceUIMetadata.displayName}"
th:alt="${serviceUIMetadata.displayName}"
th:src="@{images/webapp.png}"
th:width="${serviceUIMetadata.logoWidth}"
th:height="${serviceUIMetadata.logoHeight}"/>
</td>
</tr>
<tr>
<td id="servicedesc">
<h2 th:text="${serviceUIMetadata.displayName}">serviceUIMetadata.displayName</h2>
<p th:text="${serviceUIMetadata.description}">serviceUIMetadata.description</p>
<p th:if="${serviceUIMetadata.informationURL}" th:utext="#{screen.mdui.infolink.text(${serviceUIMetadata.informationURL})}">screen.mdui.infolink.text</p>
<p th:if="${serviceUIMetadata.privacyStatementURL}" th:utext="#{screen.mdui.privacylink.text(${serviceUIMetadata.privacyStatementURL})}">serviceUIMetadata.privacyStatementURL</p>
</td>
</tr>
</table>
</div>
<div th:unless="${serviceUIMetadata}">
<table>
<tr>
<td>
<img th:src="${registeredService.logo}" th:if="${registeredService.logo}"/>
<img th:src="@{images/webapp.png}" th:unless="${registeredService.logo}"/>
</td>
<td id="servicedesc">
<h2 th:text="${registeredService.name}">Registered Service Name</h2>
<p th:text="${registeredService.description}">Registered Service Description</p>
</td>
</tr>
</table>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,39 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title layout:title-pattern="$CONTENT_TITLE - $LAYOUT_TITLE">CAS &#8211; Central Authentication Service</title>
<link rel="stylesheet" th:href="@{#{webjars.fontawesomemin.css}}"/>
<link type="text/css" rel="stylesheet" th:href="@{#{webjars.latomin.css}}"/>
<!--/* Core CAS CSS */-->
<link rel="stylesheet" href="../static/css/cas.css" th:href="@{${#themes.code('cas.standard.css.file')}}"/>
<link rel="icon" th:href="@{/favicon.ico}" type="image/x-icon"/>
<script type="text/javascript" th:src="@{#{webjars.jquerymin.js}}"></script>
</head>
<body>
<div th:replace="fragments/header :: header">
<a href="fragments/header.html">Header</a> fragment will go here
</div>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content" id="content">
CAS content will go here
</div>
</main>
<div th:replace="fragments/footer :: footer">
<a href="fragments/footer.html">Footer</a> fragment will go here
</div>
<script th:replace="fragments/scripts"/>
</body>
</html>
@@ -0,0 +1,23 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.mfaDenied.heading}">MFA Denied View</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
<h2 th:utext="#{screen.mfaDenied.heading}">MFA attempt is denied.</h2>
<p th:utext="#{screen.mfaDenied.message}">Your MFA provider has denied your attempt at second factor
authentication. Contact your system administrator for help in restoring your account.</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<title th:text="#{screen.mfaUnavailable.header}">MFA Provider Unavailable</title>
<link href="../../static/css/cas.css" rel="stylesheet" th:remove="tag" />
</head>
<body>
<main role="main" class="container mt-3 mb-3">
<div layout:fragment="content">
<div class="alert alert-danger">
<h2 th:utext="#{screen.mfaUnavailable.heading}">MFA Provider Unavailable</h2>
<p th:utext="#{screen.mfaUnavailable.message}">Your MFA provider is currently unvailable.</p>
</div>
</div>
</main>
</body>
</html>
@@ -0,0 +1,163 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{monitoring/layout}">
<head>
<title th:text="#{cas.attrresolutionview.pagetitle}"></title>
<script th:inline="javascript">
/*<![CDATA[*/
var urls = {
resolveAttributes: /*[[@{/status/attrresolution/resolveattrs}]]*/,
releaseAttributes: /*[[@{/status/attrresolution/releaseattrs}]]*/
};
/*]]>*/
</script>
<script type="text/javascript" th:inline="javascript">
function jqueryReady() {
head.load(
/*[[@{/js/attrresolution.js}]]*/
);
}
</script>
</head>
<body>
<div layout:fragment="content">
<div id="attrResolution">
<ul class="nav nav-tabs">
<li class="nav-item"><a data-toggle="tab" class="nav-link active" href="#attributeResolutionPanel"
th:text="#{cas.attrresolutionview.pagetitle}"/></li>
<li class="nav-item"><a data-toggle="tab" class="nav-link" href="#attributeReleasePanel"
th:text="#{cas.attrreleaseview.pagetitle}"/></li>
</ul>
<div class="tab-content clearfix">
<div class="tab-pane active" id="attributeResolutionPanel">
<h3 th:text="#{cas.attrresolutionview.pagetitle}"/>
<p>Allow CAS to execute a query against configured attribute repositories to determine the set of
attributes that may be retrieved and resolved for
a given user. Note that this functionality is only productive if CAS is configured to
<strong>NOT</strong> directly retrieve attributes as part of
the authentication attempt.
<p/>
<div class="" id="">
<form method="post" id="fm1" class="">
<div class="form-group">
<label for="uid" class="fl-label" th:utext="#{cas.attrresolutionview.label.uid}"></label>
<input type="text" class="form-control"
size="35"
tabindex="0"
id="uid"
name="uid"
autocomplete="off" required/>
</div>
<input class="btn btn-success"
name="_eventId_submit"
accesskey="l"
th:value="#{cas.attrresolutionview.button.submit}"
tabindex="1"
id="submitResolve"
type="submit"/>
</form>
<div class="alert alert-info" id="status"></div>
<table id="attributesTable" class="table table-striped table-bordered mt-3">
<thead>
<tr>
<th>Attribute</th>
<th>Value(s)</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
<div class="tab-pane" id="attributeReleasePanel">
<h3 th:text="#{cas.attrreleaseview.pagetitle}"/>
<p>Allow CAS to determine the collection of attributes that will be released to a given application. The
application will be matched against the CAS service registry to find the corresponding record whose
associated policies determine released attributes, etc.
<p/>
<form method="post" id="fmrel" class="">
<div class="form-group">
<label for="username" class="fl-label">Username:</label>
<input type="text" class="form-control"
size="35"
tabindex="0"
id="username"
name="username"
placeholder="Username..."
autocomplete="off" required/>
</div>
<div class="form-group">
<label for="password" class="fl-label">Password:</label>
<input type="password" class="form-control"
size="35"
tabindex="0"
id="password"
name="password"
placeholder="Password..."
autocomplete="off" required/>
</div>
<div class="form-group">
<label for="service" class="fl-label">Service:</label>
<input type="text" class="form-control"
size="35"
tabindex="0"
id="service"
name="service"
placeholder="Application URL (i.e. https://app.example.org)"
autocomplete="off" required/>
</div>
<input class="btn btn-success"
name="_eventId_submit"
accesskey="l"
th:value="#{cas.attrresolutionview.button.submit}"
tabindex="1"
id="submitRelease"
type="submit"/>
</form>
<div id="validationresult" class="mt-3">
<h3>Response</h3>
<div id="validationresponse"></div>
<ul class="nav nav-tabs">
<li class="nav-item"><a data-toggle="tab" class="nav-link active" href="#cas1">CAS v1</a>
</li>
<li class="nav-item"><a data-toggle="tab" class="nav-link" href="#cas2">CAS v2</a></li>
<li class="nav-item"><a data-toggle="tab" class="nav-link" href="#cas3Xml">CAS v3 XML</a>
</li>
<li class="nav-item"><a data-toggle="tab" class="nav-link" href="#cas3Json">CAS v3 JSON</a>
</li>
<li class="nav-item"><a data-toggle="tab" class="nav-link" href="#serviceJson">Service</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="cas1"></div>
<div class="tab-pane" id="cas2"></div>
<div class="tab-pane" id="cas3Xml"></div>
<div class="tab-pane" id="cas3Json"></div>
<div class="tab-pane" id="serviceJson"></div>
</div>
</div>
</div>
</div>
<div>
<div th:replace="monitoring/fragments/footerButtons"/>
</div>
</div>
</div>
</body>
</html>
@@ -0,0 +1,5 @@
<div class="mt-5">
<p/>
<a class="btn btn-success" th:href="@{/status/dashboard}" th:text="#{cas.dashboard.section.dashboard.title}" />
<a class="btn btn-success" href="#" onclick="location.reload();" th:text="#{cas.ssosessions.button.refresh}" />
</div>
@@ -0,0 +1,4 @@
<header>
<a id="logo" href="http://www.apereo.org" th:title="#{logo.title}">Apereo</a>
<h1>Apereo Central Authentication Service (CAS)</h1>
</header>
@@ -0,0 +1,26 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<body layout:fragment="modal(modalId, modalHeader, modalButtons, modalTopClose)">
<div th:id="${modalId}" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button th:unless="${modalTopClose} == false" type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" th:id="${modalId} + '-label'" th:text="${modalHeader}">Modal title</h4>
</div>
<div class="modal-body">
<div layout:fragment="modal-content">
<p>My modal content</p>
</div>
</div>
<div class="modal-footer" th:if="${modalButtons}">
<button th:unless="${hideCancel} == false" type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<button type="button" class="btn btn-primary" data-dismiss="modal">Ok</button>
</div>
</div>
</div>
</div>
</body>
</html>
@@ -0,0 +1,30 @@
<script th:src="@{#{webjars.headmin.js}}"></script>
<script type="text/javascript" th:src="@{${#themes.code('cas.javascript.file')}}"></script>
<script th:inline="javascript">
head.ready(document, function () {
if (!window.jQuery) {
var jqueryUrl = /*[[@{#{webjars.jquerymin.js}}]]*/;
head.load(jqueryUrl, loadjQueryUI);
} else {
notifyResourcesAreLoaded(resourceLoadedSuccessfully);
}
});
function loadjQueryUI() {
var jqueryUrl = /*[[@{#{webjars.jqueryui.js}}]]*/;
head.load(jqueryUrl, loadjQueryCookies);
}
function loadjQueryCookies() {
var jqueryUrl = /*[[@{#{webjars.jquerycookie.js}}]]*/;
head.load(jqueryUrl, notifyResourcesAreLoaded(resourceLoadedSuccessfully));
}
function notifyResourcesAreLoaded(callback) {
if (typeof callback === "function") {
callback();
}
}
</script>
@@ -0,0 +1,54 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
<meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"/>
<link rel="icon" th:href="@{/favicon.ico}" type="image/x-icon"/>
<title layout:title-pattern="$CONTENT_TITLE - $LAYOUT_TITLE">Central Authentication Service</title>
<link rel="stylesheet" th:href="@{#{webjars.fontawesomemin.css}}"/>
<link rel="stylesheet" th:href="@{${#themes.code('cas.admin.css.file')}}" />
<script type="text/javascript" th:src="@{#{webjars.jquerymin.js}}"></script>
<script type="text/javascript" th:src="@{#{webjars.semanticui.semantic.js}}"></script>
<script type="text/javascript" th:src="@{#{webjars.jqueryui.js}}"></script>
<script type="text/javascript" th:src="@{#{webjars.jquerycookie.js}}"></script>
<script th:src="@{#{webjars.bootstrapmin.js}}"></script>
<script th:src="@{#{webjars.datatables.jquery.datatablesmin.js}}"></script>
<script th:src="@{#{webjars.datatables.datatables.bootstrapmin.js}}"></script>
<script th:src="@{#{webjars.mindmup.editable-table.js}}"></script>
<script th:inline="javascript">
/*<![CDATA[*/
var trackGeoLocation = /*[[${trackGeoLocation}]]*/ === "true";
/*]]>*/
</script>
</head>
<body>
<div th:replace="fragments/header :: header">
<a href="fragments/header.html">Header</a> fragment will go here
</div>
<main role="main" class="container">
<div layout:fragment="content" id="content">
CAS content will go here
</div>
</main>
<div th:replace="fragments/footer :: footer">
<a href="fragments/footer.html">Footer</a> fragment will go here
</div>
<script th:replace="monitoring/fragments/scripts"/>
</body>
</html>
@@ -0,0 +1,71 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{monitoring/layout}">
<head>
<title>Authentication Events</title>
<script th:inline="javascript">
/*<![CDATA[*/
var urls = {
getEvents: /*[[@{/status/authnEvents/getEvents}]]*/
};
/*]]>*/
</script>
<script type="text/javascript" th:inline="javascript">
function jqueryReady() {
head.load(
/*[[@{/css/authnEvents.css}]]*/
);
head.load(
/*[[@{/js/authnEvents.js}]]*/
);
}
</script>
</head>
<body id="cas">
<div layout:fragment="content">
<div id="authnEvents">
<h3>Manage Authentication Events</h3>
<div class="tabsContainer">
<!-- Nav tabs -->
<ul id="myTabs" class="nav nav-tabs" role="tablist">
<li role="presentation" class="nav-item"><a class="nav-link active" href="#authnEvents"
aria-controls="authnEvents" role="tab"
data-toggle="tab">Authentication Events</a></li>
</ul>
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="authnEventsTab">
<table id="authnEventsTable" class="table table-striped table-bordered">
<thead>
<tr>
<th>Type</th>
<th>Principal</th>
<th>Created</th>
<th>Timestamp</th>
<th>User Agent</th>
<th>Client IP</th>
<th>Server IP</th>
<th>Geo Lat.</th>
<th>Geo Long.</th>
<th>Geo Accuracy</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
<div th:replace="monitoring/fragments/footerButtons"/>
</div>
</div>
</body>
</html>
@@ -0,0 +1,106 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns:th="http://www.w3.org/1999/xhtml"
layout:decorate="~{monitoring/layout}">
<head>
<title th:text="#{cas.viewconfig.pagetitle}"></title>
</head>
<body id="cas">
<div id="container">
<div layout:fragment="content">
<link rel="stylesheet" th:href="@{#{webjars.jqueryui.themes.cupertino.jquery-ui.css}}"/>
<link rel="stylesheet" th:href="@{#{webjars.datatables-plugins.jqueryui.css}}"/>
<script type="text/javascript" th:inline="javascript">
var urls = {
getConfiguration: /*[[@{/status/config/getConfiguration}]]*/,
updateConfiguration: /*[[@{/status/config/updateConfiguration}]]*/,
};
var updateEnabled = /*[[${enableUpdate}]]*/ === "true" ;
function jqueryReady() {
head.load(
/*[[@{/js/viewConfig.js}]]*/
);
}
</script>
<div class="viewConfig">
<div id="loadingMessage"><h3 th:text="#{cas.viewconfig.loading}"/></div>
<div id="viewConfigError">
<h2 th:text="#{cas.viewconfig.errormessage}"></h2>
<div>
<input class="btn btn-success" type="button" onclick="location.reload();" th:value="#{cas.viewconfig.button.refresh}"/>
</div>
</div>
<div id="view-configuration">
<div class="card">
<div class="card-header">
<h4 th:text="#{cas.viewconfig.pagetitle}">
<span class="glyphicon glyphicon-cog" aria-hidden="true"/>
</h4>
</div>
<div class="card-body">
<div id="alertWrapper" style="display:none" class="alert alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span
aria-hidden="true">&times;</span></button>
<p id="resultText"></p>
</div>
<div id="containers-table" class="container-fluid">
<table id="viewConfigsTable" class="table table-striped table-bordered">
<thead>
<tr>
<th th:text="#{cas.viewconfig.table.column.key}"/>
<th th:text="#{cas.viewconfig.table.column.value}"/>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div th:replace="monitoring/fragments/footerButtons"></div>
<div th:if="${enableRefresh}">
<form th:method="${refreshMethod}" th:action="${refreshEndpoint}" id="formRefreshCAS">
<button class="btn btn-refresh"
type="button"
th:inline="text"
th:attr="data-disabled=true,data-title=foo,data-message=bar">
<i class="fa fa-refresh"></i> [[#{cas.dashboard.action.button.refresh}]]
</button>
</form>
</div>
<div layout:include="monitoring/fragments/modal :: modal(
modalId='refreshModal',
modalHeader=#{cas.dashboard.action.button.refresh.modal.title},
modalButtons='true',
modalTopClose=false,
hideCancel=false
)"
th:remove="tag">
<p layout:fragment="modal-content"><span
th:text="#{cas.dashboard.action.button.refresh.modal.message}"></span></p>
</div>
</div>
</div>
</div>
</body>
</html>
@@ -0,0 +1,52 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{monitoring/layout}">
<head>
<title th:text="#{cas.configmetadata.pagetitle}"></title>
<link rel="stylesheet" th:href="@{#{webjars.jqueryui.themes.cupertino.jquery-ui.css}}"/>
<script type="text/javascript" th:inline="javascript">
/*<![CDATA[*/
var urls = {
search: /*[[@{/status/configmetadata/search?name={query}}]]*/
};
/*]]>*/
function jqueryReady() {
head.load(
/*[[@{/js/viewConfigMetadata.js}]]*/
);
}
</script>
</head>
<body id="cas">
<div layout:fragment="content">
<h3 th:text="#{cas.configmetadata.pagetitle}"></h3>
<p>CAS ships with meta-data files that provide details of all supported configuration properties and settings. You
may query the metadata repository
here to search for specific CAS settings and properties.
<p/>
<p>
Property names can be specified in very relaxed terms. For instance <code>cas.someProperty</code>, <code>cas.some-property</code>,
<code>cas.some_property</code>
and <code>CAS_SOME_PROPERTY</code> are all valid names.
</p>
<div>
<div class="ui search">
<div class="ui left icon input form-group">
<label for="searchField" class="sr-only">Enter search term</label>
<input id="searchField" class="prompt form-control input-lg" type="text"
placeholder="Search CAS...">
</div>
</div>
<p/>
</div>
<div id="accordion">
</div>
</div>
</body>
</html>
@@ -0,0 +1,199 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{monitoring/layout}">
<head>
<title th:text="#{cas.dashboard.pagetitle}"></title>
</head>
<body id="cas">
<div layout:fragment="content">
<div class="viewDashboard">
<div class="app-launcher clearfix">
<h1 th:inline="text"><i class="fa fa-dashboard"></i>[[#{cas.dashboard.section.dashboard.title}]]</h1>
<div class="alert alert-warning" th:if="${!dashboardEndpointsEnabled}">
<p>No dashboard functionality/endpoint is configured and accessible.
Unless you teach CAS otherwise, <strong>all endpoints are disabled by default.</strong>
Revisit the CAS configuration/documentation and explicitly enable access for desired endpoints and knobs.
</p>
</div>
<ul>
<li th:if="${healthCheckEndpointEnabled}">
<a th:href="@{/status}" class="casTooltip">Status
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.status}"></span>
</a>
</li>
<li th:if="${actuatorEndpointsEnabled and autoConfigurationEndpointEnabled}">
<a th:href="@{/status/autoconfig}" class="casTooltip">
Auto Configuration
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.autoconfiguration}"></span>
</a>
</li>
<li th:if="${actuatorEndpointsEnabled and beansEndpointEnabled}">
<a th:href="@{/status/beans}" class="casTooltip">Beans
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.beans}"></span>
</a>
</li>
<li th:if="${actuatorEndpointsEnabled and mappingsEndpointEnabled}" class="casTooltip">
<a th:href="@{/status/mappings}">Endpoint Mappings
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.mappings}"></span>
</a>
</li>
<li th:if="${actuatorEndpointsEnabled and configPropsEndpointEnabled}" class="casTooltip">
<a th:href="@{/status/configprops}">Configuration Properties
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.configprops}"></span>
</a>
</li>
<li th:if="${actuatorEndpointsEnabled and dumpEndpointEnabled}">
<a th:href="@{/status/dump}" class="casTooltip">Thread Dump
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.dump}"></span>
</a>
</li>
<li th:if="${actuatorEndpointsEnabled and environmentEndpointEnabled}">
<a th:href="@{/status/env}" class="casTooltip">Environment
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.env}"></span>
</a>
</li>
<li th:if="${actuatorEndpointsEnabled and healthEndpointEnabled}">
<a th:href="@{/status/health}" class="casTooltip">Health
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.health}"></span>
</a>
</li>
<li th:if="${actuatorEndpointsEnabled and infoEndpointEnabled}">
<a th:href="@{/status/info}" class="casTooltip">Info
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.info}"></span>
</a>
</li>
<li th:if="${metricsEndpointEnabled}">
<a th:href="@{/status/metrics}" class="casTooltip">Metrics
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.metrics}"></span>
</a>
</li>
<li th:if="${actuatorEndpointsEnabled and traceEndpointEnabled}">
<a th:href="@{/status/trace}" class="casTooltip">Trace Requests
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.trace}"></span>
</a>
</li>
<li th:if="${statisticsEndpointEnabled}">
<a th:href="@{/status/stats}" class="casTooltip">Statistics Panel
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.stats}"></span>
</a>
</li>
<li th:if="${environmentEndpointEnabled and configurationStateEnabled}">
<a th:href="@{/status/config}" class="casTooltip">Configuration Panel
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.configpanel}"></span>
</a>
</li>
<li th:if="${configurationMetadataEndpointEnabled}">
<a th:href="@{/status/configmetadata}" class="casTooltip">Configuration Metadata
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.configmetadata}"></span>
</a>
</li>
<li th:if="${singleSignOnReportEnabled}">
<a th:href="@{/status/ssosessions}" class="casTooltip">SSO Sessions
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.ssosessions}"></span>
</a>
</li>
<li th:if="${singleSignOnStatusEndpointEnabled}">
<a th:href="@{/status/sso}" class="casTooltip">SSO Status
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.ssostatus}"></span>
</a>
</li>
<li th:if="${servicesEndpointEnabled}">
<a th:href="@{/status/services}" class="casTooltip">Registered Services
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.services}"></span>
</a>
</li>
<li th:if="${springWebflowEndpointEnabled}">
<a th:href="@{/status/swf}" class="casTooltip">Webflow Report
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.swf}"></span>
</a>
</li>
<li th:if="${auditLogEndpointEnabled}">
<a th:href="@{/status/logging}" class="casTooltip">Logging
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.logging}"></span>
</a>
</li>
<li th:if="${attributeResolutionEndpointEnabled}">
<a th:href="@{/status/attrresolution}" class="casTooltip">Attribute Resolution & Release
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.attrresolution}"></span>
</a>
</li>
<li th:if="${discoveryProfileEndpointEnabled}">
<a th:href="@{/status/discovery}" class="casTooltip">Discovery Profile
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.discovery}"></span>
</a>
</li>
<li th:if="${trustedDevicesEnabled}">
<a th:href="@{/status/trustedDevs}" class="casTooltip">Trusted Devices
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.trusteddevs}"></span>
</a>
</li>
<li th:if="${authenticationEventsRepositoryEnabled}">
<a th:href="@{/status/authnEvents}" class="casTooltip">AuthN Events
<span class="tooltiptext" th:text="#{cas.dashboard.tooltip.authnevents}"></span>
</a>
</li>
</ul>
</div>
<div class="server-functions" th:if="${restartEndpointEnabled or shutdownEndpointEnabled}">
<h2 th:inline="text"><i class="fa fa-server"></i>[[#{cas.dashboard.section.server.functions.title}]]</h2>
<ul>
<li th:if="${restartEndpointEnabled}">
<form method="post" th:action="@{/status/restart}">
<button class="btn btn-restart"
type="button"
data-toggle="modal"
data-target="#myModal"
th:inline="text"
th:attr="data-title=#{cas.dashboard.action.button.reboot.modal.title},data-message=#{cas.dashboard.action.button.reboot.modal.message}"
>
<i class="fa fa-undo"></i>[[#{cas.dashboard.action.button.reboot}]]
</button>
</form>
</li>
<li th:if="${shutdownEndpointEnabled}">
<form method="post" th:action="@{/status/shutdown}">
<button type="button" class="btn btn-shutdown"
data-toggle="modal"
data-target="#myModal"
th:inline="text"
th:attr="data-title=#{cas.dashboard.action.button.shutdown.modal.title},data-message=#{cas.dashboard.action.button.shutdown.modal.message}"
>
<i class="fa fa-power-off"></i>
[[#{cas.dashboard.action.button.shutdown}]]
</button>
</form>
</li>
</ul>
</div>
<div layout:include="monitoring/fragments/modal :: modal(modalId='myModal', modalHeader='Message', modalButtons='true')" th:remove="tag">
<p layout:fragment="modal-content" />
</div>
<script type="text/javascript">
$('#myModal').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget);
var modal = $(this);
modal.find('.modal-title').text(button.data('title'));
modal.find('.modal-body').text(button.data('message'));
var form = $(event.relatedTarget).closest('form');
modal.find('.modal-footer button.btn-primary').data('form', form);
})
$('#myModal').find('.modal-footer button.btn-primary').on('click', function () {
$(this).data('form').submit();
});
</script>
</div>
</div>
</body>
</html>
@@ -0,0 +1,123 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{monitoring/layout}">
<head>
<title th:text="#{cas.loggingdashboard.title}"></title>
<script th:inline="javascript">
/*<![CDATA[*/
var logConfigFileLocation = /*[[${logConfigurationFile}]]*/;
var urls = {
getConfiguration: /*[[@{/status/logging/getConfiguration}]]*/,
getAuditLog: /*[[@{/status/logging/getAuditLog}]]*/,
updateLevel: /*[[@{/status/logging/updateLoggerLevel}]]*/,
reportsWebsocket: /*[[@{/reports-websocket}]]*/
};
/*]]>*/
</script>
<script type="text/javascript" th:inline="javascript">
function jqueryReady() {
head.load(
/*[[@{/css/loggingDashboard.css}]]*/
);
head.load(
/*[[@{/js/sockjs.js}]]*/,
/*[[@{/js/stomp.js}]]*/,
/*[[@{/js/loggingDashboard.js}]]*/
);
}
</script>
</head>
<body>
<div layout:fragment="content">
<h2>Logging</h2>
<div id="loggingDashboard">
<div id="loadingMessage" class="">
<strong th:text="#{cas.loggingdashboard.loading}"/>
</div>
<div id="errorLoadingData" class="alert alert-danger d-none">
<h3 th:text="#{cas.loggingdashboard.loading.error}"/>
<div>
<input class="btn btn-success" type="button"
onclick="location.reload();" th:value="#{cas.ssosessions.button.refresh}"/>
</div>
</div>
<div class="tabsContainer d-none">
<div id="alert-container"></div>
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="logger-tab" data-toggle="tab" href="#loggersTab" role="tab"
aria-controls="loggersTab" aria-selected="true">Loggers</a>
</li>
<li class="nav-item">
<a class="nav-link" id="logOutput-tab" href="#logOutputTab" aria-controls="logOutput"
role="tab" data-toggle="tab">CAS Log</a>
</li>
<li class="nav-item">
<a class="nav-link" id="auditLog-tab" data-toggle="tab" href="#auditLogTab" role="tab" aria-controls="auditLog" aria-selected="false">Audit Log</a>
</li>
</ul>
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="loggersTab" role="tabpanel" aria-labelledby="logger-tab">
<table id="loggersTable" class="table table-striped table-bordered">
<thead>
<tr>
<th></th>
<th th:text="#{cas.loggingdashboard.logger}"/>
<th th:text="#{cas.loggingdashboard.additive}"/>
<th th:text="#{cas.loggingdashboard.state}"/>
<th th:text="#{cas.loggingdashboard.level}"/>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td>logger</td>
<td>additive</td>
<td>state</td>
<td>level</td>
</tr>
</tbody>
</table>
</div>
<div class="tab-pane fade" id="logOutputTab" role="tabpanel" aria-labelledby="logOutput-tab">
<div id="websocketStatus" class="alert alert-info" style="visibility:hidden"></div>
<textarea id="logoutputarea" rows="20" cols="20"></textarea>
</div>
<div class="tab-pane fade" id="auditLogTab" role="tabpanel" aria-labelledby="auditLog-tab">
<table id="auditLogTable" class="display table table-striped table-bordered">
<thead>
<tr>
<th>Who</th>
<th>What</th>
<th>Action</th>
<th>When</th>
<th>Client IP</th>
<th>Server IP</th>
</tr>
</thead>
<tbody/>
</table>
</div>
</div>
<div th:replace="monitoring/fragments/footerButtons"/>
</div>
</div>
</div>
</body>
</html>
@@ -0,0 +1,164 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{monitoring/layout}">
<head>
<title th:text="#{cas.ssosessions.report.pagetitle}"></title>
</head>
<body id="cas">
<div layout:fragment="content">
<link rel="stylesheet" th:href="@{/css/ssosessions.css}"/>
<div id="content">
<script type="text/javascript" th:inline="javascript">
var urls = {
destroy: {
all: /*[[@{/status/ssosessions/destroySsoSessions}]]*/,
single: /*[[@{/status/ssosessions/destroySsoSession}]]*/
},
getSessions: /*[[@{/status/ssosessions/getSsoSessions}]]*/
};
function jqueryReady() {
head.load(
/*[[@{/js/ssosessions.js}]]*/
);
}
</script>
<div class="ssoSessions">
<div id="loadingMessage"><h3 th:text="#{cas.ssosessions.loading}"/></div>
<div id="no-cas-sessions">
<h3 th:text="#{cas.ssosessions.nosessionsfound}"/>
<p/>
</div>
<div id="cas-sessions">
<div id="alertWrapper"></div>
<div class="card">
<div class="card-header">
<h4 th:text="#{cas.ssosessions.report.pagetitle}"><span class="glyphicon glyphicon-stats"
aria-hidden="true"/></h4>
</div>
<div class="card-body">
<div id="session-counts" class="container-fluid">
<div class="row adminPanels">
<div class="col-lg-3 col-md-6">
<div class="card text-white bg-info">
<div class="card-header">
<div class="row">
<div class="col-xs-3">
<i class="fas fa-users fa-4x"></i>
</div>
<div class="col-xs-9 text-right">
<div class="huge" id="totalUsers">0</div>
<div th:text="#{cas.ssosessions.report.panel.totalactiveprincipals}"/>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="card text-white bg-success">
<div class="card-header">
<div class="row">
<div class="col-xs-3">
<i class="fas fa-tasks fa-4x"></i>
</div>
<div class="col-xs-9 text-right">
<div class="huge" id="totalUsageSessions">0</div>
<div th:text="#{cas.ssosessions.report.panel.usagecountsessions}"/>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-3 col-md-6">
<div class="card text-white bg-warning">
<div class="card-header">
<div class="row">
<div class="col-xs-3">
<i class="fas fa-ticket-alt fa-4x"></i>
</div>
<div class="col-xs-9 text-right">
<div class="huge" id="totalTGTs">0</div>
<div th:text="#{cas.ssosessions.report.panel.totalssosessions}"/>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container-fluid">
<div class="row">
<div class="col">
<button id="removeAllSessionsButton" class="btn btn-sm btn-danger" type="button"
value="ALL"
th:text="#{cas.ssosessions.buttons.removeall}"/>
</div>
<div class="col text-right">
<div id="filterButtons" class="btn-group btn-group-sm btn-group-toggle" data-toggle="buttons">
<label class="btn btn-light active" data-filter="all">
<input type="radio" name="options" id="optionAll" autocomplete="off"
th:text="#{cas.ssosessions.buttons.filter.all}"/>
</label>
<label class="btn btn-light" data-filter="proxied">
<input type="radio" name="options" id="optionProxied" autocomplete="off"
th:text="#{cas.ssosessions.buttons.filter.proxied}"/>
</label>
<label class="btn btn-light" data-filter="non-proxied">
<input type="radio" name="options" id="optionDirect" autocomplete="off"
th:text="#{cas.ssosessions.buttons.filter.nonproxied}"/>
</label>
</div>
</div>
</div>
</div>
<div id="container-stable" class="container-fluid">
<div id="msg" style="display:none"></div>
<table id="ssoSessions" class="table table-striped table-bordered">
<thead>
<tr>
<th>&nbsp;</th>
<th>&nbsp;</th>
<th th:text="#{cas.ssosessions.table.header.principal}"/>
<th th:text="#{cas.ssosessions.table.header.ticketgrantingticket}"/>
<th th:text="#{cas.ssosessions.table.header.authenticationdate}"/>
<th th:text="#{cas.ssosessions.table.header.usagecount}"/>
<th>&nbsp;</th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
<td>User</td>
<td>TGT</td>
<td>Auth_Date</td>
<td>Usage_Count</td>
<td></td>
</tr>
</tbody>
</table>
<hr/>
</div>
</div>
</div>
</div>
</div>
<div th:replace="monitoring/fragments/footerButtons"/>
</div>
</div>
</body>
</html>
@@ -0,0 +1,160 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{monitoring/layout}">
<head>
<title th:text="#{cas.statistics.pagetitle}"></title>
<script type="text/javascript" th:src="@{#{webjars.d3js.d3min.js}}"></script>
<script type="text/javascript" th:inline="javascript">
var messages = {
memoryGaugeTitle: /*[[#{cas.statistics.section.serverstatistics.freememorygauge.label}]]*/
};
var urls = {
availability: /*[[@{/status/stats/getAvailability}]]*/,
memory: /*[[@{/status/stats/getMemStats}]]*/,
tickets: /*[[@{/status/stats/getTicketStats}]]*/
};
function jqueryReady() {
head.load(
/*[[@{/js/statisticsview.js}]]*/
,
function () {
var server_uptime = upTime([[${upTime}]], 'uptime');
casStatistics(urls, messages);
}
);
};
</script>
</head>
<body>
<div layout:fragment="content">
<div id="loading" th:text="#{cas.statistics.loading}"></div>
<div class="statisticsView">
<h2 th:text="#{cas.statistics.pagetitle}">cas.statistics.pagetitle</h2>
<div class="section adminPanels">
<h3 th:text="#{cas.statistics.section.ticket.title}">cas.statistics.section.ticket.title</h3>
<div class="card-deck">
<div class="card" id="card-unexpired-tgts">
<div class="card-body">
<h4 class="card-title semi-huge"
th:text="#{cas.statistics.section.ticket.panel.unexpiredtgts.title}"></h4>
<p id="unexpiredTgts" class="card-text huge">--</p>
</div>
</div>
<div class="card" id="card-unexpired-sts">
<div class="card-body">
<h4 class="card-title semi-huge" th:text="#{cas.statistics.section.ticket.panel.unexpiredsts.title}"/>
<p id="unexpiredSts" class="card-text huge">--</p>
</div>
</div>
<div class="card" id="card-expired-tgts">
<div class="card-body">
<h4 class="card-title semi-huge" th:text="#{cas.statistics.section.ticket.panel.expiredtgts.title}"/>
<p id="expiredTgts" class="card-text huge">--</p>
</div>
</div>
<div class="card" id="card-expired-sts">
<div class="card-body">
<h4 class="card-title semi-huge" th:text="#{cas.statistics.section.ticket.panel.expiredsts.title}"/>
<p id="expiredSts" class="card-text huge">--</p>
</div>
</div>
</div>
</div>
<section class="runtimePanels">
<h3 th:text="#{cas.statistics.section.serverstatistics.title}"></h3>
<div class="row">
<div class="col-md-4">
<div class="text-center">
<div class="section" id="memoryUsageWrapper">
<div id="memoryGauge"></div>
</div>
<div id="maxMemoryWrapper">
<div id="maxMemoryGauge"></div>
</div>
</div>
</div>
<div class="col-md-8">
<div id="card-uptime" class="card">
<div class="card-header">
<div class="row">
<div class="col-auto mr-auto">
<i class="far fa-clock fa-4x"></i>
</div>
<div class="col-auto text-right">
<div class="huge" th:text="#{cas.statistics.section.serverstatistics.panel.uptime.title}"></div>
<div id="uptime"></div>
</div>
</div>
</div>
</div>
<div id="card-server-info" class="card">
<div class="card-header d-flex">
<div class="fas fa-server fa-4x"></div>
<div class="ml-auto huge" th:text="#{cas.statistics.section.serverstatistics.panel.serverinfo.title}"></div>
</div>
<div class="card-body">
<table class="table table-striped">
<thead>
<tr>
<th class="w-25"
th:text="#{cas.statistics.section.serverstatistics.panel.serverinfo.table.property.label}"/>
<th class="w-75"
th:text="#{cas.statistics.section.serverstatistics.panel.serverinfo.table.value.label}"/>
</tr>
</thead>
<tbody>
<tr>
<td th:text="#{cas.statistics.section.serverstatistics.panel.serverinfo.table.property.server.label}"/>
<td th:text="${#httpServletRequest.getServerName() + '-' + #httpServletRequest.getLocalAddr()}"/>
</tr>
<tr th:if="${casTicketSuffix}">
<td th:text="#{cas.statistics.section.serverstatistics.panel.serverinfo.table.property.casticketsuffix.label}"/>
<td th:text="${casTicketSuffix}"/>
</tr>
<tr>
<td th:text="#{cas.statistics.section.serverstatistics.panel.serverinfo.table.property.starttime.label}"/>
<td th:text="${startTime}"/>
</tr>
<tr>
<td th:text="#{cas.statistics.section.serverstatistics.panel.serverinfo.table.property.memory.label}"/>
<td><span id="freeMemory" th:text="${freeMemory}"/> MB
<span th:text="#{cas.statistics.section.serverstatistics.panel.serverinfo.table.property.free}"/>
<br/>
<span id="totalMemory" th:text="${totalMemory}"/> MB
<span th:text="#{cas.statistics.section.serverstatistics.panel.serverinfo.table.property.total}"/>
</td>
</tr>
<tr>
<td th:text="#{cas.statistics.section.serverstatistics.panel.serverinfo.table.property.maxmemory.label}"/>
<td>
<span id="maxMemory" th:text="${maxMemory}"/> MB
</td>
</tr>
<tr>
<td th:text="#{cas.statistics.section.serverstatistics.panel.serverinfo.table.property.availprocessors.label}"/>
<td id="availableProcessors" th:text="${availableProcessors}"/>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</section>
<div th:replace="monitoring/fragments/footerButtons"/>
</div>
</div>
</body>
</html>
@@ -0,0 +1,67 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{monitoring/layout}">
<head>
<title>Trusted Devices</title>
<script th:inline="javascript">
/*<![CDATA[*/
var urls = {
getRecords: /*[[@{/status/trustedDevs/getRecords}]]*/ ,
revokeRecord: /*[[@{/status/trustedDevs/revokeRecord}]]*/
};
/*]]>*/
</script>
<script type="text/javascript" th:inline="javascript">
function jqueryReady() {
head.load(
/*[[@{/css/trustedDevices.css}]]*/
);
head.load(
/*[[@{/js/trustedDevices.js}]]*/
);
}
</script>
</head>
<body id="cas">
<div layout:fragment="content">
<div id="trustedDevices">
<h1>Manage Trusted Devices</h1>
<div class="tabsContainer row">
<!-- Nav tabs -->
<ul id="myTabs" class="nav nav-tabs" role="tablist">
<li role="presentation" class="nav-item"><a class="nav-link active" href="#trustedDevices" aria-controls="trustedDevices" role="tab"
data-toggle="tab">Trusted Devices</a></li>
</ul>
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="trustedDevicesTab">
<table id="trustedDevicesTable" class="table table-striped table-bordered">
<thead>
<tr>
<th>Name</th>
<th>Principal</th>
<th>Date</th>
<th>Geography</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
<div th:replace="monitoring/fragments/footerButtons"/>
</div>
</div>
</body>
</html>
@@ -0,0 +1,3 @@
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas' th:inline="text">
<cas:proxyFailure th:attr="code=${code}">[[${description}]]</cas:proxyFailure>
</cas:serviceResponse>
@@ -0,0 +1,5 @@
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas' th:inline="text">
<cas:proxySuccess>
<cas:proxyTicket>[[${ticket}]]</cas:proxyTicket>
</cas:proxySuccess>
</cas:serviceResponse>
@@ -0,0 +1,3 @@
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas' th:inline="text">
<cas:authenticationFailure th:attr="code=${code}">[[${description}]]</cas:authenticationFailure>
</cas:serviceResponse>
@@ -0,0 +1,9 @@
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas' th:inline="text">
<cas:authenticationSuccess>
<cas:user>[[${principal.id}]]</cas:user>
<cas:proxyGrantingTicket th:if="${pgtIou}">[[${pgtIou}]]</cas:proxyGrantingTicket>
<cas:proxies th:if="${not #lists.isEmpty(chainedAuthentications)}">
<cas:proxy th:each="proxy : ${chainedAuthentications}">[[${proxy.principal.id}]]</cas:proxy>
</cas:proxies>
</cas:authenticationSuccess>
</cas:serviceResponse>
@@ -0,0 +1,3 @@
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas' th:inline="text">
<cas:authenticationFailure th:attr="code=${code}">[[${description}]]</cas:authenticationFailure>
</cas:serviceResponse>
@@ -0,0 +1,14 @@
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
<cas:authenticationSuccess>
<cas:user th:text="${principal.id}"/>
<cas:proxyGrantingTicket th:if="${pgtIou}" th:text="${pgtIou}"/>
<cas:proxies th:if="${not #lists.isEmpty(chainedAuthentications)}">
<cas:proxy th:each="proxy : ${chainedAuthentications}" th:text="${proxy.principal.id}"/>
</cas:proxies>
<cas:attributes th:if="${not #lists.isEmpty(formattedAttributes)}">
<div th:each="attr : ${formattedAttributes}" th:remove="tag">
<div th:utext="${attr}" th:remove="tag"/>
</div>
</cas:attributes>
</cas:authenticationSuccess>
</cas:serviceResponse>
@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<body onload="document.acsForm.submit();" style="display:none">
<form name="acsForm" th:action="${originalUrl}" method="post">
<span th:each="entry : ${parameters}" th:remove="tag">
<input type="hidden" th:name="${entry.key}" th:value="${entry.value}"/>
</span>
<noscript>
<p th:text="#{screen.post.response.message(${originalUrl})}"/>
<p><input type="submit" th:value="#{screen.button.continue}"/></p>
</noscript>
</form>
</body>
</html>
@@ -0,0 +1,21 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<title th:text="#{cas.oauth.confirm.pagetitle}"></title>
</head>
<body id="cas">
<div layout:fragment="content">
<div class="alert alert-success">
<h2 th:text="#{screen.oauth.confirm.header}"/>
<p th:text="#{screen.oauth.confirm.message(${serviceName})}"/>
<p>
<a class="btn btn-submit" id="allow" name="allow"
th:href="@{${callbackUrl}}"
th:text="#{screen.oauth.confirm.allow}"/>
</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,64 @@
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout}">
<head>
<title th:text="#{cas.oauth.confirm.pagetitle}"></title>
</head>
<body id="cas">
<div layout:fragment="content">
<div class="alert alert-success">
<h1 th:text="#{screen.oauth.confirm.header}"/>
<div align="middle">
<img th:src="${service.logo}" th:if="${service.logo}"/>
<p th:text="${service.description}" />
</div>
<div th:if="${dynamic}">
<div class="alert alert-warning fade in" role="alert">
<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
<strong th:utext="#{screen.oidc.confirm.dynamic(${dynamicTime})}"/>
</div>
</div>
<div th:unless="${#sets.isEmpty(scopes)}">
<p th:text="#{screen.oidc.confirm.asksinfo}"/>
<span th:each="scope : ${scopes}">
<div>
<span class="glyphicon glyphicon-cog" aria-hidden="true"></span>
<strong><code th:text="${scope}"/></strong>
<p th:text="#{screen.oidc.confirm.scope.__${scope}__}"/>
</div>
</span>
<div th:if="${service.informationUrl}">
<span class="glyphicon glyphicon-comment" aria-hidden="true"></span>
<a th:href="${service.informationUrl}" th:text="#{screen.oidc.confirm.infourl(${serviceName})}"/>
</div>
<div th:if="${service.privacyUrl}">
<span class="glyphicon glyphicon-eye-open" aria-hidden="true"></span>
<a th:href="${service.privacyUrl}" th:utext="#{screen.oidc.confirm.privacyurl(${serviceName})}"/>
</div>
<br/>
</div>
<strong>
<h4 th:text="#{screen.oauth.confirm.message(${serviceName})}"/>
</strong>
<p>
<a class="btn btn-submit" id="allow" name="allow"
th:href="@{${callbackUrl}}"
th:utext="#{screen.oauth.confirm.allow}"/>
<a th:if="${deniedApprovalUrl}"
class="btn btn-danger" id="deny" name="deny"
th:href="@{${deniedApprovalUrl}}"
th:utext="#{screen.oauth.confirm.deny}"/>
</p>
</div>
</div>
</body>
</html>
@@ -0,0 +1,7 @@
ns:[(${ns})]
enc_mac_key:[(${enc_mac_key})]
assoc_type:[(${assoc_type})]
dh_server_public:[(${dh_server_public})]
session_type:[(${session_type})]
expires_in:[(${expires_in})]
assoc_handle:[(${assoc_handle})]
@@ -0,0 +1,6 @@
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="X-XRDS-Location" th:content="${openid_server + '/yadis.xml'}" />
</head>
</html>