+163
@@ -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>
|
||||
+5
@@ -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>
|
||||
+4
@@ -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>
|
||||
+26
@@ -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">×</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>
|
||||
+30
@@ -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>
|
||||
|
||||
+54
@@ -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>
|
||||
+71
@@ -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>
|
||||
+106
@@ -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">×</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>
|
||||
+52
@@ -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>
|
||||
+199
@@ -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>
|
||||
+123
@@ -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>
|
||||
+164
@@ -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> </th>
|
||||
<th> </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> </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>
|
||||
+160
@@ -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>
|
||||
+67
@@ -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>
|
||||
Reference in New Issue
Block a user