Skip to content

Commit

Permalink
fixes networknt#794 switch OauthHelper to HttpClient of jdk11 to supp…
Browse files Browse the repository at this point in the history
…ort forward proxy (networknt#795)
  • Loading branch information
stevehu committed Nov 8, 2020
1 parent a3b0996 commit da0029e
Show file tree
Hide file tree
Showing 22 changed files with 386 additions and 621 deletions.
2 changes: 2 additions & 0 deletions client/src/main/java/com/networknt/client/ClientConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ public final class ClientConfig {
public static final String CONFIG_SECRET = "secret";
public static final String REQUEST = "request";
public static final String SERVER_URL = "server_url";
public static final String PROXY_HOST = "proxyHost";
public static final String PROXY_PORT = "proxyPort";
public static final String SERVICE_ID = "serviceId";
public static final String URI = "uri";
public static final String CLIENT_ID = "client_id";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ public BodyPart getBody(String key) {

/**
* Indicates whether this entity has a body part by the key.
* @param key the key
* @return true if has body
*/
public boolean hasBody(String key) {
return (this.bodyPartMap==null? false : this.bodyPartMap.containsKey(key) );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ public AuthorizationCodeRequest() {
Map<String, Object> tokenConfig = ClientConfig.get().getTokenConfig();
if(tokenConfig != null) {
setServerUrl((String)tokenConfig.get(ClientConfig.SERVER_URL));
setProxyHost((String)tokenConfig.get(ClientConfig.PROXY_HOST));
int port = tokenConfig.get(ClientConfig.PROXY_PORT) == null ? 443 : (Integer)tokenConfig.get(ClientConfig.PROXY_PORT);
setProxyPort(port);
setServiceId((String)tokenConfig.get(ClientConfig.SERVICE_ID));
Object object = tokenConfig.get(ClientConfig.ENABLE_HTTP2);
setEnableHttp2(object != null && (Boolean) object);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@ public class ClientAuthenticatedUserRequest extends TokenRequest {
/**
* load default values from client.yml for client authenticated user grant, overwrite by setters
* in case you want to change it at runtime.
* @param userType user type
* @param userId user id
* @param roles user roles
*/
public ClientAuthenticatedUserRequest(String userType, String userId, String roles) {
setGrantType(ClientConfig.CLIENT_AUTHENTICATED_USER);
Expand All @@ -26,6 +29,9 @@ public ClientAuthenticatedUserRequest(String userType, String userId, String rol
Map<String, Object> tokenConfig = ClientConfig.get().getTokenConfig();
if(tokenConfig != null) {
setServerUrl((String)tokenConfig.get(ClientConfig.SERVER_URL));
setProxyHost((String)tokenConfig.get(ClientConfig.PROXY_HOST));
int port = tokenConfig.get(ClientConfig.PROXY_PORT) == null ? 443 : (Integer)tokenConfig.get(ClientConfig.PROXY_PORT);
setProxyPort(port);
setServiceId((String)tokenConfig.get(ClientConfig.SERVICE_ID));
Object object = tokenConfig.get(ClientConfig.ENABLE_HTTP2);
setEnableHttp2(object != null && (Boolean) object);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ public ClientCredentialsRequest() {
Map<String, Object> tokenConfig = ClientConfig.get().getTokenConfig();
if(tokenConfig != null) {
setServerUrl((String)tokenConfig.get(ClientConfig.SERVER_URL));
setProxyHost((String)tokenConfig.get(ClientConfig.PROXY_HOST));
int port = tokenConfig.get(ClientConfig.PROXY_PORT) == null ? 443 : (Integer)tokenConfig.get(ClientConfig.PROXY_PORT);
setProxyPort(port);
setServiceId((String)tokenConfig.get(ClientConfig.SERVICE_ID));
Object object = tokenConfig.get(ClientConfig.ENABLE_HTTP2);
setEnableHttp2(object != null && (Boolean) object);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package com.networknt.client.oauth;

import com.networknt.client.Http2Client;
import io.undertow.client.ClientRequest;
import io.undertow.util.Headers;
import io.undertow.util.Methods;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.http.HttpRequest;
import java.util.HashMap;
import java.util.Map;

Expand Down Expand Up @@ -77,15 +77,15 @@ public void registerComposer(ClientRequestComposers composerName, IClientRequest
private static class DefaultSAMLBearerRequestComposer implements IClientRequestComposable {

@Override
public ClientRequest composeClientRequest(TokenRequest tokenRequest) {
ClientRequest request = new ClientRequest().setMethod(Methods.POST).setPath(tokenRequest.getUri());
request.getRequestHeaders().put(Headers.HOST, "localhost");
request.getRequestHeaders().put(Headers.TRANSFER_ENCODING, "chunked");
request.getRequestHeaders().put(Headers.CONTENT_TYPE, "application/x-www-form-urlencoded");
public HttpRequest composeClientRequest(TokenRequest tokenRequest) {
final HttpRequest request = HttpRequest.newBuilder()
.POST(HttpRequest.BodyPublishers.ofString(composeRequestBody(tokenRequest)))
.uri(URI.create(tokenRequest.getServerUrl() + tokenRequest.getUri()))
.header(Headers.CONTENT_TYPE_STRING, "application/x-www-form-urlencoded")
.build();
return request;
}

@Override
public String composeRequestBody(TokenRequest tokenRequest) {
SAMLBearerRequest SamlTokenRequest = (SAMLBearerRequest)tokenRequest;
Map<String, String> postBody = new HashMap<>();
Expand All @@ -108,16 +108,16 @@ public String composeRequestBody(TokenRequest tokenRequest) {
private static class DefaultClientCredentialRequestComposer implements IClientRequestComposable {

@Override
public ClientRequest composeClientRequest(TokenRequest tokenRequest) {
final ClientRequest request = new ClientRequest().setMethod(Methods.POST).setPath(tokenRequest.getUri());
request.getRequestHeaders().put(Headers.HOST, "localhost");
request.getRequestHeaders().put(Headers.TRANSFER_ENCODING, "chunked");
request.getRequestHeaders().put(Headers.CONTENT_TYPE, "application/x-www-form-urlencoded");
request.getRequestHeaders().put(Headers.AUTHORIZATION, OauthHelper.getBasicAuthHeader(tokenRequest.getClientId(), tokenRequest.getClientSecret()));
public HttpRequest composeClientRequest(TokenRequest tokenRequest) {
final HttpRequest request = HttpRequest.newBuilder()
.POST(HttpRequest.BodyPublishers.ofString(composeRequestBody(tokenRequest)))
.uri(URI.create(tokenRequest.getServerUrl() + tokenRequest.getUri()))
.setHeader(Headers.CONTENT_TYPE_STRING, "application/x-www-form-urlencoded")
.setHeader(Headers.AUTHORIZATION_STRING, OauthHelper.getBasicAuthHeader(tokenRequest.getClientId(), tokenRequest.getClientSecret()))
.build();
return request;
}

@Override
public String composeRequestBody(TokenRequest tokenRequest) {
try {
return OauthHelper.getEncodedString(tokenRequest);
Expand All @@ -134,16 +134,17 @@ public String composeRequestBody(TokenRequest tokenRequest) {
private static class DefaultClientAuthenticatedUserRequestComposer implements IClientRequestComposable {

@Override
public ClientRequest composeClientRequest(TokenRequest tokenRequest) {
final ClientRequest request = new ClientRequest().setMethod(Methods.POST).setPath(tokenRequest.getUri());
request.getRequestHeaders().put(Headers.HOST, "localhost");
request.getRequestHeaders().put(Headers.TRANSFER_ENCODING, "chunked");
request.getRequestHeaders().put(Headers.CONTENT_TYPE, "application/x-www-form-urlencoded");
request.getRequestHeaders().put(Headers.AUTHORIZATION, OauthHelper.getBasicAuthHeader(tokenRequest.getClientId(), tokenRequest.getClientSecret()));
public HttpRequest composeClientRequest(TokenRequest tokenRequest) {
final HttpRequest request = HttpRequest.newBuilder()
.POST(HttpRequest.BodyPublishers.ofString(composeRequestBody(tokenRequest)))
.uri(URI.create(tokenRequest.getServerUrl() + tokenRequest.getUri()))
.setHeader(Headers.CONTENT_TYPE_STRING, "application/x-www-form-urlencoded")
.setHeader(Headers.AUTHORIZATION_STRING, OauthHelper.getBasicAuthHeader(tokenRequest.getClientId(), tokenRequest.getClientSecret()))
.build();

return request;
}

@Override
public String composeRequestBody(TokenRequest tokenRequest) {
try {
return OauthHelper.getEncodedString(tokenRequest);
Expand All @@ -153,5 +154,4 @@ public String composeRequestBody(TokenRequest tokenRequest) {
return "";
}
}

}
64 changes: 21 additions & 43 deletions client/src/main/java/com/networknt/client/oauth/DerefRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,50 +24,9 @@
import java.util.Map;

public class DerefRequest {

/**
* @deprecated will be move to {@link ClientConfig#OAUTH}
*/
@Deprecated
public static String OAUTH = "oauth";

/**
* @deprecated will be move to {@link ClientConfig#DEREF}
*/
@Deprecated
public static String DEREF = "deref";

/**
* @deprecated will be move to {@link ClientConfig#SERVER_URL}
*/
@Deprecated
public static String SERVER_URL = "server_url";

/**
* @deprecated will be move to {@link ClientConfig#SERVICE_ID}
*/
@Deprecated
public static String SERVICE_ID = "serviceId";

/**
* @deprecated will be move to {@link ClientConfig#URI}
*/
@Deprecated
public static String URI = "uri";

/**
* @deprecated will be move to {@link ClientConfig#CLIENT_ID}
*/
@Deprecated
public static String CLIENT_ID = "client_id";

/**
* @deprecated will be move to {@link ClientConfig#ENABLE_HTTP2}
*/
@Deprecated
public static String ENABLE_HTTP2 = "enableHttp2";

private String serverUrl;
private String proxyHost;
private int proxyPort;
private String serviceId;
private String uri;
private String clientId;
Expand All @@ -78,6 +37,9 @@ public DerefRequest(String token) {
Map<String, Object> derefConfig = ClientConfig.get().getDerefConfig();
if(derefConfig != null) {
setServerUrl((String)derefConfig.get(ClientConfig.SERVER_URL));
setProxyHost((String)derefConfig.get(ClientConfig.PROXY_HOST));
int port = derefConfig.get(ClientConfig.PROXY_PORT) == null ? 443 : (Integer)derefConfig.get(ClientConfig.PROXY_PORT);
setProxyPort(port);
setServiceId((String)derefConfig.get(ClientConfig.SERVICE_ID));
Object object = derefConfig.get(ClientConfig.ENABLE_HTTP2);
setEnableHttp2(object != null && (Boolean) object);
Expand Down Expand Up @@ -136,4 +98,20 @@ public void setServiceId(String serviceId) {
public boolean isEnableHttp2() { return enableHttp2; }

public void setEnableHttp2(boolean enableHttp2) { this.enableHttp2 = enableHttp2; }

public String getProxyHost() {
return proxyHost;
}

public void setProxyHost(String proxyHost) {
this.proxyHost = proxyHost;
}

public int getProxyPort() {
return proxyPort;
}

public void setProxyPort(int proxyPort) {
this.proxyPort = proxyPort;
}
}
Original file line number Diff line number Diff line change
@@ -1,23 +1,20 @@
package com.networknt.client.oauth;

import io.undertow.client.ClientRequest;

import java.net.http.HttpRequest;

/**
* An interface to describe that a ClientRequest can be composed by a TokenRequest.
* TokenRequest info should be the same for different Oauth servers, but different Oauth servers may have different way to accept request.
* An interface to describe that a HttpRequest can be composed by a TokenRequest. TokenRequest info should be the
* same for different OAuth servers, but different OAuth servers may have different way to accept request.
*
* @author Steve Hu
*/
public interface IClientRequestComposable {
/**
* compose an actual ClientRequest based on the given TokenRequest model.
* compose an actual HttpRequest based on the given TokenRequest model.
* @param tokenRequest token request
* @return ClientRequest
* @return HttpRequest
*/
ClientRequest composeClientRequest(TokenRequest tokenRequest);
HttpRequest composeClientRequest(TokenRequest tokenRequest);

/**
* compose an actual request body based on the given TokenRequest model.
* @param tokenRequest token request
* @return String
*/
String composeRequestBody(TokenRequest tokenRequest);
}
67 changes: 18 additions & 49 deletions client/src/main/java/com/networknt/client/oauth/KeyRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,56 +28,9 @@
*
*/
public class KeyRequest {

/**
* @deprecated will be move to {@link ClientConfig#OAUTH}
*/
@Deprecated
public static String OAUTH = "oauth";

/**
* @deprecated will be move to {@link ClientConfig#KEY}
*/
@Deprecated
public static String KEY = "key";

/**
* @deprecated will be move to {@link ClientConfig#SERVER_URL}
*/
@Deprecated
public static String SERVER_URL = "server_url";

/**
* @deprecated will be move to {@link ClientConfig#SERVICE_ID}
*/
@Deprecated
public static String SERVICE_ID = "serviceId";

/**
* @deprecated will be move to {@link ClientConfig#URI}
*/
@Deprecated
public static String URI = "uri";

/**
* @deprecated will be move to {@link ClientConfig#CLIENT_ID}
*/
@Deprecated
public static String CLIENT_ID = "client_id";

/**
* @deprecated will be move to {@link ClientConfig#CLIENT_SECRET}
*/
@Deprecated
public static String CLIENT_SECRET = "client_secret";

/**
* @deprecated will be move to {@link ClientConfig#ENABLE_HTTP2}
*/
@Deprecated
public static String ENABLE_HTTP2 = "enableHttp2";

protected String serverUrl;
protected String proxyHost;
protected int proxyPort;
protected String serviceId;
protected String uri;
protected String clientId;
Expand Down Expand Up @@ -140,4 +93,20 @@ public String getKid() {
public void setKid(String kid) {
this.kid = kid;
}

public String getProxyHost() {
return proxyHost;
}

public void setProxyHost(String proxyHost) {
this.proxyHost = proxyHost;
}

public int getProxyPort() {
return proxyPort;
}

public void setProxyPort(int proxyPort) {
this.proxyPort = proxyPort;
}
}
Loading

0 comments on commit da0029e

Please sign in to comment.