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 57120ea1c..07d762a4b 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,9 +20,11 @@ package org.apache.guacamole.auth.jdbc.sharing.user; import java.util.Collections; +import java.util.List; import java.util.Map; import org.apache.guacamole.GuacamoleException; import org.apache.guacamole.auth.jdbc.sharing.permission.SharedObjectPermissionSet; +import org.apache.guacamole.net.auth.ActivityRecord; import org.apache.guacamole.net.auth.AuthenticatedUser; import org.apache.guacamole.net.auth.Connection; import org.apache.guacamole.net.auth.ConnectionGroup; @@ -88,6 +90,14 @@ public class SharedUser implements User { // Do nothing - no attributes supported } + @Override + public List getHistory() throws GuacamoleException { + + // History is not recorded for shared users + return Collections.emptyList(); + + } + @Override public String getPassword() { return null; 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 36a0be878..1d40c1f05 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 @@ -29,6 +29,7 @@ import java.util.Calendar; import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.TimeZone; import org.apache.guacamole.auth.jdbc.base.ModeledDirectoryObject; @@ -49,6 +50,7 @@ import org.apache.guacamole.form.Form; import org.apache.guacamole.form.TextField; import org.apache.guacamole.form.TimeField; import org.apache.guacamole.form.TimeZoneField; +import org.apache.guacamole.net.auth.ActivityRecord; import org.apache.guacamole.net.auth.User; import org.apache.guacamole.net.auth.permission.ObjectPermissionSet; import org.apache.guacamole.net.auth.permission.SystemPermission; @@ -792,4 +794,9 @@ public class ModeledUser extends ModeledDirectoryObject implements Us return getModel().isExpired(); } + @Override + public List getHistory() throws GuacamoleException { + return Collections.emptyList(); + } + } 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 88756e495..43d57c0b7 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.List; import java.util.Map; import org.apache.guacamole.GuacamoleException; import org.apache.guacamole.net.auth.permission.ObjectPermissionSet; @@ -100,6 +101,23 @@ public interface User extends Identifiable { */ void setAttributes(Map attributes); + /** + * Returns a list of ActivityRecords representing the login history + * of this user, including any active sessions. ActivityRecords + * in this list will be sorted in descending order of end time (active + * sessions are first), and then in descending order of start time + * (newer sessions are first). + * + * @return + * A list of ActivityRecords representing the login history of this + * User. + * + * @throws GuacamoleException + * If an error occurs while reading the history of this user, or if + * permission is denied. + */ + List getHistory() throws GuacamoleException; + /** * Returns all system-level permissions given to this user. * 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 d6db92fa5..cd20f3961 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 @@ -22,10 +22,12 @@ package org.apache.guacamole.net.auth.simple; import java.util.Collection; import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; import org.apache.guacamole.GuacamoleException; import org.apache.guacamole.net.auth.AbstractUser; +import org.apache.guacamole.net.auth.ActivityRecord; import org.apache.guacamole.net.auth.permission.ObjectPermission; import org.apache.guacamole.net.auth.permission.ObjectPermissionSet; import org.apache.guacamole.net.auth.permission.SystemPermissionSet; @@ -163,6 +165,11 @@ public class SimpleUser extends AbstractUser { // Do nothing - there are no attributes } + @Override + public List getHistory() throws GuacamoleException { + return Collections.emptyList(); + } + @Override public SystemPermissionSet getSystemPermissions() throws GuacamoleException { 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 35769faa7..7f37be67c 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 @@ -19,9 +19,12 @@ package org.apache.guacamole.rest.user; +import java.util.Collections; +import java.util.List; import java.util.Map; import org.apache.guacamole.GuacamoleException; import org.apache.guacamole.GuacamoleUnsupportedException; +import org.apache.guacamole.net.auth.ActivityRecord; import org.apache.guacamole.net.auth.User; import org.apache.guacamole.net.auth.permission.ObjectPermissionSet; import org.apache.guacamole.net.auth.permission.SystemPermissionSet; @@ -112,4 +115,9 @@ public class APIUserWrapper implements User { throw new GuacamoleUnsupportedException("APIUserWrapper does not provide permission access."); } + @Override + public List getHistory() throws GuacamoleException { + return Collections.emptyList(); + } + }