package io.dropwizard.client.proxy;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.dropwizard.validation.OneOf;
import io.dropwizard.validation.PortRange;
import org.hibernate.validator.constraints.NotEmpty;
import javax.annotation.Nullable;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
Configuration of access to a remote host through a proxy server
Configuration Parameters:
Name
Default
Description
host
REQUIRED
The proxy server host name or ip address.
port
scheme default
The proxy server port. If the port is not set then the scheme default port is used.
scheme
http
The proxy server URI scheme. HTTP and HTTPS schemas are permitted. By default HTTP scheme is used.
auth
(none)
The proxy server AuthConfiguration
BASIC authentication credentials. If they are not set then no credentials will be passed to the server.
nonProxyHosts
(none)
List of patterns of hosts that should be reached without proxy.
The patterns may contain symbol '*' as a wildcard.
If a host matches one of the patterns it will be reached through a direct connection.
/**
* Configuration of access to a remote host through a proxy server
* <p/>
* <b>Configuration Parameters:</b>
* <table>
* <tr>
* <td>Name</td>
* <td>Default</td>
* <td>Description</td>
* </tr>
* <tr>
* <td>{@code host}</td>
* <td>REQUIRED</td>
* <td>The proxy server host name or ip address.</td>
* </tr>
* <tr>
* <td>{@code port}</td>
* <td>scheme default</td>
* <td>The proxy server port. If the port is not set then the scheme default port is used.</td>
* </tr>
* <tr>
* <td>{@code scheme}</td>
* <td>http</td>
* <td>The proxy server URI scheme. HTTP and HTTPS schemas are permitted. By default HTTP scheme is used.</td>
* </tr>
* <tr>
* <td>{@code auth}</td>
* <td>(none)</td>
* <td>
* The proxy server {@link io.dropwizard.client.proxy.AuthConfiguration} BASIC authentication credentials.
* If they are not set then no credentials will be passed to the server.
* </td>
* </tr>
* <tr>
* <td>{@code nonProxyHosts}</td>
* <td>(none)</td>
* <td>
* List of patterns of hosts that should be reached without proxy.
* The patterns may contain symbol '*' as a wildcard.
* If a host matches one of the patterns it will be reached through a direct connection.
* </td>
* </tr>
* </table>
*/
public class ProxyConfiguration {
@NotEmpty
private String host = "";
@PortRange(min = -1)
private Integer port = -1;
@OneOf(value = {"http", "https"}, ignoreCase = true)
private String scheme = "http";
@Valid
@Nullable
private AuthConfiguration auth;
@Nullable
private List<String> nonProxyHosts;
public ProxyConfiguration() {
}
public ProxyConfiguration(@NotNull String host) {
this.host = host;
}
public ProxyConfiguration(@NotNull String host, int port) {
this(host);
this.port = port;
}
public ProxyConfiguration(@NotNull String host, int port, String scheme, AuthConfiguration auth) {
this(host, port);
this.scheme = scheme;
this.auth = auth;
}
@JsonProperty
public String getHost() {
return host;
}
@JsonProperty
public void setHost(String host) {
this.host = host;
}
@JsonProperty
public Integer getPort() {
return port;
}
@JsonProperty
public void setPort(Integer port) {
this.port = port;
}
@JsonProperty
public String getScheme() {
return scheme;
}
@JsonProperty
public void setScheme(String scheme) {
this.scheme = scheme;
}
@JsonProperty
@Nullable
public List<String> getNonProxyHosts() {
return nonProxyHosts;
}
@JsonProperty
public void setNonProxyHosts(List<String> nonProxyHosts) {
this.nonProxyHosts = nonProxyHosts;
}
@Nullable
public AuthConfiguration getAuth() {
return auth;
}
public void setAuth(AuthConfiguration auth) {
this.auth = auth;
}
}