keycloak-memoizeit
Changes
forms/account-freemarker/src/main/java/org/keycloak/account/freemarker/model/SessionsBean.java 4(+4 -0)
forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/applications.js 24(+14 -10)
Details
diff --git a/core/src/main/java/org/keycloak/representations/idm/UserSessionRepresentation.java b/core/src/main/java/org/keycloak/representations/idm/UserSessionRepresentation.java
index b3f3c5a..3987955 100755
--- a/core/src/main/java/org/keycloak/representations/idm/UserSessionRepresentation.java
+++ b/core/src/main/java/org/keycloak/representations/idm/UserSessionRepresentation.java
@@ -14,6 +14,7 @@ public class UserSessionRepresentation {
private String user;
private String ipAddress;
private long start;
+ private long lastAccess;
private Set<String> applications = new HashSet<String>();
private Map<String, String> clients = new HashMap<String, String>();
@@ -49,6 +50,14 @@ public class UserSessionRepresentation {
this.start = start;
}
+ public long getLastAccess() {
+ return lastAccess;
+ }
+
+ public void setLastAccess(long lastAccess) {
+ this.lastAccess = lastAccess;
+ }
+
public Set<String> getApplications() {
return applications;
}
diff --git a/forms/account-freemarker/src/main/java/org/keycloak/account/freemarker/model/SessionsBean.java b/forms/account-freemarker/src/main/java/org/keycloak/account/freemarker/model/SessionsBean.java
index 194b983..403512f 100755
--- a/forms/account-freemarker/src/main/java/org/keycloak/account/freemarker/model/SessionsBean.java
+++ b/forms/account-freemarker/src/main/java/org/keycloak/account/freemarker/model/SessionsBean.java
@@ -49,6 +49,10 @@ public class SessionsBean {
return Time.toDate(session.getStarted());
}
+ public Date getLastAccess() {
+ return Time.toDate(session.getLastSessionRefresh());
+ }
+
public Date getExpires() {
int max = session.getStarted() + realm.getSsoSessionMaxLifespan();
return Time.toDate(max);
diff --git a/forms/common-themes/src/main/resources/theme/account/base/sessions.ftl b/forms/common-themes/src/main/resources/theme/account/base/sessions.ftl
index 5c9879b..ce5ed96 100755
--- a/forms/common-themes/src/main/resources/theme/account/base/sessions.ftl
+++ b/forms/common-themes/src/main/resources/theme/account/base/sessions.ftl
@@ -12,6 +12,7 @@
<tr>
<td>IP</td>
<td>Started</td>
+ <td>Last Access</td>
<td>Expires</td>
<td>Applications</td>
<td>Clients</td>
@@ -23,6 +24,7 @@
<tr>
<td>${session.ipAddress}</td>
<td>${session.started?datetime}</td>
+ <td>${session.lastAccess?datetime}</td>
<td>${session.expires?datetime}</td>
<td>
<ul style="list-style: none; ">
diff --git a/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/applications.js b/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/applications.js
index ef54e1e..5f4f6b2 100755
--- a/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/applications.js
+++ b/forms/common-themes/src/main/resources/theme/admin/base/resources/js/controllers/applications.js
@@ -264,16 +264,20 @@ module.controller('ApplicationDetailCtrl', function($scope, realm, application,
$scope.save = function() {
if ($scope.create) {
- Application.save({
- realm: realm.realm,
- application: ''
- }, $scope.application, function (data, headers) {
- $scope.changed = false;
- var l = headers().location;
- var id = l.substring(l.lastIndexOf("/") + 1);
- $location.url("/realms/" + realm.realm + "/applications/" + id);
- Notifications.success("The application has been created.");
- });
+ if (!$scope.application.redirectUris || $scope.application.redirectUris.length == 0) {
+ Notifications.error("You must specify at least one redirect uri");
+ } else {
+ Application.save({
+ realm: realm.realm,
+ application: ''
+ }, $scope.application, function (data, headers) {
+ $scope.changed = false;
+ var l = headers().location;
+ var id = l.substring(l.lastIndexOf("/") + 1);
+ $location.url("/realms/" + realm.realm + "/applications/" + id);
+ Notifications.success("The application has been created.");
+ });
+ }
} else {
Application.update({
realm : realm.realm,
diff --git a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-sessions.html b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-sessions.html
index cb84ccb..844efc0 100755
--- a/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-sessions.html
+++ b/forms/common-themes/src/main/resources/theme/admin/base/resources/partials/user-sessions.html
@@ -18,7 +18,7 @@
<table class="table table-striped table-bordered">
<thead>
<tr>
- <th class="kc-table-actions" colspan="5">
+ <th class="kc-table-actions" colspan="6">
<div class="pull-right">
<a class="btn btn-primary" ng-click="logoutAll()">Logout All Sessions</a>
</div>
@@ -26,7 +26,8 @@
</tr>
<tr>
<th>IP Address</th>
- <th>Login Time</th>
+ <th>Started</th>
+ <th>Last Access</th>
<th>Applications</th>
<th>OAuth Clients</th>
<th>Action</th>
@@ -36,6 +37,7 @@
<tr data-ng-repeat="session in sessions">
<td>{{session.ipAddress}}</td>
<td>{{session.start | date:'medium'}}</td>
+ <td>{{session.lastAccess | date:'medium'}}</td>
<td><ul style="list-style: none; ">
<li data-ng-repeat="app in session.applications">
<a href="#/realms/{{realm.realm}}/applications/{{app}}/sessions">{{app}}</a>
diff --git a/services/src/main/java/org/keycloak/services/managers/ModelToRepresentation.java b/services/src/main/java/org/keycloak/services/managers/ModelToRepresentation.java
index c2d4ea6..1f4665c 100755
--- a/services/src/main/java/org/keycloak/services/managers/ModelToRepresentation.java
+++ b/services/src/main/java/org/keycloak/services/managers/ModelToRepresentation.java
@@ -186,7 +186,8 @@ public class ModelToRepresentation {
public static UserSessionRepresentation toRepresentation(UserSessionModel session) {
UserSessionRepresentation rep = new UserSessionRepresentation();
rep.setId(session.getId());
- rep.setStart(((long)session.getStarted()) * 1000);
+ rep.setStart(((long)session.getStarted()) * 1000L);
+ rep.setLastAccess(((long)session.getLastSessionRefresh())* 1000L);
rep.setUser(session.getUser().getLoginName());
rep.setIpAddress(session.getIpAddress());
for (ClientModel client : session.getClientAssociations()) {