diff --git a/guacamole/src/main/java/org/apache/guacamole/rest/connection/APIConnection.java b/guacamole/src/main/java/org/apache/guacamole/rest/connection/APIConnection.java index 8e6a385f4..e402e67a9 100644 --- a/guacamole/src/main/java/org/apache/guacamole/rest/connection/APIConnection.java +++ b/guacamole/src/main/java/org/apache/guacamole/rest/connection/APIConnection.java @@ -20,6 +20,7 @@ package org.apache.guacamole.rest.connection; import java.util.Collection; +import java.util.Date; import java.util.Map; import org.codehaus.jackson.annotate.JsonIgnoreProperties; import org.codehaus.jackson.map.annotate.JsonSerialize; @@ -75,7 +76,13 @@ public class APIConnection { * The count of currently active connections using this connection. */ private int activeConnections; - + + /** + * The date and time that this connection was last used, or null if this + * connection has never been used or this information is unavailable. + */ + private Date lastActive; + /** * Create an empty APIConnection. */ @@ -97,6 +104,7 @@ public class APIConnection { this.identifier = connection.getIdentifier(); this.parentIdentifier = connection.getParentIdentifier(); this.activeConnections = connection.getActiveConnections(); + this.lastActive = connection.getLastActive(); // Set protocol from configuration GuacamoleConfiguration configuration = connection.getConfiguration(); @@ -257,4 +265,27 @@ public class APIConnection { this.sharingProfiles = sharingProfiles; } + /** + * Returns the date and time that this connection was last used, or null if + * this connection has never been used or this information is unavailable. + * + * @return + * The date and time that this connection was last used, or null if this + * connection has never been used or this information is unavailable. + */ + public Date getLastActive() { + return lastActive; + } + + /** + * Sets the date and time that this connection was last used. + * + * @param lastActive + * The date and time that this connection was last used, or null if this + * connection has never been used or this information is unavailable. + */ + public void setLastActive(Date lastActive) { + this.lastActive = lastActive; + } + } diff --git a/guacamole/src/main/java/org/apache/guacamole/rest/user/APIUser.java b/guacamole/src/main/java/org/apache/guacamole/rest/user/APIUser.java index 96e223040..e71b5d278 100644 --- a/guacamole/src/main/java/org/apache/guacamole/rest/user/APIUser.java +++ b/guacamole/src/main/java/org/apache/guacamole/rest/user/APIUser.java @@ -19,6 +19,7 @@ package org.apache.guacamole.rest.user; +import java.util.Date; import java.util.Map; import org.codehaus.jackson.annotate.JsonIgnoreProperties; import org.codehaus.jackson.map.annotate.JsonSerialize; @@ -46,6 +47,12 @@ public class APIUser { */ private Map attributes; + /** + * The date and time that this user was last logged in, or null if this user + * has never logged in or this information is unavailable. + */ + private Date lastActive; + /** * Construct a new empty APIUser. */ @@ -60,6 +67,7 @@ public class APIUser { // Set user information this.username = user.getIdentifier(); this.password = user.getPassword(); + this.lastActive = user.getLastActive(); // Associate any attributes this.attributes = user.getAttributes(); @@ -122,4 +130,27 @@ public class APIUser { this.attributes = attributes; } + /** + * Returns the date and time that this user was last logged in, or null if + * this user has never logged in or this information is unavailable. + * + * @return + * The date and time that this user was last logged in, or null if this + * user has never logged in or this information is unavailable. + */ + public Date getLastActive() { + return lastActive; + } + + /** + * Sets the date and time that this user was last logged in. + * + * @param lastActive + * The date and time that this user was last logged in, or null if this + * user has never logged in or this information is unavailable. + */ + public void setLastActive(Date lastActive) { + this.lastActive = lastActive; + } + } diff --git a/guacamole/src/main/webapp/app/rest/types/Connection.js b/guacamole/src/main/webapp/app/rest/types/Connection.js index b4639b23a..52da6b7e2 100644 --- a/guacamole/src/main/webapp/app/rest/types/Connection.js +++ b/guacamole/src/main/webapp/app/rest/types/Connection.js @@ -104,6 +104,15 @@ angular.module('rest').factory('Connection', [function defineConnection() { */ this.sharingProfiles = template.sharingProfiles; + /** + * The time that this connection was last used, in seconds since + * 1970-01-01 00:00:00 UTC. If this information is unknown or + * unavailable, this will be null. + * + * @type Number + */ + this.lastActive = template.lastActive; + }; return Connection; diff --git a/guacamole/src/main/webapp/app/rest/types/User.js b/guacamole/src/main/webapp/app/rest/types/User.js index 9edd1f258..d0a96cc3e 100644 --- a/guacamole/src/main/webapp/app/rest/types/User.js +++ b/guacamole/src/main/webapp/app/rest/types/User.js @@ -53,6 +53,15 @@ angular.module('rest').factory('User', [function defineUser() { */ this.password = template.password; + /** + * The time that this user was last logged in, in seconds since + * 1970-01-01 00:00:00 UTC. If this information is unknown or + * unavailable, this will be null. + * + * @type Number + */ + this.lastActive = template.lastActive; + /** * Arbitrary name/value pairs which further describe this user. The * semantics and validity of these attributes are dictated by the