KEYCLOAK-4911 charset not specified by Java client registration API
This commit is contained in:
parent
29c5d683d0
commit
ef6b303bfe
3 changed files with 59 additions and 18 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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());
|
||||
|
||||
|
@ -98,6 +106,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();
|
||||
|
@ -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 {
|
||||
|
|
Loading…
Reference in a new issue