mirror of
				https://github.com/gyurix1968/guacamole-client.git
				synced 2025-10-30 00:23:21 +00:00 
			
		
		
		
	GUACAMOLE-394: Automatically update the end time of user history records upon logout.
This commit is contained in:
		| @@ -27,6 +27,11 @@ import java.util.Date; | |||||||
|  */ |  */ | ||||||
| public class ActivityRecordModel { | public class ActivityRecordModel { | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * The ID of this object in the database, if any. | ||||||
|  |      */ | ||||||
|  |     private Integer recordID; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * The database ID of the user associated with this activity record. |      * The database ID of the user associated with this activity record. | ||||||
|      */ |      */ | ||||||
| @@ -53,6 +58,27 @@ public class ActivityRecordModel { | |||||||
|      */ |      */ | ||||||
|     private Date endDate; |     private Date endDate; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Returns the ID of this record in the database, if it exists. | ||||||
|  |      * | ||||||
|  |      * @return | ||||||
|  |      *     The ID of this record in the database, or null if this record was | ||||||
|  |      *     not retrieved from the database. | ||||||
|  |      */ | ||||||
|  |     public Integer getRecordID() { | ||||||
|  |         return recordID; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Sets the database ID of this record to the given value. | ||||||
|  |      * | ||||||
|  |      * @param recordID | ||||||
|  |      *     The ID to assign to this object. | ||||||
|  |      */ | ||||||
|  |     public void setRecordID(Integer recordID) { | ||||||
|  |         this.recordID = recordID; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Returns the database ID of the user associated with this activity |      * Returns the database ID of the user associated with this activity | ||||||
|      * record. |      * record. | ||||||
|   | |||||||
| @@ -231,7 +231,11 @@ public class ModeledUserContext extends RestrictedObject | |||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|     public void invalidate() { |     public void invalidate() { | ||||||
|         // Nothing to invalidate |  | ||||||
|  |         // Record logout time | ||||||
|  |         userRecord.setEndDate(new Date()); | ||||||
|  |         userRecordMapper.update(userRecord); | ||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -56,6 +56,17 @@ public interface UserRecordMapper { | |||||||
|      */ |      */ | ||||||
|     int insert(@Param("record") ActivityRecordModel record); |     int insert(@Param("record") ActivityRecordModel record); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Updates the given user login record. | ||||||
|  |      * | ||||||
|  |      * @param record | ||||||
|  |      *     The user login record to update. | ||||||
|  |      * | ||||||
|  |      * @return | ||||||
|  |      *     The number of rows updated. | ||||||
|  |      */ | ||||||
|  |     int update(@Param("record") ActivityRecordModel record); | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Searches for up to <code>limit</code> user login records that contain |      * Searches for up to <code>limit</code> user login records that contain | ||||||
|      * the given terms, sorted by the given predicates, regardless of whether |      * the given terms, sorted by the given predicates, regardless of whether | ||||||
|   | |||||||
| @@ -25,6 +25,7 @@ | |||||||
|  |  | ||||||
|     <!-- Result mapper for system permissions --> |     <!-- Result mapper for system permissions --> | ||||||
|     <resultMap id="UserRecordResultMap" type="org.apache.guacamole.auth.jdbc.base.ActivityRecordModel"> |     <resultMap id="UserRecordResultMap" type="org.apache.guacamole.auth.jdbc.base.ActivityRecordModel"> | ||||||
|  |         <id     column="history_id"  property="recordID"   jdbcType="INTEGER"/> | ||||||
|         <result column="remote_host" property="remoteHost" jdbcType="VARCHAR"/> |         <result column="remote_host" property="remoteHost" jdbcType="VARCHAR"/> | ||||||
|         <result column="user_id"     property="userID"     jdbcType="INTEGER"/> |         <result column="user_id"     property="userID"     jdbcType="INTEGER"/> | ||||||
|         <result column="username"    property="username"   jdbcType="VARCHAR"/> |         <result column="username"    property="username"   jdbcType="VARCHAR"/> | ||||||
| @@ -52,7 +53,8 @@ | |||||||
|     </select> |     </select> | ||||||
|  |  | ||||||
|     <!-- Insert the given user record --> |     <!-- Insert the given user record --> | ||||||
|     <insert id="insert" parameterType="org.apache.guacamole.auth.jdbc.base.ActivityRecordModel"> |     <insert id="insert" useGeneratedKeys="true" keyProperty="record.recordID" | ||||||
|  |             parameterType="org.apache.guacamole.auth.jdbc.base.ActivityRecordModel"> | ||||||
|  |  | ||||||
|         INSERT INTO guacamole_user_history ( |         INSERT INTO guacamole_user_history ( | ||||||
|             remote_host, |             remote_host, | ||||||
| @@ -72,6 +74,18 @@ | |||||||
|  |  | ||||||
|     </insert> |     </insert> | ||||||
|  |  | ||||||
|  |     <!-- Update the given user record --> | ||||||
|  |     <update id="update" parameterType="org.apache.guacamole.auth.jdbc.base.ActivityRecordModel"> | ||||||
|  |         UPDATE guacamole_user_history | ||||||
|  |         SET remote_host = #{record.remoteHost,jdbcType=VARCHAR}, | ||||||
|  |             user_id     = (SELECT user_id FROM guacamole_user | ||||||
|  |                            WHERE username = #{record.username,jdbcType=VARCHAR}), | ||||||
|  |             username    = #{record.username,jdbcType=VARCHAR}, | ||||||
|  |             start_date  = #{record.startDate,jdbcType=TIMESTAMP}, | ||||||
|  |             end_date    = #{record.endDate,jdbcType=TIMESTAMP} | ||||||
|  |         WHERE history_id = #{record.recordID,jdbcType=INTEGER} | ||||||
|  |     </update> | ||||||
|  |  | ||||||
|     <!-- Search for specific user records --> |     <!-- Search for specific user records --> | ||||||
|     <select id="search" resultMap="UserRecordResultMap"> |     <select id="search" resultMap="UserRecordResultMap"> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -25,6 +25,7 @@ | |||||||
|  |  | ||||||
|     <!-- Result mapper for system permissions --> |     <!-- Result mapper for system permissions --> | ||||||
|     <resultMap id="UserRecordResultMap" type="org.apache.guacamole.auth.jdbc.base.ActivityRecordModel"> |     <resultMap id="UserRecordResultMap" type="org.apache.guacamole.auth.jdbc.base.ActivityRecordModel"> | ||||||
|  |         <id     column="history_id"  property="recordID"   jdbcType="INTEGER"/> | ||||||
|         <result column="remote_host" property="remoteHost" jdbcType="VARCHAR"/> |         <result column="remote_host" property="remoteHost" jdbcType="VARCHAR"/> | ||||||
|         <result column="user_id"     property="userID"     jdbcType="INTEGER"/> |         <result column="user_id"     property="userID"     jdbcType="INTEGER"/> | ||||||
|         <result column="username"    property="username"   jdbcType="VARCHAR"/> |         <result column="username"    property="username"   jdbcType="VARCHAR"/> | ||||||
| @@ -52,7 +53,8 @@ | |||||||
|     </select> |     </select> | ||||||
|  |  | ||||||
|     <!-- Insert the given user record --> |     <!-- Insert the given user record --> | ||||||
|     <insert id="insert" parameterType="org.apache.guacamole.auth.jdbc.base.ActivityRecordModel"> |     <insert id="insert" useGeneratedKeys="true" keyProperty="record.recordID" | ||||||
|  |             parameterType="org.apache.guacamole.auth.jdbc.base.ActivityRecordModel"> | ||||||
|  |  | ||||||
|         INSERT INTO guacamole_user_history ( |         INSERT INTO guacamole_user_history ( | ||||||
|             remote_host, |             remote_host, | ||||||
| @@ -72,6 +74,18 @@ | |||||||
|  |  | ||||||
|     </insert> |     </insert> | ||||||
|  |  | ||||||
|  |     <!-- Update the given user record --> | ||||||
|  |     <update id="update" parameterType="org.apache.guacamole.auth.jdbc.base.ActivityRecordModel"> | ||||||
|  |         UPDATE guacamole_user_history | ||||||
|  |         SET remote_host = #{record.remoteHost,jdbcType=VARCHAR}, | ||||||
|  |             user_id     = (SELECT user_id FROM guacamole_user | ||||||
|  |                            WHERE username = #{record.username,jdbcType=VARCHAR}), | ||||||
|  |             username    = #{record.username,jdbcType=VARCHAR}, | ||||||
|  |             start_date  = #{record.startDate,jdbcType=TIMESTAMP}, | ||||||
|  |             end_date    = #{record.endDate,jdbcType=TIMESTAMP} | ||||||
|  |         WHERE history_id = #{record.recordID,jdbcType=INTEGER}::integer | ||||||
|  |     </update> | ||||||
|  |  | ||||||
|     <!-- Search for specific user records --> |     <!-- Search for specific user records --> | ||||||
|     <select id="search" resultMap="UserRecordResultMap"> |     <select id="search" resultMap="UserRecordResultMap"> | ||||||
|  |  | ||||||
|   | |||||||
| @@ -25,6 +25,7 @@ | |||||||
|  |  | ||||||
|     <!-- Result mapper for system permissions --> |     <!-- Result mapper for system permissions --> | ||||||
|     <resultMap id="UserRecordResultMap" type="org.apache.guacamole.auth.jdbc.base.ActivityRecordModel"> |     <resultMap id="UserRecordResultMap" type="org.apache.guacamole.auth.jdbc.base.ActivityRecordModel"> | ||||||
|  |         <id     column="history_id"  property="recordID"   jdbcType="INTEGER"/> | ||||||
|         <result column="remote_host" property="remoteHost" jdbcType="VARCHAR"/> |         <result column="remote_host" property="remoteHost" jdbcType="VARCHAR"/> | ||||||
|         <result column="user_id"     property="userID"     jdbcType="INTEGER"/> |         <result column="user_id"     property="userID"     jdbcType="INTEGER"/> | ||||||
|         <result column="username"    property="username"   jdbcType="VARCHAR"/> |         <result column="username"    property="username"   jdbcType="VARCHAR"/> | ||||||
| @@ -52,7 +53,8 @@ | |||||||
|     </select> |     </select> | ||||||
|  |  | ||||||
|     <!-- Insert the given user record --> |     <!-- Insert the given user record --> | ||||||
|     <insert id="insert" parameterType="org.apache.guacamole.auth.jdbc.base.ActivityRecordModel"> |     <insert id="insert" useGeneratedKeys="true" keyProperty="record.recordID" | ||||||
|  |             parameterType="org.apache.guacamole.auth.jdbc.base.ActivityRecordModel"> | ||||||
|  |  | ||||||
|         INSERT INTO [guacamole_user_history] ( |         INSERT INTO [guacamole_user_history] ( | ||||||
|             remote_host, |             remote_host, | ||||||
| @@ -72,6 +74,18 @@ | |||||||
|  |  | ||||||
|     </insert> |     </insert> | ||||||
|  |  | ||||||
|  |     <!-- Update the given user record --> | ||||||
|  |     <update id="update" parameterType="org.apache.guacamole.auth.jdbc.base.ActivityRecordModel"> | ||||||
|  |         UPDATE [guacamole_user_history] | ||||||
|  |         SET remote_host = #{record.remoteHost,jdbcType=VARCHAR}, | ||||||
|  |             user_id     = (SELECT user_id FROM [guacamole_user] | ||||||
|  |                            WHERE username = #{record.username,jdbcType=VARCHAR}), | ||||||
|  |             username    = #{record.username,jdbcType=VARCHAR}, | ||||||
|  |             start_date  = #{record.startDate,jdbcType=TIMESTAMP}, | ||||||
|  |             end_date    = #{record.endDate,jdbcType=TIMESTAMP} | ||||||
|  |         WHERE history_id = #{record.recordID,jdbcType=INTEGER} | ||||||
|  |     </update> | ||||||
|  |  | ||||||
|     <!-- Search for specific user records --> |     <!-- Search for specific user records --> | ||||||
|     <select id="search" resultMap="UserRecordResultMap"> |     <select id="search" resultMap="UserRecordResultMap"> | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user