/*
* Copyright (c) 2011-2019 Contributors to the Eclipse Foundation
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
* which is available at https://www.apache.org/licenses/LICENSE-2.0.
*
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
*/
package io.vertx.mysqlclient;
import io.vertx.codegen.annotations.DataObject;
import io.vertx.codegen.annotations.GenIgnore;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.json.JsonObject;
import io.vertx.mysqlclient.impl.MySQLCollation;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import static io.vertx.mysqlclient.MySQLConnectOptions.*;
Authentication options for MySQL authentication which can be used for CHANGE_USER command.
/**
* Authentication options for MySQL authentication which can be used for CHANGE_USER command.
*/
@DataObject(generateConverter = true)
public class MySQLAuthOptions {
private String user;
private String password;
private String database;
private String collation;
private String charset;
private String serverRsaPublicKeyPath;
private Buffer serverRsaPublicKeyValue;
private Map<String, String> properties;
public MySQLAuthOptions() {
init();
}
public MySQLAuthOptions(JsonObject json) {
init();
MySQLAuthOptionsConverter.fromJson(json, this);
}
public MySQLAuthOptions(MySQLAuthOptions other) {
init();
this.user = other.user;
this.password = other.password;
this.database = other.database;
this.collation = other.collation;
this.charset = other.charset;
this.serverRsaPublicKeyPath = other.serverRsaPublicKeyPath;
this.serverRsaPublicKeyValue = other.serverRsaPublicKeyValue != null ? other.serverRsaPublicKeyValue.copy() : null;
this.properties = new HashMap<>(other.properties);
}
Get the user account to be used for the authentication.
Returns: the user
/**
* Get the user account to be used for the authentication.
*
* @return the user
*/
public String getUser() {
return user;
}
Specify the user account to be used for the authentication.
Params: - user – the user to specify
Returns: a reference to this, so the API can be used fluently
/**
* Specify the user account to be used for the authentication.
*
* @param user the user to specify
* @return a reference to this, so the API can be used fluently
*/
public MySQLAuthOptions setUser(String user) {
Objects.requireNonNull(user, "User account can not be null");
this.user = user;
return this;
}
Get the user password to be used for the authentication.
Returns: the password
/**
* Get the user password to be used for the authentication.
*
* @return the password
*/
public String getPassword() {
return password;
}
Specify the user password to be used for the authentication.
Params: - password – the password to specify
Returns: a reference to this, so the API can be used fluently
/**
* Specify the user password to be used for the authentication.
*
* @param password the password to specify
* @return a reference to this, so the API can be used fluently
*/
public MySQLAuthOptions setPassword(String password) {
Objects.requireNonNull(password, "Password can not be null");
this.password = password;
return this;
}
Get the database name for the re-authentication.
Returns: the database name
/**
* Get the database name for the re-authentication.
*
* @return the database name
*/
public String getDatabase() {
return database;
}
Specify the default database for the re-authentication.
Params: - database – the database name to specify
Returns: a reference to this, so the API can be used fluently
/**
* Specify the default database for the re-authentication.
*
* @param database the database name to specify
* @return a reference to this, so the API can be used fluently
*/
public MySQLAuthOptions setDatabase(String database) {
Objects.requireNonNull(database, "Database name can not be null");
this.database = database;
return this;
}
Returns: the value of current connection attributes
/**
* @return the value of current connection attributes
*/
public Map<String, String> getProperties() {
return properties;
}
Set connection attributes which will be sent to server at the re-authentication.
Params: - properties – the value of properties to specify
Returns: a reference to this, so the API can be used fluently
/**
* Set connection attributes which will be sent to server at the re-authentication.
*
* @param properties the value of properties to specify
* @return a reference to this, so the API can be used fluently
*/
public MySQLAuthOptions setProperties(Map<String, String> properties) {
Objects.requireNonNull(properties, "Properties can not be null");
this.properties = properties;
return this;
}
Add a property for this client, which will be sent to server at the re-authentication.
Params: - key – the value of property key
- value – the value of property value
Returns: a reference to this, so the API can be used fluently
/**
* Add a property for this client, which will be sent to server at the re-authentication.
*
* @param key the value of property key
* @param value the value of property value
* @return a reference to this, so the API can be used fluently
*/
@GenIgnore
public MySQLAuthOptions addProperty(String key, String value) {
Objects.requireNonNull(key, "Property key can not be null");
Objects.requireNonNull(value, "Property value can not be null");
this.properties.put(key, value);
return this;
}
Get the collation for the connection.
Returns: the MySQL collation
/**
* Get the collation for the connection.
*
* @return the MySQL collation
*/
public String getCollation() {
return collation;
}
Set the collation for the connection.
Params: - collation – the collation to set
Returns: a reference to this, so the API can be used fluently
/**
* Set the collation for the connection.
*
* @param collation the collation to set
* @return a reference to this, so the API can be used fluently
*/
public MySQLAuthOptions setCollation(String collation) {
if (collation != null && !MySQLCollation.SUPPORTED_COLLATION_NAMES.contains(collation)) {
throw new IllegalArgumentException("Unsupported collation: " + collation);
}
this.collation = collation;
return this;
}
Get the charset for the connection.
Returns: the MySQL collation
/**
* Get the charset for the connection.
*
* @return the MySQL collation
*/
public String getCharset() {
return charset;
}
Set the charset for the connection.
Params: - charset – the charset to set
Returns: a reference to this, so the API can be used fluently
/**
* Set the charset for the connection.
*
* @param charset the charset to set
* @return a reference to this, so the API can be used fluently
*/
public MySQLAuthOptions setCharset(String charset) {
if (charset != null && !MySQLCollation.SUPPORTED_CHARSET_NAMES.contains(charset)) {
throw new IllegalArgumentException("Unsupported charset: " + charset);
}
this.charset = charset;
return this;
}
Get the path of the server RSA public key.
Returns: a reference to this, so the API can be used fluently
/**
* Get the path of the server RSA public key.
*
* @return a reference to this, so the API can be used fluently
*/
public String getServerRsaPublicKeyPath() {
return serverRsaPublicKeyPath;
}
Set the path of server RSA public key which is mostly used for encrypting password under insecure connections when performing authentication.
Params: - serverRsaPublicKeyPath – the path of the server RSA public key
Returns: a reference to this, so the API can be used fluently
/**
* Set the path of server RSA public key which is mostly used for encrypting password under insecure connections when performing authentication.
*
* @param serverRsaPublicKeyPath the path of the server RSA public key
* @return a reference to this, so the API can be used fluently
*/
public MySQLAuthOptions setServerRsaPublicKeyPath(String serverRsaPublicKeyPath) {
this.serverRsaPublicKeyPath = serverRsaPublicKeyPath;
return this;
}
Get the value of the server RSA public key.
Returns: a reference to this, so the API can be used fluently
/**
* Get the value of the server RSA public key.
*
* @return a reference to this, so the API can be used fluently
*/
public Buffer getServerRsaPublicKeyValue() {
return serverRsaPublicKeyValue;
}
Set the value of server RSA public key which is mostly used for encrypting password under insecure connections when performing authentication.
Params: - serverRsaPublicKeyValue – the path of the server RSA public key
Returns: a reference to this, so the API can be used fluently
/**
* Set the value of server RSA public key which is mostly used for encrypting password under insecure connections when performing authentication.
*
* @param serverRsaPublicKeyValue the path of the server RSA public key
* @return a reference to this, so the API can be used fluently
*/
public MySQLAuthOptions setServerRsaPublicKeyValue(Buffer serverRsaPublicKeyValue) {
this.serverRsaPublicKeyValue = serverRsaPublicKeyValue;
return this;
}
public JsonObject toJson() {
JsonObject json = new JsonObject();
MySQLAuthOptionsConverter.toJson(this, json);
return json;
}
private void init() {
this.user = DEFAULT_USER;
this.password = DEFAULT_PASSWORD;
this.database = DEFAULT_SCHEMA;
this.charset = DEFAULT_CHARSET;
this.properties = new HashMap<>(DEFAULT_CONNECTION_ATTRIBUTES);
}
}