From 3cd7f453c0a9ba8abd69c76cce8da8a917c0021e Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 11 Sep 2017 18:49:11 -0700 Subject: [PATCH] GUACAMOLE-394: Add getLastActive() function, returning the time that a user/connection was last logged-in / used. --- .../auth/jdbc/connection/ModeledConnection.java | 6 ++++++ .../jdbc/sharing/connection/SharedConnection.java | 6 ++++++ .../auth/jdbc/sharing/user/SharedUser.java | 9 +++++++++ .../guacamole/auth/jdbc/user/ModeledUser.java | 5 +++++ .../org/apache/guacamole/net/auth/Connection.java | 13 +++++++++++++ .../java/org/apache/guacamole/net/auth/User.java | 12 ++++++++++++ .../guacamole/net/auth/simple/SimpleConnection.java | 6 ++++++ .../guacamole/net/auth/simple/SimpleUser.java | 6 ++++++ .../rest/connection/APIConnectionWrapper.java | 6 ++++++ .../apache/guacamole/rest/user/APIUserWrapper.java | 6 ++++++ 10 files changed, 75 insertions(+) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ModeledConnection.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ModeledConnection.java index 365c40dc5..c596b2771 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ModeledConnection.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ModeledConnection.java @@ -24,6 +24,7 @@ import com.google.inject.Provider; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -232,6 +233,11 @@ public class ModeledConnection extends ModeledChildDirectoryObject getHistory() throws GuacamoleException { return connectionService.retrieveHistory(getCurrentUser(), this); diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/sharing/connection/SharedConnection.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/sharing/connection/SharedConnection.java index 1c955dbd8..5483d0267 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/sharing/connection/SharedConnection.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/sharing/connection/SharedConnection.java @@ -21,6 +21,7 @@ package org.apache.guacamole.auth.jdbc.sharing.connection; import com.google.inject.Inject; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; @@ -146,6 +147,11 @@ public class SharedConnection implements Connection { // Do nothing - changing attributes not supported } + @Override + public Date getLastActive() { + return null; + } + @Override public List getHistory() throws GuacamoleException { diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/sharing/user/SharedUser.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/sharing/user/SharedUser.java index 07d762a4b..8e7931d86 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/sharing/user/SharedUser.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/sharing/user/SharedUser.java @@ -20,6 +20,7 @@ package org.apache.guacamole.auth.jdbc.sharing.user; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.Map; import org.apache.guacamole.GuacamoleException; @@ -90,6 +91,14 @@ public class SharedUser implements User { // Do nothing - no attributes supported } + @Override + public Date getLastActive() { + + // History is not recorded for shared users + return null; + + } + @Override public List getHistory() throws GuacamoleException { diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/ModeledUser.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/ModeledUser.java index 1d40c1f05..fc43e36b1 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/ModeledUser.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/ModeledUser.java @@ -794,6 +794,11 @@ public class ModeledUser extends ModeledDirectoryObject implements Us return getModel().isExpired(); } + @Override + public Date getLastActive() { + return null; + } + @Override public List getHistory() throws GuacamoleException { return Collections.emptyList(); diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/Connection.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/Connection.java index b0795e2a1..85fd1680d 100644 --- a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/Connection.java +++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/Connection.java @@ -19,6 +19,7 @@ package org.apache.guacamole.net.auth; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; @@ -102,6 +103,18 @@ public interface Connection extends Identifiable, Connectable { */ void setAttributes(Map attributes); + /** + * Returns the date and time that this connection was last used. If the + * connection was never used, the time that the connection was last used is + * unknown, or this information is not visible to the current user, this + * may be null. + * + * @return + * The date and time this connection was last used, or null if this + * information is unavailable or inapplicable. + */ + Date getLastActive(); + /** * Returns a list of ConnectionRecords representing the usage history * of this Connection, including any active users. ConnectionRecords diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/User.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/User.java index 43d57c0b7..f7bd61ca2 100644 --- a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/User.java +++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/User.java @@ -19,6 +19,7 @@ package org.apache.guacamole.net.auth; +import java.util.Date; import java.util.List; import java.util.Map; import org.apache.guacamole.GuacamoleException; @@ -101,6 +102,17 @@ public interface User extends Identifiable { */ void setAttributes(Map attributes); + /** + * Returns the date and time that this user was last active. If the user + * was never active, the time that the user was last active is unknown, or + * this information is not visible to the current user, this may be null. + * + * @return + * The date and time this user was last active, or null if this + * information is unavailable or inapplicable. + */ + Date getLastActive(); + /** * Returns a list of ActivityRecords representing the login history * of this user, including any active sessions. ActivityRecords diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleConnection.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleConnection.java index 2251a9edf..85783a0a4 100644 --- a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleConnection.java +++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleConnection.java @@ -20,6 +20,7 @@ package org.apache.guacamole.net.auth.simple; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.Map; import org.apache.guacamole.GuacamoleException; @@ -136,6 +137,11 @@ public class SimpleConnection extends AbstractConnection { } + @Override + public Date getLastActive() { + return null; + } + @Override public List getHistory() throws GuacamoleException { return Collections.emptyList(); diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleUser.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleUser.java index cd20f3961..19ed35731 100644 --- a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleUser.java +++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/simple/SimpleUser.java @@ -21,6 +21,7 @@ package org.apache.guacamole.net.auth.simple; import java.util.Collection; import java.util.Collections; +import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -165,6 +166,11 @@ public class SimpleUser extends AbstractUser { // Do nothing - there are no attributes } + @Override + public Date getLastActive() { + return null; + } + @Override public List getHistory() throws GuacamoleException { return Collections.emptyList(); diff --git a/guacamole/src/main/java/org/apache/guacamole/rest/connection/APIConnectionWrapper.java b/guacamole/src/main/java/org/apache/guacamole/rest/connection/APIConnectionWrapper.java index e06e338db..3a987e544 100644 --- a/guacamole/src/main/java/org/apache/guacamole/rest/connection/APIConnectionWrapper.java +++ b/guacamole/src/main/java/org/apache/guacamole/rest/connection/APIConnectionWrapper.java @@ -20,6 +20,7 @@ package org.apache.guacamole.rest.connection; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; @@ -131,6 +132,11 @@ public class APIConnectionWrapper implements Connection { throw new UnsupportedOperationException("Operation not supported."); } + @Override + public Date getLastActive() { + return null; + } + @Override public List getHistory() throws GuacamoleException { return Collections.emptyList(); diff --git a/guacamole/src/main/java/org/apache/guacamole/rest/user/APIUserWrapper.java b/guacamole/src/main/java/org/apache/guacamole/rest/user/APIUserWrapper.java index 7f37be67c..c4b85f9ae 100644 --- a/guacamole/src/main/java/org/apache/guacamole/rest/user/APIUserWrapper.java +++ b/guacamole/src/main/java/org/apache/guacamole/rest/user/APIUserWrapper.java @@ -20,6 +20,7 @@ package org.apache.guacamole.rest.user; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.Map; import org.apache.guacamole.GuacamoleException; @@ -115,6 +116,11 @@ public class APIUserWrapper implements User { throw new GuacamoleUnsupportedException("APIUserWrapper does not provide permission access."); } + @Override + public Date getLastActive() { + return null; + } + @Override public List getHistory() throws GuacamoleException { return Collections.emptyList();