From 8694bc802a753a9acd6950c5c7d88843df886cdc Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Tue, 12 Sep 2017 13:07:15 -0700 Subject: [PATCH] GUACAMOLE-394: Determine last active date for users based on history table. --- .../guacamole/auth/jdbc/user/ModeledUser.java | 2 +- .../guacamole/auth/jdbc/user/UserModel.java | 32 +++++++++++++++++++ .../guacamole/auth/jdbc/user/UserMapper.xml | 32 ++++++++++++------- .../guacamole/auth/jdbc/user/UserMapper.xml | 32 ++++++++++++------- .../guacamole/auth/jdbc/user/UserMapper.xml | 32 ++++++++++++------- 5 files changed, 96 insertions(+), 34 deletions(-) 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 fc43e36b1..7d80facb9 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 @@ -796,7 +796,7 @@ public class ModeledUser extends ModeledDirectoryObject implements Us @Override public Date getLastActive() { - return null; + return getModel().getLastActive(); } @Override diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/UserModel.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/UserModel.java index afaeb5521..a4f9c7adf 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/UserModel.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/UserModel.java @@ -114,6 +114,12 @@ public class UserModel extends ObjectModel { */ private String organizationalRole; + /** + * The date and time that this user was last active, or null if this user + * has never logged in. + */ + private Date lastActive; + /** * Creates a new, empty user. */ @@ -465,4 +471,30 @@ public class UserModel extends ObjectModel { this.organizationalRole = organizationalRole; } + /** + * Returns the date and time that this user was last active, or null if + * this user has never logged in. + * + * @return + * The date and time that this user was last active, or null if this + * user has never logged in. + */ + public Date getLastActive() { + return lastActive; + } + + /** + * Sets the date and time that this user was last active. This value is + * expected to be set automatically via queries, derived from user history + * records. It does NOT correspond to an actual column, and values set + * manually through invoking this function will not persist. + * + * @param lastActive + * The date and time that this user was last active, or null if this + * user has never logged in. + */ + public void setLastActive(Date lastActive) { + this.lastActive = lastActive; + } + } diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml index 4ab11827d..c9e4f70db 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml @@ -41,6 +41,7 @@ + @@ -63,8 +64,8 @@ @@ -93,7 +97,7 @@ SELECT guacamole_user.user_id, - username, + guacamole_user.username, password_hash, password_salt, password_date, @@ -107,16 +111,19 @@ full_name, email_address, organization, - organizational_role + organizational_role, + MAX(start_date) AS last_active FROM guacamole_user JOIN guacamole_user_permission ON affected_user_id = guacamole_user.user_id - WHERE username IN + LEFT JOIN guacamole_user_history ON guacamole_user_history.user_id = guacamole_user.user_id + WHERE guacamole_user.username IN #{identifier,jdbcType=VARCHAR} AND guacamole_user_permission.user_id = #{user.objectID,jdbcType=INTEGER} AND permission = 'READ' + GROUP BY guacamole_user.user_id @@ -124,8 +131,8 @@ diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml index 569a8ac45..c106a8fab 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml @@ -41,6 +41,7 @@ + @@ -63,8 +64,8 @@ @@ -93,7 +97,7 @@ SELECT guacamole_user.user_id, - username, + guacamole_user.username, password_hash, password_salt, password_date, @@ -107,16 +111,19 @@ full_name, email_address, organization, - organizational_role + organizational_role, + MAX(start_date) AS last_active FROM guacamole_user JOIN guacamole_user_permission ON affected_user_id = guacamole_user.user_id - WHERE username IN + LEFT JOIN guacamole_user_history ON guacamole_user_history.user_id = guacamole_user.user_id + WHERE guacamole_user.username IN #{identifier,jdbcType=VARCHAR} AND guacamole_user_permission.user_id = #{user.objectID,jdbcType=INTEGER} AND permission = 'READ' + GROUP BY guacamole_user.user_id @@ -124,8 +131,8 @@ diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml index 6df6cf26d..ec6063296 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserMapper.xml @@ -41,6 +41,7 @@ + @@ -63,8 +64,8 @@ @@ -93,7 +97,7 @@ SELECT [guacamole_user].user_id, - username, + [guacamole_user].username, password_hash, password_salt, password_date, @@ -107,16 +111,19 @@ full_name, email_address, organization, - organizational_role + organizational_role, + MAX(start_date) AS last_active FROM [guacamole_user] JOIN [guacamole_user_permission] ON affected_user_id = [guacamole_user].user_id - WHERE username IN + LEFT JOIN [guacamole_user_history] ON [guacamole_user_history].user_id = [guacamole_user].user_id + WHERE [guacamole_user].username IN #{identifier,jdbcType=VARCHAR} AND [guacamole_user_permission].user_id = #{user.objectID,jdbcType=INTEGER} AND permission = 'READ' + GROUP BY [guacamole_user].user_id @@ -124,8 +131,8 @@