mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-10 07:01:21 +00:00
Remove central guac-dev repo reference. Refactor net.sourceforge.guacamole to org.glyptodon.guacamole. Extensions are remaining with their classes in net.sourceforge.guacamole for compatibility's sake until we have a better system for extensions.
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import org.glyptodon.guacamole.protocol.GuacamoleConfiguration;
|
||||
|
||||
|
||||
/**
|
||||
* Basic implementation of a Guacamole connection.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public abstract class AbstractConnection implements Connection {
|
||||
|
||||
/**
|
||||
* The name associated with this connection.
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* The unique identifier associated with this connection.
|
||||
*/
|
||||
private String identifier;
|
||||
|
||||
/**
|
||||
* The GuacamoleConfiguration associated with this connection.
|
||||
*/
|
||||
private GuacamoleConfiguration configuration;
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getIdentifier() {
|
||||
return identifier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIdentifier(String identifier) {
|
||||
this.identifier = identifier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GuacamoleConfiguration getConfiguration() {
|
||||
return configuration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setConfiguration(GuacamoleConfiguration configuration) {
|
||||
this.configuration = configuration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
if (identifier == null) return 0;
|
||||
return identifier.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
// Not equal if null or not a Connection
|
||||
if (obj == null) return false;
|
||||
if (!(obj instanceof AbstractConnection)) return false;
|
||||
|
||||
// Get identifier
|
||||
String objIdentifier = ((AbstractConnection) obj).identifier;
|
||||
|
||||
// If null, equal only if this identifier is null
|
||||
if (objIdentifier == null) return identifier == null;
|
||||
|
||||
// Otherwise, equal only if strings are identical
|
||||
return objIdentifier.equals(identifier);
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,117 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): James Muehlner
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
|
||||
/**
|
||||
* Basic implementation of a Guacamole connection group.
|
||||
*
|
||||
* @author James Muehlner
|
||||
*/
|
||||
public abstract class AbstractConnectionGroup implements ConnectionGroup {
|
||||
|
||||
/**
|
||||
* The name associated with this connection group.
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* The unique identifier associated with this connection group.
|
||||
*/
|
||||
private String identifier;
|
||||
|
||||
/**
|
||||
* The type of this connection group.
|
||||
*/
|
||||
private ConnectionGroup.Type type;
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getIdentifier() {
|
||||
return identifier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setIdentifier(String identifier) {
|
||||
this.identifier = identifier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConnectionGroup.Type getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setType(ConnectionGroup.Type type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
if (identifier == null) return 0;
|
||||
return identifier.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
// Not equal if null or not a ConnectionGroup
|
||||
if (obj == null) return false;
|
||||
if (!(obj instanceof AbstractConnectionGroup)) return false;
|
||||
|
||||
// Get identifier
|
||||
String objIdentifier = ((AbstractConnectionGroup) obj).identifier;
|
||||
|
||||
// If null, equal only if this identifier is null
|
||||
if (objIdentifier == null) return identifier == null;
|
||||
|
||||
// Otherwise, equal only if strings are identical
|
||||
return objIdentifier.equals(identifier);
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,105 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
|
||||
/**
|
||||
* Basic implementation of a Guacamole user which uses the username to
|
||||
* determine equality. Username comparison is case-sensitive.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public abstract class AbstractUser implements User {
|
||||
|
||||
/**
|
||||
* The name of this user.
|
||||
*/
|
||||
private String username;
|
||||
|
||||
/**
|
||||
* This user's password. Note that while this provides a means for the
|
||||
* password to be set, the data stored in this String is not necessarily
|
||||
* the user's actual password. It may be hashed, it may be arbitrary.
|
||||
*/
|
||||
private String password;
|
||||
|
||||
@Override
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPassword(String password) {
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
if (username == null) return 0;
|
||||
return username.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
// Not equal if null or not a User
|
||||
if (obj == null) return false;
|
||||
if (!(obj instanceof AbstractUser)) return false;
|
||||
|
||||
// Get username
|
||||
String objUsername = ((AbstractUser) obj).username;
|
||||
|
||||
// If null, equal only if this username is null
|
||||
if (objUsername == null) return username == null;
|
||||
|
||||
// Otherwise, equal only if strings are identical
|
||||
return objUsername.equals(username);
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,86 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
|
||||
|
||||
/**
|
||||
* Provides means of accessing and managing the available
|
||||
* GuacamoleConfiguration objects and User objects. Access to each configuration
|
||||
* and each user is limited by a given Credentials object.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public interface AuthenticationProvider {
|
||||
|
||||
/**
|
||||
* Returns the UserContext of the user authorized by the given credentials.
|
||||
*
|
||||
* @param credentials The credentials to use to retrieve the environment.
|
||||
* @return The UserContext of the user authorized by the given credentials,
|
||||
* or null if the credentials are not authorized.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while creating the
|
||||
* UserContext.
|
||||
*/
|
||||
UserContext getUserContext(Credentials credentials)
|
||||
throws GuacamoleException;
|
||||
|
||||
/**
|
||||
* Returns a new or updated UserContext for the user authorized by the
|
||||
* give credentials and having the given existing UserContext. Note that
|
||||
* because this function will be called for all future requests after
|
||||
* initial authentication, including tunnel requests, care must be taken
|
||||
* to avoid using functions of HttpServletRequest which invalidate the
|
||||
* entire request body, such as getParameter().
|
||||
*
|
||||
* @param context The existing UserContext belonging to the user in
|
||||
* question.
|
||||
* @param credentials The credentials to use to retrieve or update the
|
||||
* environment.
|
||||
* @return The updated UserContext, which need not be the same as the
|
||||
* UserContext given, or null if the user is no longer authorized.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while updating the
|
||||
* UserContext.
|
||||
*/
|
||||
UserContext updateUserContext(UserContext context, Credentials credentials)
|
||||
throws GuacamoleException;
|
||||
|
||||
}
|
@@ -0,0 +1,131 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import java.util.List;
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.net.GuacamoleSocket;
|
||||
import org.glyptodon.guacamole.protocol.GuacamoleClientInformation;
|
||||
import org.glyptodon.guacamole.protocol.GuacamoleConfiguration;
|
||||
|
||||
|
||||
/**
|
||||
* Represents a pairing of a GuacamoleConfiguration with a unique,
|
||||
* human-readable identifier, and abstracts the connection process. The
|
||||
* backing GuacamoleConfiguration may be intentionally obfuscated or tokenized
|
||||
* to protect sensitive configuration information.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public interface Connection {
|
||||
|
||||
/**
|
||||
* Returns the name assigned to this Connection.
|
||||
* @return The name assigned to this Connection.
|
||||
*/
|
||||
public String getName();
|
||||
|
||||
/**
|
||||
* Sets the name assigned to this Connection.
|
||||
*
|
||||
* @param identifier The name to assign.
|
||||
*/
|
||||
public void setName(String name);
|
||||
|
||||
/**
|
||||
* Returns the unique identifier assigned to this Connection.
|
||||
* @return The unique identifier assigned to this Connection.
|
||||
*/
|
||||
public String getIdentifier();
|
||||
|
||||
/**
|
||||
* Sets the identifier assigned to this Connection.
|
||||
*
|
||||
* @param identifier The identifier to assign.
|
||||
*/
|
||||
public void setIdentifier(String identifier);
|
||||
|
||||
/**
|
||||
* Returns the GuacamoleConfiguration associated with this Connection. Note
|
||||
* that because configurations may contain sensitive information, some data
|
||||
* in this configuration may be omitted or tokenized.
|
||||
*
|
||||
* @return The GuacamoleConfiguration associated with this Connection.
|
||||
*/
|
||||
public GuacamoleConfiguration getConfiguration();
|
||||
|
||||
/**
|
||||
* Sets the GuacamoleConfiguration associated with this Connection.
|
||||
*
|
||||
* @param config The GuacamoleConfiguration to associate with this
|
||||
* Connection.
|
||||
*/
|
||||
public void setConfiguration(GuacamoleConfiguration config);
|
||||
|
||||
/**
|
||||
* Establishes a connection to guacd using the GuacamoleConfiguration
|
||||
* associated with this Connection, and returns the resulting, connected
|
||||
* GuacamoleSocket. The GuacamoleSocket will be pre-configured and will
|
||||
* already have passed the handshake stage.
|
||||
*
|
||||
* @param info Information associated with the connecting client.
|
||||
* @return A fully-established GuacamoleSocket.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while connecting to guacd,
|
||||
* or if permission to connect is denied.
|
||||
*/
|
||||
public GuacamoleSocket connect(GuacamoleClientInformation info)
|
||||
throws GuacamoleException;
|
||||
|
||||
/**
|
||||
* Returns a list of ConnectionRecords representing the usage history
|
||||
* of this Connection, including any active users. ConnectionRecords
|
||||
* in this list will be sorted in descending order of end time (active
|
||||
* connections are first), and then in descending order of start time
|
||||
* (newer connections are first).
|
||||
*
|
||||
* @return A list of ConnectionRecrods representing the usage history
|
||||
* of this Connection.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while reading the history
|
||||
* of this connection, or if permission is
|
||||
* denied.
|
||||
*/
|
||||
public List<? extends ConnectionRecord> getHistory() throws GuacamoleException;
|
||||
|
||||
}
|
@@ -0,0 +1,138 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): James Muehlner
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.net.GuacamoleSocket;
|
||||
import org.glyptodon.guacamole.protocol.GuacamoleClientInformation;
|
||||
|
||||
|
||||
/**
|
||||
* Represents a connection group, which can contain both other connection groups
|
||||
* as well as connections.
|
||||
*
|
||||
* @author James Muehlner
|
||||
*/
|
||||
public interface ConnectionGroup {
|
||||
|
||||
public enum Type {
|
||||
ORGANIZATIONAL, BALANCING
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the name assigned to this ConnectionGroup.
|
||||
* @return The name assigned to this ConnectionGroup.
|
||||
*/
|
||||
public String getName();
|
||||
|
||||
/**
|
||||
* Sets the name assigned to this ConnectionGroup.
|
||||
*
|
||||
* @param identifier The name to assign.
|
||||
*/
|
||||
public void setName(String name);
|
||||
|
||||
/**
|
||||
* Returns the unique identifier assigned to this ConnectionGroup.
|
||||
* @return The unique identifier assigned to this ConnectionGroup.
|
||||
*/
|
||||
public String getIdentifier();
|
||||
|
||||
/**
|
||||
* Sets the identifier assigned to this ConnectionGroup.
|
||||
*
|
||||
* @param identifier The identifier to assign.
|
||||
*/
|
||||
public void setIdentifier(String identifier);
|
||||
|
||||
/**
|
||||
* Set the type of this ConnectionGroup.
|
||||
*
|
||||
* @param type The type of this ConnectionGroup.
|
||||
*/
|
||||
public void setType(Type type);
|
||||
|
||||
/**
|
||||
* Returns the type of this connection.
|
||||
* @return the type of this connection.
|
||||
*/
|
||||
public Type getType();
|
||||
|
||||
/**
|
||||
* Retrieves a Directory which can be used to view and manipulate
|
||||
* connections and their configurations, but only as allowed by the
|
||||
* permissions given to the user.
|
||||
*
|
||||
* @return A Directory whose operations are bound by the permissions of
|
||||
* the user.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while creating the
|
||||
* Directory.
|
||||
*/
|
||||
Directory<String, Connection> getConnectionDirectory()
|
||||
throws GuacamoleException;
|
||||
|
||||
/**
|
||||
* Retrieves a Directory which can be used to view and manipulate
|
||||
* connection groups and their members, but only as allowed by the
|
||||
* permissions given to the user.
|
||||
*
|
||||
* @return A Directory whose operations are bound by the permissions of
|
||||
* the user.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while creating the
|
||||
* Directory.
|
||||
*/
|
||||
Directory<String, ConnectionGroup> getConnectionGroupDirectory()
|
||||
throws GuacamoleException;
|
||||
|
||||
/**
|
||||
* Establishes a connection to guacd using a connection chosen from among
|
||||
* the connections in this ConnectionGroup, and returns the resulting,
|
||||
* connected GuacamoleSocket.
|
||||
*
|
||||
* @param info Information associated with the connecting client.
|
||||
* @return A fully-established GuacamoleSocket.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while connecting to guacd,
|
||||
* or if permission to connect is denied.
|
||||
*/
|
||||
public GuacamoleSocket connect(GuacamoleClientInformation info)
|
||||
throws GuacamoleException;
|
||||
|
||||
}
|
@@ -0,0 +1,83 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-auth-mock.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* A logging record describing when a user started and ended usage of a
|
||||
* particular connection.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public interface ConnectionRecord {
|
||||
|
||||
/**
|
||||
* Returns the date and time the connection began.
|
||||
*
|
||||
* @return The date and time the connection began.
|
||||
*/
|
||||
public Date getStartDate();
|
||||
|
||||
/**
|
||||
* Returns the date and time the connection ended, if applicable.
|
||||
*
|
||||
* @return The date and time the connection ended, or null if the
|
||||
* connection is still running or if the end time is unknown.
|
||||
*/
|
||||
public Date getEndDate();
|
||||
|
||||
/**
|
||||
* Returns the name of the user who used or is using the connection at the
|
||||
* times given by this connection record.
|
||||
*
|
||||
* @return The name of the user who used or is using the associated
|
||||
* connection.
|
||||
*/
|
||||
public String getUsername();
|
||||
|
||||
/**
|
||||
* Returns whether the connection associated with this record is still
|
||||
* active.
|
||||
*
|
||||
* @return true if the connection associated with this record is still
|
||||
* active, false otherwise.
|
||||
*/
|
||||
public boolean isActive();
|
||||
|
||||
}
|
@@ -0,0 +1,152 @@
|
||||
package org.glyptodon.guacamole.net.auth;
|
||||
|
||||
import java.io.Serializable;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/**
|
||||
* Simple arbitrary set of credentials, including a username/password pair,
|
||||
* the HttpServletRequest associated with the request for authorization
|
||||
* (if any) and the HttpSession associated with that request.
|
||||
*
|
||||
* This class is used along with AuthenticationProvider to provide arbitrary
|
||||
* HTTP-based authentication for Guacamole.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public class Credentials implements Serializable {
|
||||
|
||||
/**
|
||||
* Unique identifier associated with this specific version of Credentials.
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* An arbitrary username.
|
||||
*/
|
||||
private String username;
|
||||
|
||||
/**
|
||||
* An arbitrary password.
|
||||
*/
|
||||
private String password;
|
||||
|
||||
/**
|
||||
* The HttpServletRequest carrying additional credentials, if any.
|
||||
*/
|
||||
private transient HttpServletRequest request;
|
||||
|
||||
/**
|
||||
* The HttpSession carrying additional credentials, if any.
|
||||
*/
|
||||
private transient HttpSession session;
|
||||
|
||||
/**
|
||||
* Returns the password associated with this set of credentials.
|
||||
* @return The password associated with this username/password pair, or
|
||||
* null if no password has been set.
|
||||
*/
|
||||
public String getPassword() {
|
||||
return password;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the password associated with this set of credentials.
|
||||
* @param password The password to associate with this username/password
|
||||
* pair.
|
||||
*/
|
||||
public void setPassword(String password) {
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the username associated with this set of credentials.
|
||||
* @return The username associated with this username/password pair, or
|
||||
* null if no username has been set.
|
||||
*/
|
||||
public String getUsername() {
|
||||
return username;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the username associated with this set of credentials.
|
||||
* @param username The username to associate with this username/password
|
||||
* pair.
|
||||
*/
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the HttpServletRequest associated with this set of credentials.
|
||||
* @return The HttpServletRequest associated with this set of credentials,
|
||||
* or null if no such request exists.
|
||||
*/
|
||||
public HttpServletRequest getRequest() {
|
||||
return request;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the HttpServletRequest associated with this set of credentials.
|
||||
* @param request The HttpServletRequest to associated with this set of
|
||||
* credentials.
|
||||
*/
|
||||
public void setRequest(HttpServletRequest request) {
|
||||
this.request = request;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the HttpSession associated with this set of credentials.
|
||||
* @return The HttpSession associated with this set of credentials, or null
|
||||
* if no such request exists.
|
||||
*/
|
||||
public HttpSession getSession() {
|
||||
return session;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the HttpSession associated with this set of credentials.
|
||||
* @param session The HttpSession to associated with this set of
|
||||
* credentials.
|
||||
*/
|
||||
public void setSession(HttpSession session) {
|
||||
this.session = session;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,129 @@
|
||||
package org.glyptodon.guacamole.net.auth;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import java.util.Set;
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
|
||||
|
||||
/**
|
||||
* Provides access to a collection of all objects with associated identifiers,
|
||||
* and allows user manipulation and removal. Objects stored within a
|
||||
* Directory are not necessarily returned to the use as references to
|
||||
* the stored objects, thus updating an object requires calling an update
|
||||
* function.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
* @param <IdentifierType> The type of identifier used to identify objects
|
||||
* stored within this Directory.
|
||||
* @param <ObjectType> The type of objects stored within this Directory.
|
||||
*/
|
||||
public interface Directory<IdentifierType, ObjectType> {
|
||||
|
||||
/**
|
||||
* Returns the object having the given identifier. Note that changes to
|
||||
* the object returned will not necessarily affect the object stored within
|
||||
* the Directory. To update an object stored within an
|
||||
* Directory such that future calls to get() will return the updated
|
||||
* object, you must call update() on the object after modification.
|
||||
*
|
||||
* @param identifier The identifier to use when locating the object to
|
||||
* return.
|
||||
* @return The object having the given identifier, or null if no such object
|
||||
* exists.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while retrieving the
|
||||
* object, or if permission for retrieving the
|
||||
* object is denied.
|
||||
*/
|
||||
ObjectType get(IdentifierType identifier) throws GuacamoleException;
|
||||
|
||||
/**
|
||||
* Returns a Set containing all identifiers for all objects within this
|
||||
* Directory.
|
||||
*
|
||||
* @return A Set of all identifiers.
|
||||
* @throws GuacamoleException If an error occurs while retrieving
|
||||
* the identifiers.
|
||||
*/
|
||||
Set<IdentifierType> getIdentifiers() throws GuacamoleException;
|
||||
|
||||
/**
|
||||
* Adds the given object to the overall set.
|
||||
*
|
||||
* @param object The object to add.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while adding the object , or
|
||||
* if adding the object is not allowed.
|
||||
*/
|
||||
void add(ObjectType object)
|
||||
throws GuacamoleException;
|
||||
|
||||
/**
|
||||
* Updates the stored object with the data contained in the given object.
|
||||
*
|
||||
* @param object The object which will supply the data for the update.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while updating the object,
|
||||
* or if updating the object is not allowed.
|
||||
*/
|
||||
void update(ObjectType object)
|
||||
throws GuacamoleException;
|
||||
|
||||
/**
|
||||
* Removes the object with the given identifier from the overall set.
|
||||
*
|
||||
* @param identifier The identifier of the object to remove.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while removing the object,
|
||||
* or if removing object is not allowed.
|
||||
*/
|
||||
void remove(IdentifierType identifier) throws GuacamoleException;
|
||||
|
||||
/**
|
||||
* Moves the object with the given identifier to the given directory.
|
||||
*
|
||||
* @param identifier The identifier of the object to remove.
|
||||
* @param directory The directory to move the object to.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while moving the object,
|
||||
* or if moving object is not allowed.
|
||||
*/
|
||||
void move(IdentifierType identifier, Directory<IdentifierType, ObjectType> directory)
|
||||
throws GuacamoleException;
|
||||
|
||||
}
|
@@ -0,0 +1,129 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth;
|
||||
|
||||
import java.util.Set;
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.net.auth.permission.Permission;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
|
||||
/**
|
||||
* A user of the Guacamole web application.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public interface User {
|
||||
|
||||
/**
|
||||
* Returns the name of this user, which must be unique across all users.
|
||||
*
|
||||
* @return The name of this user.
|
||||
*/
|
||||
public String getUsername();
|
||||
|
||||
/**
|
||||
* Sets the name of this user, which must be unique across all users.
|
||||
*
|
||||
* @param username The name of this user.
|
||||
*/
|
||||
public void setUsername(String username);
|
||||
|
||||
/**
|
||||
* Returns this user's password. Note that the password returned may be
|
||||
* hashed or completely arbitrary.
|
||||
*
|
||||
* @return A String which may (or may not) be the user's password.
|
||||
*/
|
||||
public String getPassword();
|
||||
|
||||
/**
|
||||
* Sets this user's password. Note that while this function is guaranteed
|
||||
* to change the password of this User object, there is no guarantee that
|
||||
* getPassword() will return the value given to setPassword().
|
||||
*
|
||||
* @param password The password to set.
|
||||
*/
|
||||
public void setPassword(String password);
|
||||
|
||||
/**
|
||||
* Lists all permissions given to this user.
|
||||
*
|
||||
* @return A Set of all permissions granted to this user.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while retrieving
|
||||
* permissions, or if reading all permissions
|
||||
* is not allowed.
|
||||
*/
|
||||
Set<Permission> getPermissions() throws GuacamoleException;
|
||||
|
||||
/**
|
||||
* Tests whether this user has the specified permission.
|
||||
*
|
||||
* @param permission The permission to check.
|
||||
* @return true if the permission is granted to this user, false otherwise.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while checking permissions,
|
||||
* or if permissions cannot be checked due to
|
||||
* lack of permissions to do so.
|
||||
*/
|
||||
boolean hasPermission(Permission permission) throws GuacamoleException;
|
||||
|
||||
/**
|
||||
* Adds the specified permission to this user.
|
||||
*
|
||||
* @param permission The permission to add.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while adding the
|
||||
* permission. or if permission to add
|
||||
* permissions is denied.
|
||||
*/
|
||||
void addPermission(Permission permission) throws GuacamoleException;
|
||||
|
||||
/**
|
||||
* Removes the specified permission from this specified user.
|
||||
*
|
||||
* @param permission The permission to remove.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while removing the
|
||||
* permission. or if permission to remove
|
||||
* permissions is denied.
|
||||
*/
|
||||
void removePermission(Permission permission) throws GuacamoleException;
|
||||
|
||||
|
||||
}
|
@@ -0,0 +1,86 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): James Muehlner
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
|
||||
/**
|
||||
* The context of an active user. The functions of this class enforce all
|
||||
* permissions and act only within the rights of the associated user.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public interface UserContext {
|
||||
|
||||
/**
|
||||
* Returns the User whose access rights control the operations of this
|
||||
* UserContext.
|
||||
*
|
||||
* @return The User whose access rights control the operations of this
|
||||
* UserContext.
|
||||
*/
|
||||
User self();
|
||||
|
||||
/**
|
||||
* Retrieves a Directory which can be used to view and manipulate other
|
||||
* users, but only as allowed by the permissions given to the user of this
|
||||
* UserContext.
|
||||
*
|
||||
* @return A Directory whose operations are bound by the restrictions
|
||||
* of this UserContext.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while creating the
|
||||
* Directory.
|
||||
*/
|
||||
Directory<String, User> getUserDirectory() throws GuacamoleException;
|
||||
|
||||
|
||||
/**
|
||||
* Retrieves a connection group which can be used to view and manipulate
|
||||
* connections, but only as allowed by the permissions given to the user of
|
||||
* this UserContext.
|
||||
*
|
||||
* @return A connection group whose operations are bound by the restrictions
|
||||
* of this UserContext.
|
||||
*
|
||||
* @throws GuacamoleException If an error occurs while creating the
|
||||
* Directory.
|
||||
*/
|
||||
ConnectionGroup getRootConnectionGroup() throws GuacamoleException;
|
||||
|
||||
}
|
@@ -0,0 +1,7 @@
|
||||
|
||||
/**
|
||||
* Provides classes which can be used to extend or replace the authentication
|
||||
* functionality of the Guacamole web application.
|
||||
*/
|
||||
package org.glyptodon.guacamole.net.auth;
|
||||
|
@@ -0,0 +1,121 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth.permission;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): James Muehlner
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
|
||||
/**
|
||||
* A permission which controls operations that directly affect a specific
|
||||
* ConnectionGroup. Note that this permission only refers to the
|
||||
* ConnectionGroup by its identifier. The actual ConnectionGroup
|
||||
* is not stored within.
|
||||
*
|
||||
* @author James Muehlner
|
||||
*/
|
||||
public class ConnectionGroupPermission
|
||||
implements ObjectPermission<String> {
|
||||
|
||||
/**
|
||||
* The identifier of the GuacamoleConfiguration associated with the
|
||||
* operation affected by this permission.
|
||||
*/
|
||||
private String identifier;
|
||||
|
||||
/**
|
||||
* The type of operation affected by this permission.
|
||||
*/
|
||||
private ObjectPermission.Type type;
|
||||
|
||||
/**
|
||||
* Creates a new ConnectionGroupPermission having the given type
|
||||
* and identifier. The identifier must be the unique identifier assigned
|
||||
* to the ConnectionGroup by the AuthenticationProvider in use.
|
||||
*
|
||||
* @param type The type of operation affected by this permission.
|
||||
* @param identifier The identifier of the ConnectionGroup associated
|
||||
* with the operation affected by this permission.
|
||||
*/
|
||||
public ConnectionGroupPermission(ObjectPermission.Type type, String identifier) {
|
||||
|
||||
this.identifier = identifier;
|
||||
this.type = type;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getObjectIdentifier() {
|
||||
return identifier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ObjectPermission.Type getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 5;
|
||||
if (identifier != null) hash = 47 * hash + identifier.hashCode();
|
||||
if (type != null) hash = 47 * hash + type.hashCode();
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
// Not equal if null or wrong type
|
||||
if (obj == null) return false;
|
||||
if (getClass() != obj.getClass()) return false;
|
||||
|
||||
final ConnectionGroupPermission other =
|
||||
(ConnectionGroupPermission) obj;
|
||||
|
||||
// Not equal if different type
|
||||
if (this.type != other.type)
|
||||
return false;
|
||||
|
||||
// If null identifier, equality depends on whether other identifier
|
||||
// is null
|
||||
if (identifier == null)
|
||||
return other.identifier == null;
|
||||
|
||||
// Otherwise, equality depends entirely on identifier
|
||||
return identifier.equals(other.identifier);
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,121 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth.permission;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
|
||||
/**
|
||||
* A permission which controls operations that directly affect a specific
|
||||
* GuacamoleConfiguration. Note that this permission only refers to the
|
||||
* GuacamoleConfiguration by its identifier. The actual GuacamoleConfiguration
|
||||
* is not stored within.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public class ConnectionPermission
|
||||
implements ObjectPermission<String> {
|
||||
|
||||
/**
|
||||
* The identifier of the GuacamoleConfiguration associated with the
|
||||
* operation affected by this permission.
|
||||
*/
|
||||
private String identifier;
|
||||
|
||||
/**
|
||||
* The type of operation affected by this permission.
|
||||
*/
|
||||
private Type type;
|
||||
|
||||
/**
|
||||
* Creates a new ConnectionPermission having the given type
|
||||
* and identifier. The identifier must be the unique identifier assigned
|
||||
* to the GuacamoleConfiguration by the AuthenticationProvider in use.
|
||||
*
|
||||
* @param type The type of operation affected by this permission.
|
||||
* @param identifier The identifier of the GuacamoleConfiguration associated
|
||||
* with the operation affected by this permission.
|
||||
*/
|
||||
public ConnectionPermission(Type type, String identifier) {
|
||||
|
||||
this.identifier = identifier;
|
||||
this.type = type;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getObjectIdentifier() {
|
||||
return identifier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 5;
|
||||
if (identifier != null) hash = 47 * hash + identifier.hashCode();
|
||||
if (type != null) hash = 47 * hash + type.hashCode();
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
// Not equal if null or wrong type
|
||||
if (obj == null) return false;
|
||||
if (getClass() != obj.getClass()) return false;
|
||||
|
||||
final ConnectionPermission other =
|
||||
(ConnectionPermission) obj;
|
||||
|
||||
// Not equal if different type
|
||||
if (this.type != other.type)
|
||||
return false;
|
||||
|
||||
// If null identifier, equality depends on whether other identifier
|
||||
// is null
|
||||
if (identifier == null)
|
||||
return other.identifier == null;
|
||||
|
||||
// Otherwise, equality depends entirely on identifier
|
||||
return identifier.equals(other.identifier);
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,87 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth.permission;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
|
||||
/**
|
||||
* A permission which affects a specific object, rather than the system as a
|
||||
* whole.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
* @param <T> The type of identifier used by the object this permission affects.
|
||||
*/
|
||||
public interface ObjectPermission<T> extends Permission<ObjectPermission.Type> {
|
||||
|
||||
/**
|
||||
* Specific types of object-level permissions. Each permission type is
|
||||
* related to a specific class of object-level operation.
|
||||
*/
|
||||
public enum Type {
|
||||
|
||||
/**
|
||||
* Read data within an object.
|
||||
*/
|
||||
READ,
|
||||
|
||||
/**
|
||||
* Update data within an object.
|
||||
*/
|
||||
UPDATE,
|
||||
|
||||
/**
|
||||
* Delete an object.
|
||||
*/
|
||||
DELETE,
|
||||
|
||||
/**
|
||||
* Change who has access to an object.
|
||||
*/
|
||||
ADMINISTER
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the identifier of the specific object affected by this
|
||||
* permission.
|
||||
*
|
||||
* @return The identifier of the specific object affected by this
|
||||
* permission.
|
||||
*/
|
||||
public T getObjectIdentifier();
|
||||
|
||||
}
|
@@ -0,0 +1,57 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth.permission;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
|
||||
/**
|
||||
* A permission which affects a specific type of operation, where all available
|
||||
* operation types are defined by an enumeration.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
* @param <Type> The enumeration of all available operation types that this
|
||||
* permission can affect.
|
||||
*/
|
||||
public interface Permission<Type extends Enum> {
|
||||
|
||||
/**
|
||||
* Returns the type of operation affected by this permission.
|
||||
* @return The type of operation affected by this permission.
|
||||
*/
|
||||
public Type getType();
|
||||
|
||||
}
|
@@ -0,0 +1,120 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth.permission;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
/**
|
||||
* A permission which affects the system as a whole, rather than an individual
|
||||
* object.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public class SystemPermission implements Permission<SystemPermission.Type> {
|
||||
|
||||
/**
|
||||
* Specific types of system-level permissions. Each permission type is
|
||||
* related to a specific class of system-level operation.
|
||||
*/
|
||||
public enum Type {
|
||||
|
||||
/**
|
||||
* Create users.
|
||||
*/
|
||||
CREATE_USER,
|
||||
|
||||
/**
|
||||
* Create connections.
|
||||
*/
|
||||
CREATE_CONNECTION,
|
||||
|
||||
/**
|
||||
* Create connection groups.
|
||||
*/
|
||||
CREATE_CONNECTION_GROUP,
|
||||
|
||||
/**
|
||||
* Administer the system in general, including adding permissions
|
||||
* which affect the system (like user creation, connection creation,
|
||||
* and system administration).
|
||||
*/
|
||||
ADMINISTER
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* The type of operation affected by this permission.
|
||||
*/
|
||||
private Type type;
|
||||
|
||||
/**
|
||||
* Creates a new SystemPermission with the given
|
||||
* type.
|
||||
*
|
||||
* @param type The type of operation controlled by this permission.
|
||||
*/
|
||||
public SystemPermission(Type type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return type.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
// Not equal if null or wrong type
|
||||
if (obj == null) return false;
|
||||
if (getClass() != obj.getClass()) return false;
|
||||
|
||||
final SystemPermission other = (SystemPermission) obj;
|
||||
|
||||
// Compare types
|
||||
if (type != other.type)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -0,0 +1,116 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth.permission;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
|
||||
/**
|
||||
* A permission which controls operations that directly affect a specific
|
||||
* User.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public class UserPermission implements ObjectPermission<String> {
|
||||
|
||||
/**
|
||||
* The username of the User associated with the operation affected by this
|
||||
* permission.
|
||||
*/
|
||||
private String identifier;
|
||||
|
||||
/**
|
||||
* The type of operation affected by this permission.
|
||||
*/
|
||||
private Type type;
|
||||
|
||||
/**
|
||||
* Creates a new UserPermission having the given type and identifier. The
|
||||
* identifier must be the user's username.
|
||||
*
|
||||
* @param type The type of operation affected by this permission.
|
||||
* @param identifier The username of the User associated with the operation
|
||||
* affected by this permission.
|
||||
*/
|
||||
public UserPermission(Type type, String identifier) {
|
||||
|
||||
this.identifier = identifier;
|
||||
this.type = type;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getObjectIdentifier() {
|
||||
return identifier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 5;
|
||||
if (identifier != null) hash = 47 * hash + identifier.hashCode();
|
||||
if (type != null) hash = 47 * hash + type.hashCode();
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
|
||||
// Not equal if null or wrong type
|
||||
if (obj == null) return false;
|
||||
if (getClass() != obj.getClass()) return false;
|
||||
|
||||
final UserPermission other = (UserPermission) obj;
|
||||
|
||||
// Not equal if different type
|
||||
if (this.type != other.type)
|
||||
return false;
|
||||
|
||||
// If null identifier, equality depends on whether other identifier
|
||||
// is null
|
||||
if (identifier == null)
|
||||
return other.identifier == null;
|
||||
|
||||
// Otherwise, equality depends entirely on identifier
|
||||
return identifier.equals(other.identifier);
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,7 @@
|
||||
|
||||
/**
|
||||
* Provides classes which describe the various permissions a Guacamole user
|
||||
* can be granted.
|
||||
*/
|
||||
package org.glyptodon.guacamole.net.auth.permission;
|
||||
|
@@ -0,0 +1,105 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth.simple;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-auth.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import java.util.Map;
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.net.auth.AuthenticationProvider;
|
||||
import org.glyptodon.guacamole.net.auth.Credentials;
|
||||
import org.glyptodon.guacamole.net.auth.UserContext;
|
||||
import org.glyptodon.guacamole.protocol.GuacamoleConfiguration;
|
||||
|
||||
|
||||
/**
|
||||
* Provides means of retrieving a set of named GuacamoleConfigurations for a
|
||||
* given Credentials object. This is a simple AuthenticationProvider
|
||||
* implementation intended to be easily extended. It is useful for simple
|
||||
* authentication situations where access to web-based administration and
|
||||
* complex users and permissions are not required.
|
||||
*
|
||||
* The interface provided by SimpleAuthenticationProvider is similar to that of
|
||||
* the AuthenticationProvider interface of older Guacamole releases.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public abstract class SimpleAuthenticationProvider
|
||||
implements AuthenticationProvider {
|
||||
|
||||
/**
|
||||
* Given an arbitrary credentials object, returns a Map containing all
|
||||
* configurations authorized by those credentials. The keys of this Map
|
||||
* are Strings which uniquely identify each configuration.
|
||||
*
|
||||
* @param credentials The credentials to use to retrieve authorized
|
||||
* configurations.
|
||||
* @return A Map of all configurations authorized by the given credentials,
|
||||
* or null if the credentials given are not authorized.
|
||||
* @throws GuacamoleException If an error occurs while retrieving
|
||||
* configurations.
|
||||
*/
|
||||
public abstract Map<String, GuacamoleConfiguration>
|
||||
getAuthorizedConfigurations(Credentials credentials)
|
||||
throws GuacamoleException;
|
||||
|
||||
@Override
|
||||
public UserContext getUserContext(Credentials credentials)
|
||||
throws GuacamoleException {
|
||||
|
||||
// Get configurations
|
||||
Map<String, GuacamoleConfiguration> configs =
|
||||
getAuthorizedConfigurations(credentials);
|
||||
|
||||
// Return as unauthorized if not authorized to retrieve configs
|
||||
if (configs == null)
|
||||
return null;
|
||||
|
||||
// Return user context restricted to authorized configs
|
||||
return new SimpleUserContext(configs);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserContext updateUserContext(UserContext context,
|
||||
Credentials credentials) throws GuacamoleException {
|
||||
|
||||
// Simply return the given context, updating nothing
|
||||
return context;
|
||||
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,124 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth.simple;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-auth.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.net.GuacamoleSocket;
|
||||
import org.glyptodon.guacamole.net.InetGuacamoleSocket;
|
||||
import org.glyptodon.guacamole.net.SSLGuacamoleSocket;
|
||||
import org.glyptodon.guacamole.net.auth.AbstractConnection;
|
||||
import org.glyptodon.guacamole.net.auth.ConnectionRecord;
|
||||
import org.glyptodon.guacamole.properties.GuacamoleProperties;
|
||||
import org.glyptodon.guacamole.protocol.ConfiguredGuacamoleSocket;
|
||||
import org.glyptodon.guacamole.protocol.GuacamoleClientInformation;
|
||||
import org.glyptodon.guacamole.protocol.GuacamoleConfiguration;
|
||||
|
||||
|
||||
/**
|
||||
* An extremely basic Connection implementation.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public class SimpleConnection extends AbstractConnection {
|
||||
|
||||
/**
|
||||
* Backing configuration, containing all sensitive information.
|
||||
*/
|
||||
private GuacamoleConfiguration config;
|
||||
|
||||
/**
|
||||
* Creates a completely uninitialized SimpleConnection.
|
||||
*/
|
||||
public SimpleConnection() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new SimpleConnection having the given identifier and
|
||||
* GuacamoleConfiguration.
|
||||
*
|
||||
* @param name The name to associate with this connection.
|
||||
* @param identifier The identifier to associate with this connection.
|
||||
* @param config The configuration describing how to connect to this
|
||||
* connection.
|
||||
*/
|
||||
public SimpleConnection(String name, String identifier,
|
||||
GuacamoleConfiguration config) {
|
||||
|
||||
// Set name
|
||||
setName(name);
|
||||
|
||||
// Set identifier
|
||||
setIdentifier(identifier);
|
||||
|
||||
// Set config
|
||||
setConfiguration(config);
|
||||
this.config = config;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public GuacamoleSocket connect(GuacamoleClientInformation info)
|
||||
throws GuacamoleException {
|
||||
|
||||
// Get guacd connection parameters
|
||||
String hostname = GuacamoleProperties.getProperty(GuacamoleProperties.GUACD_HOSTNAME);
|
||||
int port = GuacamoleProperties.getProperty(GuacamoleProperties.GUACD_PORT);
|
||||
|
||||
// If guacd requires SSL, use it
|
||||
if (GuacamoleProperties.getProperty(GuacamoleProperties.GUACD_SSL, false))
|
||||
return new ConfiguredGuacamoleSocket(
|
||||
new SSLGuacamoleSocket(hostname, port),
|
||||
config, info
|
||||
);
|
||||
|
||||
// Return connected socket
|
||||
return new ConfiguredGuacamoleSocket(
|
||||
new InetGuacamoleSocket(hostname, port),
|
||||
config, info
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ConnectionRecord> getHistory() throws GuacamoleException {
|
||||
return Collections.EMPTY_LIST;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,138 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth.simple;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-auth.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.GuacamoleSecurityException;
|
||||
import org.glyptodon.guacamole.net.auth.Connection;
|
||||
import org.glyptodon.guacamole.net.auth.Directory;
|
||||
import org.glyptodon.guacamole.protocol.GuacamoleConfiguration;
|
||||
|
||||
|
||||
/**
|
||||
* An extremely simple read-only implementation of a Directory of
|
||||
* GuacamoleConfigurations which provides access to a pre-defined Map of
|
||||
* GuacamoleConfigurations.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public class SimpleConnectionDirectory
|
||||
implements Directory<String, Connection> {
|
||||
|
||||
/**
|
||||
* The Map of Connections to provide access to.
|
||||
*/
|
||||
private Map<String, Connection> connections =
|
||||
new HashMap<String, Connection>();
|
||||
|
||||
/**
|
||||
* Creates a new SimpleConnectionDirectory which provides
|
||||
* access to the configurations contained within the given Map.
|
||||
*
|
||||
* @param configs The Map of GuacamoleConfigurations to provide access to.
|
||||
*/
|
||||
public SimpleConnectionDirectory(
|
||||
Map<String, GuacamoleConfiguration> configs) {
|
||||
|
||||
// Create connections for each config
|
||||
for (Entry<String, GuacamoleConfiguration> entry : configs.entrySet())
|
||||
connections.put(entry.getKey(),
|
||||
new SimpleConnection(entry.getKey(), entry.getKey(),
|
||||
entry.getValue()));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Connection get(String identifier)
|
||||
throws GuacamoleException {
|
||||
return connections.get(identifier);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getIdentifiers() throws GuacamoleException {
|
||||
return connections.keySet();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(Connection connection)
|
||||
throws GuacamoleException {
|
||||
throw new GuacamoleSecurityException("Permission denied.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Connection connection)
|
||||
throws GuacamoleException {
|
||||
throw new GuacamoleSecurityException("Permission denied.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(String identifier) throws GuacamoleException {
|
||||
throw new GuacamoleSecurityException("Permission denied.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void move(String identifier, Directory<String, Connection> directory)
|
||||
throws GuacamoleException {
|
||||
throw new GuacamoleSecurityException("Permission denied.");
|
||||
}
|
||||
|
||||
/**
|
||||
* An internal method for modifying the Connections in this Directory.
|
||||
* Returns the previous connection for the given identifier, if found.
|
||||
*
|
||||
* @param connection The connection to add or update the Directory with.
|
||||
* @return The previous connection for the connection identifier, if found.
|
||||
*/
|
||||
public Connection putConnection(Connection connection) {
|
||||
return connections.put(connection.getIdentifier(), connection);
|
||||
}
|
||||
|
||||
/**
|
||||
* An internal method for removing a Connection from this Directory.
|
||||
* @param identifier The identifier of the Connection to remove.
|
||||
* @return The previous connection for the given identifier, if found.
|
||||
*/
|
||||
public Connection removeConnection(String identifier) {
|
||||
return connections.remove(identifier);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,119 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth.simple;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): James Muehlner
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.GuacamoleSecurityException;
|
||||
import org.glyptodon.guacamole.net.GuacamoleSocket;
|
||||
import org.glyptodon.guacamole.net.auth.AbstractConnectionGroup;
|
||||
import org.glyptodon.guacamole.net.auth.Connection;
|
||||
import org.glyptodon.guacamole.net.auth.ConnectionGroup;
|
||||
import org.glyptodon.guacamole.net.auth.Directory;
|
||||
import org.glyptodon.guacamole.protocol.GuacamoleClientInformation;
|
||||
|
||||
|
||||
/**
|
||||
* An extremely simple read-only implementation of a ConnectionGroup which
|
||||
* returns the connection and connection group directories it was constructed
|
||||
* with. Load balancing across this connection group is not allowed.
|
||||
*
|
||||
* @author James Muehlner
|
||||
*/
|
||||
public class SimpleConnectionGroup extends AbstractConnectionGroup {
|
||||
|
||||
/**
|
||||
* Underlying connection directory, containing all connections within this
|
||||
* group.
|
||||
*/
|
||||
private final Directory<String, Connection> connectionDirectory;
|
||||
|
||||
/**
|
||||
* Underlying connection group directory, containing all connections within
|
||||
* this group.
|
||||
*/
|
||||
private final Directory<String, ConnectionGroup> connectionGroupDirectory;
|
||||
|
||||
/**
|
||||
* Creates a new SimpleConnectionGroup having the given name and identifier
|
||||
* which will expose the given directories as its contents.
|
||||
*
|
||||
* @param name The name to associate with this connection.
|
||||
* @param identifier The identifier to associate with this connection.
|
||||
* @param connectionDirectory The connection directory to expose when
|
||||
* requested.
|
||||
* @param connectionGroupDirectory The connection group directory to expose
|
||||
* when requested.
|
||||
*/
|
||||
public SimpleConnectionGroup(String name, String identifier,
|
||||
Directory<String, Connection> connectionDirectory,
|
||||
Directory<String, ConnectionGroup> connectionGroupDirectory) {
|
||||
|
||||
// Set name
|
||||
setName(name);
|
||||
|
||||
// Set identifier
|
||||
setIdentifier(identifier);
|
||||
|
||||
// Set group type
|
||||
setType(ConnectionGroup.Type.ORGANIZATIONAL);
|
||||
|
||||
// Assign directories
|
||||
this.connectionDirectory = connectionDirectory;
|
||||
this.connectionGroupDirectory = connectionGroupDirectory;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Directory<String, Connection> getConnectionDirectory()
|
||||
throws GuacamoleException {
|
||||
return connectionDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Directory<String, ConnectionGroup> getConnectionGroupDirectory()
|
||||
throws GuacamoleException {
|
||||
return connectionGroupDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GuacamoleSocket connect(GuacamoleClientInformation info)
|
||||
throws GuacamoleException {
|
||||
throw new GuacamoleSecurityException("Permission denied.");
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,138 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth.simple;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-auth.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): James Muehlner
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.GuacamoleSecurityException;
|
||||
import org.glyptodon.guacamole.net.auth.ConnectionGroup;
|
||||
import org.glyptodon.guacamole.net.auth.Directory;
|
||||
|
||||
|
||||
/**
|
||||
* An extremely simple read-only implementation of a Directory of
|
||||
* ConnectionGroup which provides which provides access to a pre-defined
|
||||
* Collection of ConnectionGroups.
|
||||
*
|
||||
* @author James Muehlner
|
||||
*/
|
||||
public class SimpleConnectionGroupDirectory
|
||||
implements Directory<String, ConnectionGroup> {
|
||||
|
||||
/**
|
||||
* The Map of ConnectionGroups to provide access to.
|
||||
*/
|
||||
private Map<String, ConnectionGroup> connectionGroups =
|
||||
new HashMap<String, ConnectionGroup>();
|
||||
|
||||
/**
|
||||
* Creates a new SimpleConnectionGroupDirectory which contains the given
|
||||
* groups.
|
||||
*
|
||||
* @param groups A Collection of all groups that should be present in this
|
||||
* connection group directory.
|
||||
*/
|
||||
public SimpleConnectionGroupDirectory(Collection<ConnectionGroup> groups) {
|
||||
|
||||
// Add all given groups
|
||||
for (ConnectionGroup group : groups)
|
||||
connectionGroups.put(group.getIdentifier(), group);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConnectionGroup get(String identifier)
|
||||
throws GuacamoleException {
|
||||
return connectionGroups.get(identifier);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getIdentifiers() throws GuacamoleException {
|
||||
return connectionGroups.keySet();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(ConnectionGroup connectionGroup)
|
||||
throws GuacamoleException {
|
||||
throw new GuacamoleSecurityException("Permission denied.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(ConnectionGroup connectionGroup)
|
||||
throws GuacamoleException {
|
||||
throw new GuacamoleSecurityException("Permission denied.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(String identifier) throws GuacamoleException {
|
||||
throw new GuacamoleSecurityException("Permission denied.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void move(String identifier, Directory<String, ConnectionGroup> directory)
|
||||
throws GuacamoleException {
|
||||
throw new GuacamoleSecurityException("Permission denied.");
|
||||
}
|
||||
|
||||
/**
|
||||
* An internal method for modifying the ConnectionGroups in this Directory.
|
||||
* Returns the previous connection group for the given identifier, if found.
|
||||
*
|
||||
* @param connectionGroup The connection group to add or update the
|
||||
* Directory with.
|
||||
* @return The previous connection group for the connection group
|
||||
* identifier, if found.
|
||||
*/
|
||||
public ConnectionGroup putConnectionGroup(ConnectionGroup connectionGroup) {
|
||||
return connectionGroups.put(connectionGroup.getIdentifier(), connectionGroup);
|
||||
}
|
||||
|
||||
/**
|
||||
* An internal method for removing a ConnectionGroup from this Directory.
|
||||
*
|
||||
* @param identifier The identifier of the ConnectionGroup to remove.
|
||||
* @return The previous connection group for the given identifier, if found.
|
||||
*/
|
||||
public ConnectionGroup removeConnectionGroup(String identifier) {
|
||||
return connectionGroups.remove(identifier);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,137 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth.simple;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-auth.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.GuacamoleSecurityException;
|
||||
import org.glyptodon.guacamole.net.auth.AbstractUser;
|
||||
import org.glyptodon.guacamole.net.auth.ConnectionGroup;
|
||||
import org.glyptodon.guacamole.net.auth.permission.ConnectionGroupPermission;
|
||||
import org.glyptodon.guacamole.net.auth.permission.ConnectionPermission;
|
||||
import org.glyptodon.guacamole.net.auth.permission.ObjectPermission;
|
||||
import org.glyptodon.guacamole.net.auth.permission.Permission;
|
||||
import org.glyptodon.guacamole.protocol.GuacamoleConfiguration;
|
||||
|
||||
|
||||
/**
|
||||
* An extremely basic User implementation.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public class SimpleUser extends AbstractUser {
|
||||
|
||||
/**
|
||||
* The set of all permissions available to this user.
|
||||
*/
|
||||
private Set<Permission> permissions = new HashSet<Permission>();
|
||||
|
||||
/**
|
||||
* Creates a completely uninitialized SimpleUser.
|
||||
*/
|
||||
public SimpleUser() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new SimpleUser having the given username.
|
||||
*
|
||||
* @param username The username to assign to this SimpleUser.
|
||||
* @param configs All configurations this user has read access to.
|
||||
* @param groups All groups this user has read access to.
|
||||
*/
|
||||
public SimpleUser(String username,
|
||||
Map<String, GuacamoleConfiguration> configs,
|
||||
Collection<ConnectionGroup> groups) {
|
||||
|
||||
// Set username
|
||||
setUsername(username);
|
||||
|
||||
// Add connection permissions
|
||||
for (String identifier : configs.keySet()) {
|
||||
|
||||
// Create permission
|
||||
Permission permission = new ConnectionPermission(
|
||||
ObjectPermission.Type.READ,
|
||||
identifier
|
||||
);
|
||||
|
||||
// Add to set
|
||||
permissions.add(permission);
|
||||
|
||||
}
|
||||
|
||||
// Add group permissions
|
||||
for (ConnectionGroup group : groups) {
|
||||
|
||||
// Create permission
|
||||
Permission permission = new ConnectionGroupPermission(
|
||||
ObjectPermission.Type.READ,
|
||||
group.getIdentifier()
|
||||
);
|
||||
|
||||
// Add to set
|
||||
permissions.add(permission);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Permission> getPermissions() throws GuacamoleException {
|
||||
return permissions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasPermission(Permission permission) throws GuacamoleException {
|
||||
return permissions.contains(permission);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addPermission(Permission permission) throws GuacamoleException {
|
||||
throw new GuacamoleSecurityException("Permission denied.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removePermission(Permission permission) throws GuacamoleException {
|
||||
throw new GuacamoleSecurityException("Permission denied.");
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,115 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth.simple;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-ext.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.net.auth.ConnectionGroup;
|
||||
import org.glyptodon.guacamole.net.auth.Directory;
|
||||
import org.glyptodon.guacamole.net.auth.User;
|
||||
import org.glyptodon.guacamole.net.auth.UserContext;
|
||||
import org.glyptodon.guacamole.protocol.GuacamoleConfiguration;
|
||||
|
||||
/**
|
||||
* An extremely simple UserContext implementation which provides access to
|
||||
* a defined and restricted set of GuacamoleConfigurations. Access to
|
||||
* querying or modifying either users or permissions is denied.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public class SimpleUserContext implements UserContext {
|
||||
|
||||
/**
|
||||
* Reference to the user whose permissions dictate the configurations
|
||||
* accessible within this UserContext.
|
||||
*/
|
||||
private final User self;
|
||||
|
||||
/**
|
||||
* The Directory with access only to the User associated with this
|
||||
* UserContext.
|
||||
*/
|
||||
private final Directory<String, User> userDirectory;
|
||||
|
||||
/**
|
||||
* The ConnectionGroup with access only to those Connections that the User
|
||||
* associated with this UserContext has access to.
|
||||
*/
|
||||
private final ConnectionGroup connectionGroup;
|
||||
|
||||
/**
|
||||
* Creates a new SimpleUserContext which provides access to only those
|
||||
* configurations within the given Map.
|
||||
*
|
||||
* @param configs A Map of all configurations for which the user associated
|
||||
* with this UserContext has read access.
|
||||
*/
|
||||
public SimpleUserContext(Map<String, GuacamoleConfiguration> configs) {
|
||||
|
||||
// Add root group that contains only configurations
|
||||
this.connectionGroup = new SimpleConnectionGroup("ROOT", "ROOT",
|
||||
new SimpleConnectionDirectory(configs),
|
||||
new SimpleConnectionGroupDirectory(Collections.EMPTY_LIST));
|
||||
|
||||
// Build new user from credentials, giving the user an arbitrary name
|
||||
this.self = new SimpleUser("user",
|
||||
configs, Collections.singleton(connectionGroup));
|
||||
|
||||
// Create user directory for new user
|
||||
this.userDirectory = new SimpleUserDirectory(self);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public User self() {
|
||||
return self;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Directory<String, User> getUserDirectory()
|
||||
throws GuacamoleException {
|
||||
return userDirectory;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ConnectionGroup getRootConnectionGroup() throws GuacamoleException {
|
||||
return connectionGroup;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,109 @@
|
||||
|
||||
package org.glyptodon.guacamole.net.auth.simple;
|
||||
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is guacamole-auth.
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Michael Jumper.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.GuacamoleSecurityException;
|
||||
import org.glyptodon.guacamole.net.auth.Directory;
|
||||
import org.glyptodon.guacamole.net.auth.User;
|
||||
|
||||
|
||||
/**
|
||||
* An extremely simple read-only implementation of a Directory of Users which
|
||||
* provides access to a single pre-defined User.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public class SimpleUserDirectory implements Directory<String, User> {
|
||||
|
||||
/**
|
||||
* The only user to be contained within this directory.
|
||||
*/
|
||||
private User user;
|
||||
|
||||
/**
|
||||
* Creates a new SimpleUserDirectory which provides access to the single
|
||||
* user provided.
|
||||
*
|
||||
* @param user The user to provide access to.
|
||||
*/
|
||||
public SimpleUserDirectory(User user) {
|
||||
this.user = user;
|
||||
}
|
||||
|
||||
@Override
|
||||
public User get(String username) throws GuacamoleException {
|
||||
|
||||
// If username matches, return the user
|
||||
if (user.getUsername().equals(username))
|
||||
return user;
|
||||
|
||||
// Otherwise, not found
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getIdentifiers() throws GuacamoleException {
|
||||
return Collections.singleton(user.getUsername());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(User user) throws GuacamoleException {
|
||||
throw new GuacamoleSecurityException("Permission denied.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(User user) throws GuacamoleException {
|
||||
throw new GuacamoleSecurityException("Permission denied.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void remove(String username) throws GuacamoleException {
|
||||
throw new GuacamoleSecurityException("Permission denied.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void move(String identifier, Directory<String, User> directory)
|
||||
throws GuacamoleException {
|
||||
throw new GuacamoleSecurityException("Permission denied.");
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,8 @@
|
||||
|
||||
/**
|
||||
* Provides a basic AuthenticationProvider base class that can be used to create
|
||||
* simple AuthenticationProviders in the same way allowed by the old
|
||||
* authentication API.
|
||||
*/
|
||||
package org.glyptodon.guacamole.net.auth.simple;
|
||||
|
@@ -0,0 +1,34 @@
|
||||
package org.glyptodon.guacamole.net.event;
|
||||
|
||||
import org.glyptodon.guacamole.net.auth.Credentials;
|
||||
|
||||
/**
|
||||
* An event which is triggered whenever a user's credentials fail to be
|
||||
* authenticated. The credentials that failed to be authenticated are included
|
||||
* within this event, and can be retrieved using getCredentials().
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public class AuthenticationFailureEvent implements CredentialEvent {
|
||||
|
||||
/**
|
||||
* The credentials which failed authentication.
|
||||
*/
|
||||
private Credentials credentials;
|
||||
|
||||
/**
|
||||
* Creates a new AuthenticationFailureEvent which represents the failure
|
||||
* to authenticate the given credentials.
|
||||
*
|
||||
* @param credentials The credentials which failed authentication.
|
||||
*/
|
||||
public AuthenticationFailureEvent(Credentials credentials) {
|
||||
this.credentials = credentials;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Credentials getCredentials() {
|
||||
return credentials;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,49 @@
|
||||
package org.glyptodon.guacamole.net.event;
|
||||
|
||||
import org.glyptodon.guacamole.net.auth.Credentials;
|
||||
import org.glyptodon.guacamole.net.auth.UserContext;
|
||||
|
||||
/**
|
||||
* An event which is triggered whenever a user's credentials pass
|
||||
* authentication. The credentials that passed authentication are included
|
||||
* within this event, and can be retrieved using getCredentials().
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public class AuthenticationSuccessEvent implements UserEvent, CredentialEvent {
|
||||
|
||||
/**
|
||||
* The UserContext associated with the request that is connecting the
|
||||
* tunnel, if any.
|
||||
*/
|
||||
private UserContext context;
|
||||
|
||||
/**
|
||||
* The credentials which passed authentication.
|
||||
*/
|
||||
private Credentials credentials;
|
||||
|
||||
/**
|
||||
* Creates a new AuthenticationSuccessEvent which represents a successful
|
||||
* authentication attempt with the given credentials.
|
||||
*
|
||||
* @param context The UserContext created as a result of successful
|
||||
* authentication.
|
||||
* @param credentials The credentials which passed authentication.
|
||||
*/
|
||||
public AuthenticationSuccessEvent(UserContext context, Credentials credentials) {
|
||||
this.context = context;
|
||||
this.credentials = credentials;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserContext getUserContext() {
|
||||
return context;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Credentials getCredentials() {
|
||||
return credentials;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
package org.glyptodon.guacamole.net.event;
|
||||
|
||||
import org.glyptodon.guacamole.net.auth.Credentials;
|
||||
|
||||
/**
|
||||
* Abstract basis for events which may have associated user credentials when
|
||||
* triggered.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public interface CredentialEvent {
|
||||
|
||||
/**
|
||||
* Returns the current credentials of the user triggering the event, if any.
|
||||
*
|
||||
* @return The current credentials of the user triggering the event, if
|
||||
* any, or null if no credentials are associated with the event.
|
||||
*/
|
||||
Credentials getCredentials();
|
||||
|
||||
}
|
@@ -0,0 +1,66 @@
|
||||
package org.glyptodon.guacamole.net.event;
|
||||
|
||||
import org.glyptodon.guacamole.net.GuacamoleTunnel;
|
||||
import org.glyptodon.guacamole.net.auth.Credentials;
|
||||
import org.glyptodon.guacamole.net.auth.UserContext;
|
||||
|
||||
/**
|
||||
* An event which is triggered whenever a tunnel is being closed. The tunnel
|
||||
* being closed can be accessed through getTunnel(), and the UserContext
|
||||
* associated with the request which is closing the tunnel can be retrieved
|
||||
* with getUserContext().
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public class TunnelCloseEvent implements UserEvent, CredentialEvent, TunnelEvent {
|
||||
|
||||
/**
|
||||
* The UserContext associated with the request that is closing the
|
||||
* tunnel, if any.
|
||||
*/
|
||||
private UserContext context;
|
||||
|
||||
/**
|
||||
* The credentials associated with the request that connected the
|
||||
* tunnel, if any.
|
||||
*/
|
||||
private Credentials credentials;
|
||||
|
||||
/**
|
||||
* The tunnel being closed.
|
||||
*/
|
||||
private GuacamoleTunnel tunnel;
|
||||
|
||||
/**
|
||||
* Creates a new TunnelCloseEvent which represents the closing of the
|
||||
* given tunnel via a request associated with the given credentials.
|
||||
*
|
||||
* @param context The UserContext associated with the request closing
|
||||
* the tunnel.
|
||||
* @param credentials The credentials associated with the request that
|
||||
* connected the tunnel.
|
||||
* @param tunnel The tunnel being closed.
|
||||
*/
|
||||
public TunnelCloseEvent(UserContext context, Credentials credentials,
|
||||
GuacamoleTunnel tunnel) {
|
||||
this.context = context;
|
||||
this.credentials = credentials;
|
||||
this.tunnel = tunnel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserContext getUserContext() {
|
||||
return context;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Credentials getCredentials() {
|
||||
return credentials;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GuacamoleTunnel getTunnel() {
|
||||
return tunnel;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,67 @@
|
||||
package org.glyptodon.guacamole.net.event;
|
||||
|
||||
import org.glyptodon.guacamole.net.GuacamoleTunnel;
|
||||
import org.glyptodon.guacamole.net.auth.Credentials;
|
||||
import org.glyptodon.guacamole.net.auth.UserContext;
|
||||
|
||||
/**
|
||||
* An event which is triggered whenever a tunnel is being connected. The tunnel
|
||||
* being connected can be accessed through getTunnel(), and the UserContext
|
||||
* associated with the request which is connecting the tunnel can be retrieved
|
||||
* with getUserContext().
|
||||
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public class TunnelConnectEvent implements UserEvent, CredentialEvent, TunnelEvent {
|
||||
|
||||
/**
|
||||
* The UserContext associated with the request that is connecting the
|
||||
* tunnel, if any.
|
||||
*/
|
||||
private UserContext context;
|
||||
|
||||
/**
|
||||
* The credentials associated with the request that is connecting the
|
||||
* tunnel, if any.
|
||||
*/
|
||||
private Credentials credentials;
|
||||
|
||||
/**
|
||||
* The tunnel being connected.
|
||||
*/
|
||||
private GuacamoleTunnel tunnel;
|
||||
|
||||
/**
|
||||
* Creates a new TunnelConnectEvent which represents the connecting of the
|
||||
* given tunnel via a request associated with the given credentials.
|
||||
*
|
||||
* @param context The UserContext associated with the request connecting
|
||||
* the tunnel.
|
||||
* @param credentials The credentials associated with the request connecting
|
||||
* the tunnel.
|
||||
* @param tunnel The tunnel being connected.
|
||||
*/
|
||||
public TunnelConnectEvent(UserContext context, Credentials credentials,
|
||||
GuacamoleTunnel tunnel) {
|
||||
this.context = context;
|
||||
this.credentials = credentials;
|
||||
this.tunnel = tunnel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public UserContext getUserContext() {
|
||||
return context;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Credentials getCredentials() {
|
||||
return credentials;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GuacamoleTunnel getTunnel() {
|
||||
return tunnel;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
package org.glyptodon.guacamole.net.event;
|
||||
|
||||
import org.glyptodon.guacamole.net.GuacamoleTunnel;
|
||||
|
||||
/**
|
||||
* Abstract basis for events associated with tunnels.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public interface TunnelEvent {
|
||||
|
||||
/**
|
||||
* Returns the tunnel associated with this event, if any.
|
||||
*
|
||||
* @return The tunnel associated with this event, if any, or null if no
|
||||
* tunnel is associated with this event.
|
||||
*/
|
||||
GuacamoleTunnel getTunnel();
|
||||
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
package org.glyptodon.guacamole.net.event;
|
||||
|
||||
import org.glyptodon.guacamole.net.auth.UserContext;
|
||||
|
||||
/**
|
||||
* Abstract basis for events which may have an associated UserContext when
|
||||
* triggered.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public interface UserEvent {
|
||||
|
||||
/**
|
||||
* Returns the current UserContext of the user triggering the event, if any.
|
||||
*
|
||||
* @return The current UserContext of the user triggering the event, if
|
||||
* any, or null if no UserContext is associated with the event.
|
||||
*/
|
||||
UserContext getUserContext();
|
||||
|
||||
}
|
@@ -0,0 +1,29 @@
|
||||
package org.glyptodon.guacamole.net.event.listener;
|
||||
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.net.event.AuthenticationFailureEvent;
|
||||
|
||||
/**
|
||||
* A listener whose authenticationFailed() hook will fire immediately
|
||||
* after a user's authentication attempt fails. Note that this hook cannot
|
||||
* be used to cancel the authentication failure.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public interface AuthenticationFailureListener {
|
||||
|
||||
/**
|
||||
* Event hook which fires immediately after a user's authentication attempt
|
||||
* fails.
|
||||
*
|
||||
* @param e The AuthenticationFailureEvent describing the authentication
|
||||
* failure that just occurred.
|
||||
* @throws GuacamoleException If an error occurs while handling the
|
||||
* authentication failure event. Note that
|
||||
* throwing an exception will NOT cause the
|
||||
* authentication failure to be canceled.
|
||||
*/
|
||||
void authenticationFailed(AuthenticationFailureEvent e)
|
||||
throws GuacamoleException;
|
||||
|
||||
}
|
@@ -0,0 +1,34 @@
|
||||
package org.glyptodon.guacamole.net.event.listener;
|
||||
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.net.event.AuthenticationSuccessEvent;
|
||||
|
||||
/**
|
||||
* A listener whose hooks will fire immediately before and after a user's
|
||||
* authentication attempt succeeds. If a user successfully authenticates,
|
||||
* the authenticationSucceeded() hook has the opportunity to cancel the
|
||||
* authentication and force it to fail.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public interface AuthenticationSuccessListener {
|
||||
|
||||
/**
|
||||
* Event hook which fires immediately after a user's authentication attempt
|
||||
* succeeds. The return value of this hook dictates whether the
|
||||
* successful authentication attempt is canceled.
|
||||
*
|
||||
* @param e The AuthenticationFailureEvent describing the authentication
|
||||
* failure that just occurred.
|
||||
* @return true if the successful authentication attempt should be
|
||||
* allowed, or false if the attempt should be denied, causing
|
||||
* the attempt to effectively fail.
|
||||
* @throws GuacamoleException If an error occurs while handling the
|
||||
* authentication success event. Throwing an
|
||||
* exception will also cancel the authentication
|
||||
* success.
|
||||
*/
|
||||
boolean authenticationSucceeded(AuthenticationSuccessEvent e)
|
||||
throws GuacamoleException;
|
||||
|
||||
}
|
@@ -0,0 +1,31 @@
|
||||
package org.glyptodon.guacamole.net.event.listener;
|
||||
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.net.event.TunnelCloseEvent;
|
||||
|
||||
/**
|
||||
* A listener whose tunnelClosed() hook will fire immediately after an
|
||||
* existing tunnel is closed.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public interface TunnelCloseListener {
|
||||
|
||||
/**
|
||||
* Event hook which fires immediately after an existing tunnel is closed.
|
||||
* The return value of this hook dictates whether the tunnel is allowed to
|
||||
* be closed.
|
||||
*
|
||||
* @param e The TunnelCloseEvent describing the tunnel being closed and
|
||||
* any associated credentials.
|
||||
* @return true if the tunnel should be allowed to be closed, or false
|
||||
* if the attempt should be denied, causing the attempt to
|
||||
* effectively fail.
|
||||
* @throws GuacamoleException If an error occurs while handling the
|
||||
* tunnel close event. Throwing an exception
|
||||
* will also stop the tunnel from being closed.
|
||||
*/
|
||||
boolean tunnelClosed(TunnelCloseEvent e)
|
||||
throws GuacamoleException;
|
||||
|
||||
}
|
@@ -0,0 +1,32 @@
|
||||
package org.glyptodon.guacamole.net.event.listener;
|
||||
|
||||
import org.glyptodon.guacamole.GuacamoleException;
|
||||
import org.glyptodon.guacamole.net.event.TunnelConnectEvent;
|
||||
|
||||
/**
|
||||
* A listener whose tunnelConnected() hook will fire immediately after a new
|
||||
* tunnel is connected.
|
||||
*
|
||||
* @author Michael Jumper
|
||||
*/
|
||||
public interface TunnelConnectListener {
|
||||
|
||||
/**
|
||||
* Event hook which fires immediately after a new tunnel is connected.
|
||||
* The return value of this hook dictates whether the tunnel is made visible
|
||||
* to the session.
|
||||
*
|
||||
* @param e The TunnelConnectEvent describing the tunnel being connected and
|
||||
* any associated credentials.
|
||||
* @return true if the tunnel should be allowed to be connected, or false
|
||||
* if the attempt should be denied, causing the attempt to
|
||||
* effectively fail.
|
||||
* @throws GuacamoleException If an error occurs while handling the
|
||||
* tunnel connect event. Throwing an exception
|
||||
* will also stop the tunnel from being made
|
||||
* visible to the session.
|
||||
*/
|
||||
boolean tunnelConnected(TunnelConnectEvent e)
|
||||
throws GuacamoleException;
|
||||
|
||||
}
|
@@ -0,0 +1,10 @@
|
||||
|
||||
/**
|
||||
* Provides classes for hooking into various events that take place as
|
||||
* users log into and use the Guacamole web application. These event
|
||||
* hooks can be used to take action upon occurrence of an event and,
|
||||
* in some cases, prevent the web application from allowing the
|
||||
* event to continue for the user that triggered it.
|
||||
*/
|
||||
package org.glyptodon.guacamole.net.event.listener;
|
||||
|
@@ -0,0 +1,11 @@
|
||||
|
||||
/**
|
||||
* Provides classes for storing information about events that are
|
||||
* triggered when users log into and use the Guacamole web application.
|
||||
* These event classes are most useful when used with hooks implemented
|
||||
* using listener classes.
|
||||
*
|
||||
* @see org.glyptodon.guacamole.net.event.listener
|
||||
*/
|
||||
package org.glyptodon.guacamole.net.event;
|
||||
|
Reference in New Issue
Block a user