keycloak-aplcache

Merge pull request #4169 from NetForce1/KEYCLOAK-4911 KEYCLOAK-4911

5/23/2017 3:20:38 AM

Details

diff --git a/integration/client-registration/src/main/java/org/keycloak/client/registration/ClientRegistration.java b/integration/client-registration/src/main/java/org/keycloak/client/registration/ClientRegistration.java
index b4ee78a..15fe4b9 100644
--- a/integration/client-registration/src/main/java/org/keycloak/client/registration/ClientRegistration.java
+++ b/integration/client-registration/src/main/java/org/keycloak/client/registration/ClientRegistration.java
@@ -17,8 +17,11 @@
 
 package org.keycloak.client.registration;
 
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import static java.nio.charset.StandardCharsets.UTF_8;
+
+import java.io.IOException;
+import java.io.InputStream;
+
 import org.apache.http.client.HttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.keycloak.representations.adapters.config.AdapterConfig;
@@ -26,8 +29,8 @@ import org.keycloak.representations.idm.ClientRepresentation;
 import org.keycloak.representations.oidc.OIDCClientRepresentation;
 import org.keycloak.util.JsonSerialization;
 
-import java.io.IOException;
-import java.io.InputStream;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.ObjectMapper;
 
 /**
  * @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
@@ -73,7 +76,7 @@ public class ClientRegistration {
 
     public ClientRepresentation create(ClientRepresentation client) throws ClientRegistrationException {
         String content = serialize(client);
-        InputStream resultStream = httpUtil.doPost(content, JSON, JSON, DEFAULT);
+        InputStream resultStream = httpUtil.doPost(content, JSON, UTF_8, JSON, DEFAULT);
         return deserialize(resultStream, ClientRepresentation.class);
     }
 
@@ -89,7 +92,7 @@ public class ClientRegistration {
 
     public ClientRepresentation update(ClientRepresentation client) throws ClientRegistrationException {
         String content = serialize(client);
-        InputStream resultStream = httpUtil.doPut(content, JSON, JSON, DEFAULT, client.getClientId());
+        InputStream resultStream = httpUtil.doPut(content, JSON, UTF_8, JSON, DEFAULT, client.getClientId());
         return resultStream != null ? deserialize(resultStream, ClientRepresentation.class) : null;
     }
 
@@ -129,7 +132,7 @@ public class ClientRegistration {
 
         public OIDCClientRepresentation create(OIDCClientRepresentation client) throws ClientRegistrationException {
             String content = serialize(client);
-            InputStream resultStream = httpUtil.doPost(content, JSON, JSON, OIDC);
+            InputStream resultStream = httpUtil.doPost(content, JSON, UTF_8, JSON, OIDC);
             return deserialize(resultStream, OIDCClientRepresentation.class);
         }
 
@@ -140,7 +143,7 @@ public class ClientRegistration {
 
         public OIDCClientRepresentation update(OIDCClientRepresentation client) throws ClientRegistrationException {
             String content = serialize(client);
-            InputStream resultStream = httpUtil.doPut(content, JSON, JSON, OIDC, client.getClientId());
+            InputStream resultStream = httpUtil.doPut(content, JSON, UTF_8, JSON, OIDC, client.getClientId());
             return resultStream != null ? deserialize(resultStream, OIDCClientRepresentation.class) : null;
         }
 
@@ -157,7 +160,7 @@ public class ClientRegistration {
     public class SAMLClientRegistration {
 
         public ClientRepresentation create(String entityDescriptor) throws ClientRegistrationException {
-            InputStream resultStream = httpUtil.doPost(entityDescriptor, XML, JSON, SAML);
+            InputStream resultStream = httpUtil.doPost(entityDescriptor, XML, UTF_8, JSON, SAML);
             return deserialize(resultStream, ClientRepresentation.class);
         }
 
diff --git a/integration/client-registration/src/main/java/org/keycloak/client/registration/HttpUtil.java b/integration/client-registration/src/main/java/org/keycloak/client/registration/HttpUtil.java
index 7ca1361..f6e65e6 100644
--- a/integration/client-registration/src/main/java/org/keycloak/client/registration/HttpUtil.java
+++ b/integration/client-registration/src/main/java/org/keycloak/client/registration/HttpUtil.java
@@ -31,6 +31,7 @@ import org.keycloak.common.util.StreamUtil;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.charset.Charset;
 
 /**
  * @author <a href="mailto:sthorger@redhat.com">Stian Thorgersen</a>
@@ -52,13 +53,13 @@ class HttpUtil {
         this.auth = auth;
     }
 
-    InputStream doPost(String content, String contentType, String acceptType, String... path) throws ClientRegistrationException {
+    InputStream doPost(String content, String contentType, Charset charset, String acceptType, String... path) throws ClientRegistrationException {
         try {
             HttpPost request = new HttpPost(getUrl(baseUri, path));
 
-            request.setHeader(HttpHeaders.CONTENT_TYPE, contentType);
+            request.setHeader(HttpHeaders.CONTENT_TYPE, contentType(contentType, charset));
             request.setHeader(HttpHeaders.ACCEPT, acceptType);
-            request.setEntity(new StringEntity(content));
+            request.setEntity(new StringEntity(content, charset));
 
             addAuth(request);
 
@@ -77,6 +78,10 @@ class HttpUtil {
             throw new ClientRegistrationException("Failed to send request", e);
         }
     }
+    
+    private String contentType(String contentType, Charset charset) {
+    	return contentType + ";charset=" + charset.name();
+    }
 
     InputStream doGet(String acceptType, String... path) throws ClientRegistrationException {
         try {
@@ -105,13 +110,13 @@ class HttpUtil {
         }
     }
 
-    InputStream doPut(String content, String contentType, String acceptType, String... path) throws ClientRegistrationException {
+    InputStream doPut(String content, String contentType, Charset charset, String acceptType, String... path) throws ClientRegistrationException {
         try {
             HttpPut request = new HttpPut(getUrl(baseUri, path));
 
-            request.setHeader(HttpHeaders.CONTENT_TYPE, contentType);
+            request.setHeader(HttpHeaders.CONTENT_TYPE, contentType(contentType, charset));
             request.setHeader(HttpHeaders.ACCEPT, acceptType);
-            request.setEntity(new StringEntity(content));
+            request.setEntity(new StringEntity(content, charset));
 
             addAuth(request);
 
diff --git a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/client/ClientRegistrationTest.java b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/client/ClientRegistrationTest.java
index 08cfb7e..d590322 100644
--- a/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/client/ClientRegistrationTest.java
+++ b/testsuite/integration-arquillian/tests/base/src/test/java/org/keycloak/testsuite/client/ClientRegistrationTest.java
@@ -41,11 +41,19 @@ public class ClientRegistrationTest extends AbstractClientRegistrationTest {
     private static final String CLIENT_ID = "test-client";
     private static final String CLIENT_SECRET = "test-client-secret";
 
-    private ClientRepresentation registerClient() throws ClientRegistrationException {
-        ClientRepresentation client = new ClientRepresentation();
+    private ClientRepresentation buildClient() {
+    	ClientRepresentation client = new ClientRepresentation();
         client.setClientId(CLIENT_ID);
         client.setSecret(CLIENT_SECRET);
-
+        
+        return client;
+    }
+    
+    private ClientRepresentation registerClient() throws ClientRegistrationException {
+    	return registerClient(buildClient());
+    }
+    
+    private ClientRepresentation registerClient(ClientRepresentation client) throws ClientRegistrationException {
         ClientRepresentation createdClient = reg.create(client);
         assertEquals(CLIENT_ID, createdClient.getClientId());
 
@@ -99,6 +107,17 @@ public class ClientRegistrationTest extends AbstractClientRegistrationTest {
     }
 
     @Test
+    public void registerClientWithNonAsciiChars() throws ClientRegistrationException {
+    	authCreateClients();
+    	ClientRepresentation client = buildClient();
+    	String name = "Cli\u00EBnt";
+		client.setName(name);
+    	
+    	ClientRepresentation createdClient = registerClient(client);
+    	assertEquals(name, createdClient.getName());
+    }
+    
+    @Test
     public void getClientAsAdmin() throws ClientRegistrationException {
         registerClientAsAdmin();
         ClientRepresentation rep = reg.get(CLIENT_ID);
@@ -204,6 +223,20 @@ public class ClientRegistrationTest extends AbstractClientRegistrationTest {
         }
     }
 
+    @Test
+    public void updateClientWithNonAsciiChars() throws ClientRegistrationException {
+    	authCreateClients();
+    	registerClient();
+    	
+    	authManageClients();
+    	ClientRepresentation client = reg.get(CLIENT_ID);
+    	String name = "Cli\u00EBnt";
+		client.setName(name);
+    	
+    	ClientRepresentation updatedClient = reg.update(client);
+    	assertEquals(name, updatedClient.getName());
+    }
+
     private void deleteClient(ClientRepresentation client) throws ClientRegistrationException {
         reg.delete(CLIENT_ID);
         try {