From f9f78a64fc8b77219b2d996a25d6e238071bb65c Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Wed, 20 Apr 2016 12:08:30 -0700 Subject: [PATCH] GUACAMOLE-5: Define UserCredentials object which couples a CredentialsInfo with defined parameter values. --- .../net/auth/credentials/UserCredentials.java | 220 ++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 guacamole-ext/src/main/java/org/apache/guacamole/net/auth/credentials/UserCredentials.java diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/credentials/UserCredentials.java b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/credentials/UserCredentials.java new file mode 100644 index 000000000..e88706f1c --- /dev/null +++ b/guacamole-ext/src/main/java/org/apache/guacamole/net/auth/credentials/UserCredentials.java @@ -0,0 +1,220 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.guacamole.net.auth.credentials; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import org.apache.guacamole.form.Field; + +/** + * A fully-valid set of credentials and associated values. Each instance of + * this object should describe a full set of parameter name/value pairs which + * can be used to authenticate successfully, even if that success depends on + * factors not described by this object. + * + * @author Michael Jumper + */ +public class UserCredentials extends CredentialsInfo { + + /** + * All fields required for valid credentials. + */ + private Map values; + + /** + * Creates a new UserCredentials object which requires the given fields and + * values. + * + * @param fields + * The fields to require. + * + * @param values + * The values required for each field, as a map of field name to + * correct value. + */ + public UserCredentials(Collection fields, Map values) { + super(fields); + this.values = values; + } + + /** + * Creates a new UserCredentials object which requires fields described by + * the given CredentialsInfo. The value required for each field in the + * CredentialsInfo is defined in the given Map. + * + * @param info + * The CredentialsInfo object describing the fields to require. + * + * @param values + * The values required for each field, as a map of field name to + * correct value. + */ + public UserCredentials(CredentialsInfo info, Map values) { + this(info.getFields(), values); + } + + /** + * Creates a new UserCredentials object which requires fields described by + * the given CredentialsInfo but does not yet have any defined values. + * + * @param info + * The CredentialsInfo object describing the fields to require. + */ + public UserCredentials(CredentialsInfo info) { + this(info, new HashMap()); + } + + /** + * Creates a new UserCredentials object which requires the given fields but + * does not yet have any defined values. + * + * @param fields + * The fields to require. + */ + public UserCredentials(Collection fields) { + this(fields, new HashMap()); + } + + /** + * Returns a map of field names to values which backs this UserCredentials + * object. Modifications to the returned map will directly affect the + * associated name/value pairs. + * + * @return + * A map of field names to their corresponding values which backs this + * UserCredentials object. + */ + public Map getValues() { + return values; + } + + /** + * Replaces the map backing this UserCredentials object with the given map. + * All field name/value pairs described by the original map are replaced by + * the name/value pairs in the given map. + * + * @param values + * The map of field names to their corresponding values which should be + * used to back this UserCredentials object. + */ + public void setValues(Map values) { + this.values = values; + } + + /** + * Returns the value defined by this UserCrendentials object for the field + * having the given name. + * + * @param name + * The name of the field whose value should be returned. + * + * @return + * The value of the field having the given name, or null if no value is + * defined for that field. + */ + public String getValue(String name) { + return values.get(name); + } + + /** + * Returns the value defined by this UserCrendentials object for the given + * field. + * + * @param field + * The field whose value should be returned. + * + * @return + * The value of the given field, or null if no value is defined for + * that field. + */ + public String getValue(Field field) { + return getValue(field.getName()); + } + + /** + * Sets the value of the field having the given name. Any existing value + * for that field is replaced. + * + * @param name + * The name of the field whose value should be assigned. + * + * @param value + * The value to assign to the field having the given name. + * + * @return + * The previous value of the field, or null if the value of the field + * was not previously defined. + */ + public String setValue(String name, String value) { + return values.put(name, value); + } + + /** + * Sets the value of the given field. Any existing value for that field is + * replaced. + * + * @param field + * The field whose value should be assigned. + * + * @param value + * The value to assign to the given field. + * + * @return + * The previous value of the field, or null if the value of the field + * was not previously defined. + */ + public String setValue(Field field, String value) { + return setValue(field.getName(), value); + } + + /** + * Removes (undefines) the value of the field having the given name, + * returning its previous value. If the field value was not defined, this + * function has no effect, and null is returned. + * + * @param name + * The name of the field whose value should be removed. + * + * @return + * The previous value of the field, or null if the value of the field + * was not previously defined. + */ + public String removeValue(String name) { + return values.remove(name); + } + + /** + * Removes (undefines) the value of the given field returning its previous + * value. If the field value was not defined, this function has no effect, + * and null is returned. + * + * @param field + * The field whose value should be removed. + * + * @return + * The previous value of the field, or null if the value of the field + * was not previously defined. + */ + public String removeValue(Field field) { + return removeValue(field.getName()); + } + +}