mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 21:27:40 +00:00
GUAC-1101: Implement querying of connection group permissions.
This commit is contained in:
@@ -49,6 +49,9 @@ import org.glyptodon.guacamole.auth.jdbc.permission.SystemPermissionService;
|
|||||||
import org.glyptodon.guacamole.auth.jdbc.socket.UnrestrictedGuacamoleSocketService;
|
import org.glyptodon.guacamole.auth.jdbc.socket.UnrestrictedGuacamoleSocketService;
|
||||||
import org.glyptodon.guacamole.auth.jdbc.user.UserService;
|
import org.glyptodon.guacamole.auth.jdbc.user.UserService;
|
||||||
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
|
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
|
||||||
|
import org.glyptodon.guacamole.auth.jdbc.permission.ConnectionGroupPermissionMapper;
|
||||||
|
import org.glyptodon.guacamole.auth.jdbc.permission.ConnectionGroupPermissionService;
|
||||||
|
import org.glyptodon.guacamole.auth.jdbc.permission.ConnectionGroupPermissionSet;
|
||||||
import org.glyptodon.guacamole.auth.jdbc.permission.ConnectionPermissionMapper;
|
import org.glyptodon.guacamole.auth.jdbc.permission.ConnectionPermissionMapper;
|
||||||
import org.glyptodon.guacamole.auth.jdbc.permission.ConnectionPermissionService;
|
import org.glyptodon.guacamole.auth.jdbc.permission.ConnectionPermissionService;
|
||||||
import org.glyptodon.guacamole.auth.jdbc.permission.ConnectionPermissionSet;
|
import org.glyptodon.guacamole.auth.jdbc.permission.ConnectionPermissionSet;
|
||||||
@@ -94,6 +97,7 @@ public class JDBCAuthenticationProviderModule extends MyBatisModule {
|
|||||||
// Add MyBatis mappers
|
// Add MyBatis mappers
|
||||||
addMapperClass(ConnectionMapper.class);
|
addMapperClass(ConnectionMapper.class);
|
||||||
addMapperClass(ConnectionGroupMapper.class);
|
addMapperClass(ConnectionGroupMapper.class);
|
||||||
|
addMapperClass(ConnectionGroupPermissionMapper.class);
|
||||||
addMapperClass(ConnectionPermissionMapper.class);
|
addMapperClass(ConnectionPermissionMapper.class);
|
||||||
addMapperClass(ConnectionRecordMapper.class);
|
addMapperClass(ConnectionRecordMapper.class);
|
||||||
addMapperClass(ParameterMapper.class);
|
addMapperClass(ParameterMapper.class);
|
||||||
@@ -104,20 +108,22 @@ public class JDBCAuthenticationProviderModule extends MyBatisModule {
|
|||||||
bind(Environment.class).toInstance(environment);
|
bind(Environment.class).toInstance(environment);
|
||||||
bind(ConnectionDirectory.class);
|
bind(ConnectionDirectory.class);
|
||||||
bind(ConnectionGroupDirectory.class);
|
bind(ConnectionGroupDirectory.class);
|
||||||
|
bind(ConnectionGroupPermissionSet.class);
|
||||||
|
bind(ConnectionPermissionSet.class);
|
||||||
bind(ModeledConnection.class);
|
bind(ModeledConnection.class);
|
||||||
bind(ModeledConnectionGroup.class);
|
bind(ModeledConnectionGroup.class);
|
||||||
bind(ModeledGuacamoleConfiguration.class);
|
bind(ModeledGuacamoleConfiguration.class);
|
||||||
bind(ModeledUser.class);
|
bind(ModeledUser.class);
|
||||||
bind(RootConnectionGroup.class);
|
bind(RootConnectionGroup.class);
|
||||||
bind(ConnectionPermissionSet.class);
|
|
||||||
bind(SystemPermissionSet.class);
|
bind(SystemPermissionSet.class);
|
||||||
bind(UserContext.class);
|
bind(UserContext.class);
|
||||||
bind(UserDirectory.class);
|
bind(UserDirectory.class);
|
||||||
|
|
||||||
// Bind services
|
// Bind services
|
||||||
|
bind(ConnectionGroupPermissionService.class);
|
||||||
|
bind(ConnectionGroupService.class);
|
||||||
bind(ConnectionPermissionService.class);
|
bind(ConnectionPermissionService.class);
|
||||||
bind(ConnectionService.class);
|
bind(ConnectionService.class);
|
||||||
bind(ConnectionGroupService.class);
|
|
||||||
bind(PasswordEncryptionService.class).to(SHA256PasswordEncryptionService.class);
|
bind(PasswordEncryptionService.class).to(SHA256PasswordEncryptionService.class);
|
||||||
bind(SaltService.class).to(SecureRandomSaltService.class);
|
bind(SaltService.class).to(SecureRandomSaltService.class);
|
||||||
bind(SystemPermissionService.class);
|
bind(SystemPermissionService.class);
|
||||||
|
@@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Glyptodon LLC
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.glyptodon.guacamole.auth.jdbc.permission;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mapper for connection group permissions.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public interface ConnectionGroupPermissionMapper extends ObjectPermissionMapper {}
|
@@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Glyptodon LLC
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.glyptodon.guacamole.auth.jdbc.permission;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.google.inject.Provider;
|
||||||
|
import org.glyptodon.guacamole.auth.jdbc.user.AuthenticatedUser;
|
||||||
|
import org.glyptodon.guacamole.GuacamoleException;
|
||||||
|
import org.glyptodon.guacamole.auth.jdbc.user.ModeledUser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Service which provides convenience methods for creating, retrieving, and
|
||||||
|
* deleting connection group permissions. This service will automatically
|
||||||
|
* enforce the permissions of the current user.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class ConnectionGroupPermissionService extends ObjectPermissionService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mapper for connection group permissions.
|
||||||
|
*/
|
||||||
|
@Inject
|
||||||
|
private ConnectionGroupPermissionMapper connectionGroupPermissionMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provider for connection group permission sets.
|
||||||
|
*/
|
||||||
|
@Inject
|
||||||
|
private Provider<ConnectionGroupPermissionSet> connectionGroupPermissionSetProvider;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ObjectPermissionMapper getPermissionMapper() {
|
||||||
|
return connectionGroupPermissionMapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ObjectPermissionSet getPermissionSet(AuthenticatedUser user,
|
||||||
|
ModeledUser targetUser) throws GuacamoleException {
|
||||||
|
|
||||||
|
// Create permission set for requested user
|
||||||
|
ObjectPermissionSet permissionSet = connectionGroupPermissionSetProvider.get();
|
||||||
|
permissionSet.init(user, targetUser);
|
||||||
|
|
||||||
|
return permissionSet;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2015 Glyptodon LLC
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.glyptodon.guacamole.auth.jdbc.permission;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A database implementation of ObjectPermissionSet which uses an injected
|
||||||
|
* service to query and manipulate the connection group permissions associated
|
||||||
|
* with a particular user.
|
||||||
|
*
|
||||||
|
* @author Michael Jumper
|
||||||
|
*/
|
||||||
|
public class ConnectionGroupPermissionSet extends ObjectPermissionSet {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Service for querying and manipulating connection group permissions.
|
||||||
|
*/
|
||||||
|
@Inject
|
||||||
|
private ConnectionGroupPermissionService connectionGroupPermissionService;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ObjectPermissionService getObjectPermissionService() {
|
||||||
|
return connectionGroupPermissionService;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -28,6 +28,7 @@ import org.glyptodon.guacamole.auth.jdbc.security.PasswordEncryptionService;
|
|||||||
import org.glyptodon.guacamole.auth.jdbc.security.SaltService;
|
import org.glyptodon.guacamole.auth.jdbc.security.SaltService;
|
||||||
import org.glyptodon.guacamole.auth.jdbc.permission.SystemPermissionService;
|
import org.glyptodon.guacamole.auth.jdbc.permission.SystemPermissionService;
|
||||||
import org.glyptodon.guacamole.GuacamoleException;
|
import org.glyptodon.guacamole.GuacamoleException;
|
||||||
|
import org.glyptodon.guacamole.auth.jdbc.permission.ConnectionGroupPermissionService;
|
||||||
import org.glyptodon.guacamole.auth.jdbc.permission.ConnectionPermissionService;
|
import org.glyptodon.guacamole.auth.jdbc.permission.ConnectionPermissionService;
|
||||||
import org.glyptodon.guacamole.net.auth.User;
|
import org.glyptodon.guacamole.net.auth.User;
|
||||||
import org.glyptodon.guacamole.net.auth.permission.ObjectPermissionSet;
|
import org.glyptodon.guacamole.net.auth.permission.ObjectPermissionSet;
|
||||||
@@ -67,6 +68,12 @@ public class ModeledUser extends DirectoryObject<UserModel> implements User {
|
|||||||
@Inject
|
@Inject
|
||||||
private ConnectionPermissionService connectionPermissionService;
|
private ConnectionPermissionService connectionPermissionService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Service for retrieving connection group permissions.
|
||||||
|
*/
|
||||||
|
@Inject
|
||||||
|
private ConnectionGroupPermissionService connectionGroupPermissionService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The plaintext password previously set by a call to setPassword(), if
|
* The plaintext password previously set by a call to setPassword(), if
|
||||||
* any. The password of a user cannot be retrieved once saved into the
|
* any. The password of a user cannot be retrieved once saved into the
|
||||||
@@ -144,8 +151,7 @@ public class ModeledUser extends DirectoryObject<UserModel> implements User {
|
|||||||
@Override
|
@Override
|
||||||
public ObjectPermissionSet getConnectionGroupPermissions()
|
public ObjectPermissionSet getConnectionGroupPermissions()
|
||||||
throws GuacamoleException {
|
throws GuacamoleException {
|
||||||
// STUB
|
return connectionGroupPermissionService.getPermissionSet(getCurrentUser(), this);
|
||||||
return new SimpleObjectPermissionSet();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -95,7 +95,7 @@
|
|||||||
guacamole_connection_group.connection_group_id,
|
guacamole_connection_group.connection_group_id,
|
||||||
connection_group_name,
|
connection_group_name,
|
||||||
parent_id,
|
parent_id,
|
||||||
protocol
|
type
|
||||||
FROM guacamole_connection_group
|
FROM guacamole_connection_group
|
||||||
JOIN guacamole_connection_group_permission ON guacamole_connection_group_permission.connection_group_id = guacamole_connection_group.connection_group_id
|
JOIN guacamole_connection_group_permission ON guacamole_connection_group_permission.connection_group_id = guacamole_connection_group.connection_group_id
|
||||||
WHERE guacamole_connection_group.connection_group_id IN
|
WHERE guacamole_connection_group.connection_group_id IN
|
||||||
|
@@ -0,0 +1,99 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Copyright (C) 2015 Glyptodon LLC
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<mapper namespace="org.glyptodon.guacamole.auth.jdbc.permission.ConnectionGroupPermissionMapper" >
|
||||||
|
|
||||||
|
<!-- Result mapper for connection permissions -->
|
||||||
|
<resultMap id="ConnectionGroupPermissionResultMap" type="org.glyptodon.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
|
<result column="user_id" property="userID" jdbcType="INTEGER"/>
|
||||||
|
<result column="username" property="username" jdbcType="VARCHAR"/>
|
||||||
|
<result column="permission" property="type" jdbcType="VARCHAR"
|
||||||
|
javaType="org.glyptodon.guacamole.net.auth.permission.ObjectPermission$Type"/>
|
||||||
|
<result column="connection_group_id" property="objectIdentifier" jdbcType="INTEGER"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<!-- Select all permissions for a given user -->
|
||||||
|
<select id="select" resultMap="ConnectionGroupPermissionResultMap">
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
guacamole_connection_group_permission.user_id,
|
||||||
|
username,
|
||||||
|
permission,
|
||||||
|
connection_group_id
|
||||||
|
FROM guacamole_connection_group_permission
|
||||||
|
JOIN guacamole_user ON guacamole_connection_group_permission.user_id = guacamole_user.user_id
|
||||||
|
WHERE guacamole_connection_group_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Select the single permission matching the given criteria -->
|
||||||
|
<select id="selectOne" resultMap="ConnectionGroupPermissionResultMap">
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
guacamole_connection_group_permission.user_id,
|
||||||
|
username,
|
||||||
|
permission,
|
||||||
|
connection_group_id
|
||||||
|
FROM guacamole_connection_group_permission
|
||||||
|
JOIN guacamole_user ON guacamole_connection_group_permission.user_id = guacamole_user.user_id
|
||||||
|
WHERE
|
||||||
|
guacamole_connection_group_permission.user_id = #{user.objectID,jdbcType=INTEGER}
|
||||||
|
AND permission = #{type,jdbcType=VARCHAR}
|
||||||
|
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- Delete all given permissions -->
|
||||||
|
<delete id="delete" parameterType="org.glyptodon.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
|
|
||||||
|
DELETE FROM guacamole_connection_group_permission
|
||||||
|
WHERE (user_id, permission, connection_group_id) IN
|
||||||
|
<foreach collection="permissions" item="permission"
|
||||||
|
open="(" separator="," close=")">
|
||||||
|
(#{permission.userID,jdbcType=INTEGER},
|
||||||
|
#{permission.type,jdbcType=VARCHAR},
|
||||||
|
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
||||||
|
</foreach>
|
||||||
|
|
||||||
|
</delete>
|
||||||
|
|
||||||
|
<!-- Insert all given permissions -->
|
||||||
|
<insert id="insert" parameterType="org.glyptodon.guacamole.auth.jdbc.permission.ObjectPermissionModel">
|
||||||
|
|
||||||
|
INSERT IGNORE INTO guacamole_connection_group_permission (
|
||||||
|
user_id,
|
||||||
|
permission,
|
||||||
|
connection_group_id
|
||||||
|
)
|
||||||
|
VALUES
|
||||||
|
<foreach collection="permissions" item="permission" separator=",">
|
||||||
|
(#{permission.userID,jdbcType=INTEGER},
|
||||||
|
#{permission.type,jdbcType=VARCHAR},
|
||||||
|
#{permission.objectIdentifier,jdbcType=VARCHAR})
|
||||||
|
</foreach>
|
||||||
|
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
</mapper>
|
Reference in New Issue
Block a user