diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/base/ActivityRecordMapper.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/base/ActivityRecordMapper.java new file mode 100644 index 000000000..2e6301c37 --- /dev/null +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/base/ActivityRecordMapper.java @@ -0,0 +1,135 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.guacamole.auth.jdbc.base; + +import java.util.Collection; +import java.util.List; +import org.apache.guacamole.auth.jdbc.user.UserModel; +import org.apache.ibatis.annotations.Param; + +/** + * Common interface for mapping activity records. + * + * @param + * The type of model object representing the activity records mapped by + * this mapper. + */ +public interface ActivityRecordMapper { + + /** + * Inserts the given activity record. + * + * @param record + * The activity record to insert. + * + * @return + * The number of rows inserted. + */ + int insert(@Param("record") ModelType record); + + /** + * Updates the given activity record in the database, assigning an end + * date. No column of the existing activity record is updated except for + * the end date. If the record does not actually exist, this operation has + * no effect. + * + * @param record + * The activity record to update. + * + * @return + * The number of rows updated. + */ + int updateEndDate(@Param("record") ModelType record); + + /** + * Searches for up to limit activity records that contain + * the given terms, sorted by the given predicates, regardless of whether + * the data they are associated with is readable by any particular user. + * This should only be called on behalf of a system administrator. If + * records are needed by a non-administrative user who must have explicit + * read rights, use {@link searchReadable()} instead. + * + * @param identifier + * The optional identifier of the object whose history is being + * retrieved, or null if records related to any such object should be + * retrieved. + * + * @param terms + * The search terms that must match the returned records. + * + * @param sortPredicates + * A list of predicates to sort the returned records by, in order of + * priority. + * + * @param limit + * The maximum number of records that should be returned. + * + * @return + * The results of the search performed with the given parameters. + */ + List search(@Param("identifier") String identifier, + @Param("terms") Collection terms, + @Param("sortPredicates") List sortPredicates, + @Param("limit") int limit); + + /** + * Searches for up to limit activity records that contain + * the given terms, sorted by the given predicates. Only records that are + * associated with data explicitly readable by the given user will be + * returned. If records are needed by a system administrator (who, by + * definition, does not need explicit read rights), use {@link search()} + * instead. + * + * @param identifier + * The optional identifier of the object whose history is being + * retrieved, or null if records related to any such object should be + * retrieved. + * + * @param user + * The user whose permissions should determine whether a record is + * returned. + * + * @param terms + * The search terms that must match the returned records. + * + * @param sortPredicates + * A list of predicates to sort the returned records by, in order of + * priority. + * + * @param limit + * The maximum number of records that should be returned. + * + * @param effectiveGroups + * The identifiers of all groups that should be taken into account + * when determining the permissions effectively granted to the user. If + * no groups are given, only permissions directly granted to the user + * will be used. + * + * @return + * The results of the search performed with the given parameters. + */ + List searchReadable(@Param("identifier") String identifier, + @Param("user") UserModel user, + @Param("terms") Collection terms, + @Param("sortPredicates") List sortPredicates, + @Param("limit") int limit, + @Param("effectiveGroups") Collection effectiveGroups); + +} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.java index bf329ff85..34c9cfb86 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.java @@ -19,127 +19,9 @@ package org.apache.guacamole.auth.jdbc.connection; -import java.util.Collection; -import java.util.List; -import org.apache.guacamole.auth.jdbc.base.ActivityRecordSearchTerm; -import org.apache.guacamole.auth.jdbc.base.ActivityRecordSortPredicate; -import org.apache.ibatis.annotations.Param; -import org.apache.guacamole.auth.jdbc.user.UserModel; +import org.apache.guacamole.auth.jdbc.base.ActivityRecordMapper; /** * Mapper for connection record objects. */ -public interface ConnectionRecordMapper { - - /** - * Returns a collection of all connection records associated with the - * connection having the given identifier. - * - * @param identifier - * The identifier of the connection whose records are to be retrieved. - * - * @return - * A collection of all connection records associated with the - * connection having the given identifier. This collection will be - * empty if no such connection exists. - */ - List select(@Param("identifier") String identifier); - - /** - * Inserts the given connection record. - * - * @param record - * The connection record to insert. - * - * @return - * The number of rows inserted. - */ - int insert(@Param("record") ConnectionRecordModel record); - - /** - * Updates the given connection record in the database, assigning an end - * date. No column of the existing connection record is updated except for - * the end date. If the record does not actually exist, this operation has - * no effect. - * - * @param record - * The connection record to update. - * - * @return - * The number of rows updated. - */ - int updateEndDate(@Param("record") ConnectionRecordModel record); - - /** - * Searches for up to limit connection records that contain - * the given terms, sorted by the given predicates, regardless of whether - * the data they are associated with is is readable by any particular user. - * This should only be called on behalf of a system administrator. If - * records are needed by a non-administrative user who must have explicit - * read rights, use {@link searchReadable()} instead. - * - * @param identifier - * The optional connection identifier to which records should be limited, - * or null if all records should be retrieved. - * - * @param terms - * The search terms that must match the returned records. - * - * @param sortPredicates - * A list of predicates to sort the returned records by, in order of - * priority. - * - * @param limit - * The maximum number of records that should be returned. - * - * @return - * The results of the search performed with the given parameters. - */ - List search(@Param("identifier") String identifier, - @Param("terms") Collection terms, - @Param("sortPredicates") List sortPredicates, - @Param("limit") int limit); - - /** - * Searches for up to limit connection records that contain - * the given terms, sorted by the given predicates. Only records that are - * associated with data explicitly readable by the given user will be - * returned. If records are needed by a system administrator (who, by - * definition, does not need explicit read rights), use {@link search()} - * instead. - * - * @param identifier - * The optional connection identifier for which records should be - * retrieved, or null if all readable records should be retrieved. - * - * @param user - * The user whose permissions should determine whether a record is - * returned. - * - * @param terms - * The search terms that must match the returned records. - * - * @param sortPredicates - * A list of predicates to sort the returned records by, in order of - * priority. - * - * @param limit - * The maximum number of records that should be returned. - * - * @param effectiveGroups - * The identifiers of all groups that should be taken into account - * when determining the permissions effectively granted to the user. If - * no groups are given, only permissions directly granted to the user - * will be used. - * - * @return - * The results of the search performed with the given parameters. - */ - List searchReadable(@Param("identifier") String identifier, - @Param("user") UserModel user, - @Param("terms") Collection terms, - @Param("sortPredicates") List sortPredicates, - @Param("limit") int limit, - @Param("effectiveGroups") Collection effectiveGroups); - -} +public interface ConnectionRecordMapper extends ActivityRecordMapper {} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/ModeledUserContext.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/ModeledUserContext.java index fe60a5faf..1416b0b39 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/ModeledUserContext.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/ModeledUserContext.java @@ -291,7 +291,7 @@ public class ModeledUserContext extends RestrictedObject // Record logout time only if login time was recorded if (userRecord != null) { userRecord.setEndDate(new Date()); - userRecordMapper.update(userRecord); + userRecordMapper.updateEndDate(userRecord); } } diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.java index fe15f41e4..155033d6a 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.java @@ -19,124 +19,10 @@ package org.apache.guacamole.auth.jdbc.user; -import java.util.Collection; -import java.util.List; +import org.apache.guacamole.auth.jdbc.base.ActivityRecordMapper; import org.apache.guacamole.auth.jdbc.base.ActivityRecordModel; -import org.apache.guacamole.auth.jdbc.base.ActivityRecordSearchTerm; -import org.apache.guacamole.auth.jdbc.base.ActivityRecordSortPredicate; -import org.apache.ibatis.annotations.Param; /** * Mapper for user login activity records. */ -public interface UserRecordMapper { - - /** - * Returns a collection of all user login records associated with the user - * having the given username. - * - * @param username - * The username of the user whose login records are to be retrieved. - * - * @return - * A collection of all user login records associated with the user - * having the given username. This collection will be empty if no such - * user exists. - */ - List select(@Param("username") String username); - - /** - * Inserts the given user login record. - * - * @param record - * The user login record to insert. - * - * @return - * The number of rows inserted. - */ - 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 limit user login records that contain - * the given terms, sorted by the given predicates, regardless of whether - * the data they are associated with is is readable by any particular user. - * This should only be called on behalf of a system administrator. If - * records are needed by a non-administrative user who must have explicit - * read rights, use {@link searchReadable()} instead. - * - * @param username - * The optional username to which records should be limited, or null - * if all records should be retrieved. - * - * @param terms - * The search terms that must match the returned records. - * - * @param sortPredicates - * A list of predicates to sort the returned records by, in order of - * priority. - * - * @param limit - * The maximum number of records that should be returned. - * - * @return - * The results of the search performed with the given parameters. - */ - List search(@Param("username") String username, - @Param("terms") Collection terms, - @Param("sortPredicates") List sortPredicates, - @Param("limit") int limit); - - /** - * Searches for up to limit user login records that contain - * the given terms, sorted by the given predicates. Only records that are - * associated with data explicitly readable by the given user will be - * returned. If records are needed by a system administrator (who, by - * definition, does not need explicit read rights), use {@link search()} - * instead. - * - * @param username - * The optional username to which records should be limited, or null - * if all readable records should be retrieved. - * - * @param user - * The user whose permissions should determine whether a record is - * returned. - * - * @param terms - * The search terms that must match the returned records. - * - * @param sortPredicates - * A list of predicates to sort the returned records by, in order of - * priority. - * - * @param limit - * The maximum number of records that should be returned. - * - * @param effectiveGroups - * The identifiers of all groups that should be taken into account - * when determining the permissions effectively granted to the user. If - * no groups are given, only permissions directly granted to the user - * will be used. - * - * @return - * The results of the search performed with the given parameters. - */ - List searchReadable(@Param("username") String username, - @Param("user") UserModel user, - @Param("terms") Collection terms, - @Param("sortPredicates") List sortPredicates, - @Param("limit") int limit, - @Param("effectiveGroups") Collection effectiveGroups); - -} +public interface UserRecordMapper extends ActivityRecordMapper {} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml index 39e302b29..2ff98127c 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml @@ -37,29 +37,6 @@ - - - @@ -95,11 +72,9 @@ - UPDATE guacamole_connection_history SET end_date = #{record.endDate,jdbcType=TIMESTAMP} WHERE history_id = #{record.recordID,jdbcType=INTEGER} - diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.xml index f5ea2cff6..70742df4c 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-mysql/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.xml @@ -33,27 +33,6 @@ - - - @@ -79,18 +58,10 @@ - - + + UPDATE guacamole_user_history - SET remote_host = #{record.remoteHost,jdbcType=VARCHAR}, - user_id = (SELECT user_id FROM guacamole_user - JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id - WHERE - guacamole_entity.name = #{record.username,jdbcType=VARCHAR} - AND guacamole_entity.type = 'USER'), - username = #{record.username,jdbcType=VARCHAR}, - start_date = #{record.startDate,jdbcType=TIMESTAMP}, - end_date = #{record.endDate,jdbcType=TIMESTAMP} + SET end_date = #{record.endDate,jdbcType=TIMESTAMP} WHERE history_id = #{record.recordID,jdbcType=INTEGER} @@ -109,8 +80,8 @@ - - guacamole_user_history.username = #{username,jdbcType=VARCHAR} + + guacamole_user_history.username = #{identifier,jdbcType=VARCHAR} @@ -174,8 +145,8 @@ ) - - AND guacamole_entity.name = #{username,jdbcType=VARCHAR} + + AND guacamole_entity.name = #{identifier,jdbcType=VARCHAR} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml index 62e9100d3..5d47c9baa 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml @@ -37,29 +37,6 @@ - - - @@ -95,11 +72,9 @@ - UPDATE guacamole_connection_history SET end_date = #{record.endDate,jdbcType=TIMESTAMP} WHERE history_id = #{record.recordID,jdbcType=INTEGER}::integer - diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.xml index 7bbce6285..a372087eb 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.xml @@ -33,27 +33,6 @@ - - - @@ -79,18 +58,10 @@ - - + + UPDATE guacamole_user_history - SET remote_host = #{record.remoteHost,jdbcType=VARCHAR}, - user_id = (SELECT user_id FROM guacamole_user - JOIN guacamole_entity ON guacamole_user.entity_id = guacamole_entity.entity_id - WHERE - guacamole_entity.name = #{record.username,jdbcType=VARCHAR} - AND guacamole_entity.type = 'USER'::guacamole_entity_type), - username = #{record.username,jdbcType=VARCHAR}, - start_date = #{record.startDate,jdbcType=TIMESTAMP}, - end_date = #{record.endDate,jdbcType=TIMESTAMP} + SET end_date = #{record.endDate,jdbcType=TIMESTAMP} WHERE history_id = #{record.recordID,jdbcType=INTEGER}::integer @@ -109,8 +80,8 @@ - - guacamole_user_history.username = #{username,jdbcType=VARCHAR} + + guacamole_user_history.username = #{identifier,jdbcType=VARCHAR} @@ -174,8 +145,8 @@ ) - - AND guacamole_entity.name = #{username,jdbcType=VARCHAR} + + AND guacamole_entity.name = #{identifier,jdbcType=VARCHAR} diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml index bac30e289..4642303f8 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionRecordMapper.xml @@ -37,36 +37,11 @@ - - - - UPDATE [guacamole_connection_history] SET end_date = #{record.endDate,jdbcType=TIMESTAMP} WHERE history_id = #{record.recordID,jdbcType=INTEGER} - diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.xml index cec51bef2..4fb64491a 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/user/UserRecordMapper.xml @@ -33,27 +33,6 @@ - - - @@ -79,18 +58,10 @@ - - + + UPDATE [guacamole_user_history] - SET remote_host = #{record.remoteHost,jdbcType=VARCHAR}, - user_id = (SELECT user_id FROM [guacamole_user] - JOIN [guacamole_entity] ON [guacamole_user].entity_id = [guacamole_entity].entity_id - WHERE - [guacamole_entity].name = #{record.username,jdbcType=VARCHAR} - AND [guacamole_entity].type = 'USER'), - username = #{record.username,jdbcType=VARCHAR}, - start_date = #{record.startDate,jdbcType=TIMESTAMP}, - end_date = #{record.endDate,jdbcType=TIMESTAMP} + SET end_date = #{record.endDate,jdbcType=TIMESTAMP} WHERE history_id = #{record.recordID,jdbcType=INTEGER} @@ -109,8 +80,8 @@ - - [guacamole_user_history].username = #{username,jdbcType=VARCHAR} + + [guacamole_user_history].username = #{identifier,jdbcType=VARCHAR} @@ -172,8 +143,8 @@ ) - - AND [guacamole_entity].name = #{username,jdbcType=VARCHAR} + + AND [guacamole_entity].name = #{identifier,jdbcType=VARCHAR}