From 252adf29a8330ecc7dcef66084b8fa36c4f1a864 Mon Sep 17 00:00:00 2001 From: Pedro Igor Date: Mon, 21 Mar 2022 15:35:53 -0300 Subject: [PATCH] Support for running the client using different JAX-RS Client implementations (#10844) Closes #9539 Co-authored-by: geoand Co-authored-by: geoand --- .../org/keycloak/admin/client/Keycloak.java | 73 +++++++++++++------ .../admin/client/KeycloakBuilder.java | 13 ++-- .../resource/AggregatePoliciesResource.java | 2 - .../resource/AggregatePolicyResource.java | 5 -- .../resource/AttackDetectionResource.java | 3 - .../ClientAttributeCertificateResource.java | 10 +-- .../ClientPoliciesPoliciesResource.java | 2 - .../ClientPoliciesProfilesResource.java | 2 - .../resource/ClientPoliciesResource.java | 3 - .../client/resource/ClientPolicyResource.java | 5 -- .../ClientRegistrationPolicyResource.java | 2 - .../admin/client/resource/ClientResource.java | 3 - .../resource/ClientScopePoliciesResource.java | 2 - .../resource/GroupPoliciesResource.java | 3 - .../client/resource/GroupPolicyResource.java | 6 -- .../admin/client/resource/GroupResource.java | 6 -- .../admin/client/resource/GroupsResource.java | 8 -- .../resource/IdentityProvidersResource.java | 3 +- .../client/resource/JSPoliciesResource.java | 2 - .../client/resource/JSPolicyResource.java | 6 -- .../client/resource/PoliciesResource.java | 5 -- .../admin/client/resource/PolicyResource.java | 7 -- .../admin/client/resource/RealmResource.java | 11 +-- .../resource/ResourcePermissionResource.java | 5 -- .../resource/ResourcePermissionsResource.java | 2 - .../client/resource/ResourceResource.java | 3 - .../resource/ResourceScopeResource.java | 2 - .../resource/ResourceScopesResource.java | 3 - .../client/resource/ResourcesResource.java | 5 -- .../client/resource/RolePoliciesResource.java | 2 - .../client/resource/RolePolicyResource.java | 5 -- .../resource/ScopePermissionResource.java | 6 -- .../resource/ScopePermissionsResource.java | 2 - .../client/resource/TimePoliciesResource.java | 2 - .../client/resource/TimePolicyResource.java | 5 -- .../client/resource/UserPoliciesResource.java | 2 - .../client/resource/UserPolicyResource.java | 5 -- .../spi/ResteasyClientClassicProvider.java | 50 +++++++++++++ .../client/spi/ResteasyClientProvider.java | 47 ++++++++++++ .../admin/client/token/TokenManager.java | 8 +- 40 files changed, 162 insertions(+), 174 deletions(-) create mode 100644 integration/admin-client/src/main/java/org/keycloak/admin/client/spi/ResteasyClientClassicProvider.java create mode 100644 integration/admin-client/src/main/java/org/keycloak/admin/client/spi/ResteasyClientProvider.java diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/Keycloak.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/Keycloak.java index 779ff6de932b..591369910c90 100755 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/Keycloak.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/Keycloak.java @@ -16,18 +16,19 @@ */ package org.keycloak.admin.client; -import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; -import org.jboss.resteasy.plugins.providers.jackson.ResteasyJackson2Provider; +import javax.ws.rs.client.WebTarget; import org.keycloak.admin.client.resource.BearerAuthFilter; import org.keycloak.admin.client.resource.RealmResource; import org.keycloak.admin.client.resource.RealmsResource; import org.keycloak.admin.client.resource.ServerInfoResource; +import org.keycloak.admin.client.spi.ResteasyClientProvider; import org.keycloak.admin.client.token.TokenManager; import javax.net.ssl.SSLContext; import javax.ws.rs.client.Client; -import javax.ws.rs.client.ClientBuilder; import java.net.URI; +import java.util.Iterator; +import java.util.ServiceLoader; import static org.keycloak.OAuth2Constants.PASSWORD; @@ -41,10 +42,45 @@ * @see KeycloakBuilder */ public class Keycloak implements AutoCloseable { + + private static volatile ResteasyClientProvider CLIENT_PROVIDER = resolveResteasyClientProvider(); + + private static ResteasyClientProvider resolveResteasyClientProvider() { + Iterator providers = ServiceLoader.load(ResteasyClientProvider.class).iterator(); + + if (providers.hasNext()) { + ResteasyClientProvider provider = providers.next(); + + if (providers.hasNext()) { + throw new IllegalArgumentException("Multiple " + ResteasyClientProvider.class + " implementations found"); + } + + return provider; + } + + return createDefaultResteasyClientProvider(); + } + + private static ResteasyClientProvider createDefaultResteasyClientProvider() { + try { + return (ResteasyClientProvider) Keycloak.class.getClassLoader().loadClass("org.keycloak.admin.client.spi.ResteasyClientClassicProvider").getDeclaredConstructor().newInstance(); + } catch (Exception cause) { + throw new RuntimeException("Could not instantiate default client provider", cause); + } + } + + public static void setClientProvider(ResteasyClientProvider provider) { + CLIENT_PROVIDER = provider; + } + + public static ResteasyClientProvider getClientProvider() { + return CLIENT_PROVIDER; + } + private final Config config; private final TokenManager tokenManager; private final String authToken; - private final ResteasyWebTarget target; + private final WebTarget target; private final Client client; private boolean closed = false; @@ -54,27 +90,19 @@ public class Keycloak implements AutoCloseable { authToken = authtoken; tokenManager = authtoken == null ? new TokenManager(config, client) : null; - target = (ResteasyWebTarget) client.target(config.getServerUrl()); + target = client.target(config.getServerUrl()); target.register(newAuthFilter()); } - private BearerAuthFilter newAuthFilter() { - return authToken != null ? new BearerAuthFilter(authToken) : new BearerAuthFilter(tokenManager); + private static Client newRestEasyClient(Object customJacksonProvider, SSLContext sslContext, boolean disableTrustManager) { + return CLIENT_PROVIDER.newRestEasyClient(customJacksonProvider, sslContext, disableTrustManager); } - private static Client newRestEasyClient(ResteasyJackson2Provider customJacksonProvider, SSLContext sslContext, boolean disableTrustManager) { - ClientBuilder clientBuilder = ClientBuilderWrapper.create(sslContext, disableTrustManager); - - if (customJacksonProvider != null) { - clientBuilder.register(customJacksonProvider, 100); - } else { - clientBuilder.register(JacksonProvider.class, 100); - } - - return clientBuilder.build(); + private BearerAuthFilter newAuthFilter() { + return authToken != null ? new BearerAuthFilter(authToken) : new BearerAuthFilter(tokenManager); } - public static Keycloak getInstance(String serverUrl, String realm, String username, String password, String clientId, String clientSecret, SSLContext sslContext, ResteasyJackson2Provider customJacksonProvider, boolean disableTrustManager, String authToken) { + public static Keycloak getInstance(String serverUrl, String realm, String username, String password, String clientId, String clientSecret, SSLContext sslContext, Object customJacksonProvider, boolean disableTrustManager, String authToken) { return new Keycloak(serverUrl, realm, username, password, clientId, clientSecret, PASSWORD, newRestEasyClient(customJacksonProvider, sslContext, disableTrustManager), authToken); } @@ -86,7 +114,7 @@ public static Keycloak getInstance(String serverUrl, String realm, String userna return getInstance(serverUrl, realm, username, password, clientId, clientSecret, sslContext, null, false, null); } - public static Keycloak getInstance(String serverUrl, String realm, String username, String password, String clientId, String clientSecret, SSLContext sslContext, ResteasyJackson2Provider customJacksonProvider) { + public static Keycloak getInstance(String serverUrl, String realm, String username, String password, String clientId, String clientSecret, SSLContext sslContext, Object customJacksonProvider) { return getInstance(serverUrl, realm, username, password, clientId, clientSecret, sslContext, customJacksonProvider, false, null); } @@ -107,7 +135,7 @@ public static Keycloak getInstance(String serverUrl, String realm, String client } public RealmsResource realms() { - return target.proxy(RealmsResource.class); + return CLIENT_PROVIDER.targetProxy(target, RealmsResource.class); } public RealmResource realm(String realmName) { @@ -115,7 +143,7 @@ public RealmResource realm(String realmName) { } public ServerInfoResource serverInfo() { - return target.proxy(ServerInfoResource.class); + return CLIENT_PROVIDER.targetProxy(target, ServerInfoResource.class); } public TokenManager tokenManager() { @@ -132,7 +160,8 @@ public TokenManager tokenManager() { * @return */ public T proxy(Class proxyClass, URI absoluteURI) { - return ((ResteasyWebTarget) client.target(absoluteURI)).register(newAuthFilter()).proxy(proxyClass); + WebTarget register = client.target(absoluteURI).register(newAuthFilter()); + return CLIENT_PROVIDER.targetProxy(register, proxyClass); } /** diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/KeycloakBuilder.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/KeycloakBuilder.java index 0c003d3e84e1..21ce0cb9ff12 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/KeycloakBuilder.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/KeycloakBuilder.java @@ -17,15 +17,14 @@ package org.keycloak.admin.client; -import org.jboss.resteasy.client.jaxrs.ResteasyClient; -import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; - import static org.keycloak.OAuth2Constants.CLIENT_CREDENTIALS; import static org.keycloak.OAuth2Constants.PASSWORD; +import javax.ws.rs.client.Client; + /** * Provides a {@link Keycloak} client builder with the ability to customize the underlying - * {@link ResteasyClient RESTEasy client} used to communicate with the Keycloak server. + * {@link javax.ws.rs.client.Client RESTEasy client} used to communicate with the Keycloak server. *

*

Example usage with a connection pool size of 20:

*
@@ -51,7 +50,7 @@
  * 
* * @author Scott Rossillo - * @see ResteasyClientBuilder + * @see javax.ws.rs.client.Client */ public class KeycloakBuilder { private String serverUrl; @@ -61,7 +60,7 @@ public class KeycloakBuilder { private String clientId; private String clientSecret; private String grantType; - private ResteasyClient resteasyClient; + private Client resteasyClient; private String authorization; public KeycloakBuilder serverUrl(String serverUrl) { @@ -100,7 +99,7 @@ public KeycloakBuilder clientSecret(String clientSecret) { return this; } - public KeycloakBuilder resteasyClient(ResteasyClient resteasyClient) { + public KeycloakBuilder resteasyClient(Client resteasyClient) { this.resteasyClient = resteasyClient; return this; } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/AggregatePoliciesResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/AggregatePoliciesResource.java index 67f5d31ce5bc..0c1f0664b11d 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/AggregatePoliciesResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/AggregatePoliciesResource.java @@ -26,7 +26,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.AggregatePolicyRepresentation; /** @@ -45,6 +44,5 @@ public interface AggregatePoliciesResource { @Path("/search") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache AggregatePolicyRepresentation findByName(@QueryParam("name") String name); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/AggregatePolicyResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/AggregatePolicyResource.java index fc49314eac7e..695afc384aa6 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/AggregatePolicyResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/AggregatePolicyResource.java @@ -26,7 +26,6 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.AggregatePolicyRepresentation; import org.keycloak.representations.idm.authorization.PolicyRepresentation; import org.keycloak.representations.idm.authorization.ResourceRepresentation; @@ -38,7 +37,6 @@ public interface AggregatePolicyResource { @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache AggregatePolicyRepresentation toRepresentation(); @PUT @@ -51,19 +49,16 @@ public interface AggregatePolicyResource { @Path("/associatedPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List associatedPolicies(); @Path("/dependentPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List dependentPolicies(); @Path("/resources") @GET @Produces("application/json") - @NoCache List resources(); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/AttackDetectionResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/AttackDetectionResource.java index ea77759dc37b..1168bc0f8bf7 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/AttackDetectionResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/AttackDetectionResource.java @@ -17,8 +17,6 @@ package org.keycloak.admin.client.resource; -import org.jboss.resteasy.annotations.cache.NoCache; - import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.Path; @@ -34,7 +32,6 @@ public interface AttackDetectionResource { @GET @Path("brute-force/users/{userId}") - @NoCache @Produces(MediaType.APPLICATION_JSON) Map bruteForceUserStatus(@PathParam("userId") String userId); diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientAttributeCertificateResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientAttributeCertificateResource.java index 756247e3d5c2..3934975f58ac 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientAttributeCertificateResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientAttributeCertificateResource.java @@ -17,8 +17,6 @@ package org.keycloak.admin.client.resource; -import org.jboss.resteasy.annotations.cache.NoCache; -import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataOutput; import org.keycloak.representations.KeyStoreConfig; import org.keycloak.representations.idm.CertificateRepresentation; @@ -41,7 +39,6 @@ public interface ClientAttributeCertificateResource { * @return */ @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) CertificateRepresentation getKeyInfo(); @@ -51,7 +48,6 @@ public interface ClientAttributeCertificateResource { * @return */ @POST - @NoCache @Path("generate") @Produces(MediaType.APPLICATION_JSON) CertificateRepresentation generate(); @@ -66,7 +62,7 @@ public interface ClientAttributeCertificateResource { @Path("upload") @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.APPLICATION_JSON) - CertificateRepresentation uploadJks(MultipartFormDataOutput output); + CertificateRepresentation uploadJks(Object output); /** * Upload only certificate, not private key @@ -78,7 +74,7 @@ public interface ClientAttributeCertificateResource { @Path("upload-certificate") @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.APPLICATION_JSON) - CertificateRepresentation uploadJksCertificate(MultipartFormDataOutput output); + CertificateRepresentation uploadJksCertificate(Object output); /** * Get a keystore file for the client, containing private key and public certificate @@ -87,7 +83,6 @@ public interface ClientAttributeCertificateResource { * @return */ @POST - @NoCache @Path("/download") @Produces(MediaType.APPLICATION_OCTET_STREAM) @Consumes(MediaType.APPLICATION_JSON) @@ -103,7 +98,6 @@ public interface ClientAttributeCertificateResource { * @return */ @POST - @NoCache @Path("/generate-and-download") @Produces(MediaType.APPLICATION_OCTET_STREAM) @Consumes(MediaType.APPLICATION_JSON) diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientPoliciesPoliciesResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientPoliciesPoliciesResource.java index ffb626ceb1bf..66b683ba7931 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientPoliciesPoliciesResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientPoliciesPoliciesResource.java @@ -6,7 +6,6 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.ClientPoliciesRepresentation; /** @@ -15,7 +14,6 @@ public interface ClientPoliciesPoliciesResource { @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) ClientPoliciesRepresentation getPolicies(); diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientPoliciesProfilesResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientPoliciesProfilesResource.java index c4922c6b15f5..6c71dcecba26 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientPoliciesProfilesResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientPoliciesProfilesResource.java @@ -7,7 +7,6 @@ import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.ClientProfilesRepresentation; /** @@ -16,7 +15,6 @@ public interface ClientPoliciesProfilesResource { @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) ClientProfilesRepresentation getProfiles(@QueryParam("include-global-profiles") Boolean includeGlobalProfiles); diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientPoliciesResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientPoliciesResource.java index ef09dde939f5..72c35c202892 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientPoliciesResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientPoliciesResource.java @@ -26,8 +26,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import org.jboss.resteasy.annotations.cache.NoCache; -import org.keycloak.representations.idm.authorization.AbstractPolicyRepresentation; import org.keycloak.representations.idm.authorization.ClientPolicyRepresentation; /** @@ -46,6 +44,5 @@ public interface ClientPoliciesResource { @Path("/search") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache ClientPolicyRepresentation findByName(@QueryParam("name") String name); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientPolicyResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientPolicyResource.java index a9449358c4ea..5f330d3dfefc 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientPolicyResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientPolicyResource.java @@ -26,7 +26,6 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.ClientPolicyRepresentation; import org.keycloak.representations.idm.authorization.PolicyRepresentation; import org.keycloak.representations.idm.authorization.ResourceRepresentation; @@ -38,7 +37,6 @@ public interface ClientPolicyResource { @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache ClientPolicyRepresentation toRepresentation(); @PUT @@ -51,19 +49,16 @@ public interface ClientPolicyResource { @Path("/associatedPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List associatedPolicies(); @Path("/dependentPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List dependentPolicies(); @Path("/resources") @GET @Produces("application/json") - @NoCache List resources(); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientRegistrationPolicyResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientRegistrationPolicyResource.java index 9cef5d49c8b0..9d6f41cae80a 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientRegistrationPolicyResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientRegistrationPolicyResource.java @@ -24,7 +24,6 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.ComponentTypeRepresentation; /** @@ -34,7 +33,6 @@ public interface ClientRegistrationPolicyResource { @Path("providers") @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) List getProviders(); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientResource.java index dfb31c818059..2135420b1ded 100755 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientResource.java @@ -17,7 +17,6 @@ package org.keycloak.admin.client.resource; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.adapters.action.GlobalRequestResult; import org.keycloak.representations.idm.ClientRepresentation; import org.keycloak.representations.idm.ClientScopeRepresentation; @@ -114,7 +113,6 @@ public interface ClientResource { ClientAttributeCertificateResource getCertficateResource(@PathParam("attr") String attributePrefix); @GET - @NoCache @Path("installation/providers/{providerId}") String getInstallationProvider(@PathParam("providerId") String providerId); @@ -187,7 +185,6 @@ public interface ClientResource { @Path("/service-account-user") @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) UserRepresentation getServiceAccountUser(); diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientScopePoliciesResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientScopePoliciesResource.java index 4cbc3762f0c5..3d753c20e80e 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientScopePoliciesResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ClientScopePoliciesResource.java @@ -25,7 +25,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.ClientScopePolicyRepresentation; /** @@ -41,6 +40,5 @@ public interface ClientScopePoliciesResource { @Path("/search") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache ClientScopePolicyRepresentation findByName(@QueryParam("name") String name); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/GroupPoliciesResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/GroupPoliciesResource.java index 1cc51b004008..071cfcf8921d 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/GroupPoliciesResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/GroupPoliciesResource.java @@ -26,9 +26,7 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.GroupPolicyRepresentation; -import org.keycloak.representations.idm.authorization.RolePolicyRepresentation; /** * @author Pedro Igor @@ -46,6 +44,5 @@ public interface GroupPoliciesResource { @Path("/search") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache GroupPolicyRepresentation findByName(@QueryParam("name") String name); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/GroupPolicyResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/GroupPolicyResource.java index 6171868b65d8..971349380412 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/GroupPolicyResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/GroupPolicyResource.java @@ -26,11 +26,9 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.GroupPolicyRepresentation; import org.keycloak.representations.idm.authorization.PolicyRepresentation; import org.keycloak.representations.idm.authorization.ResourceRepresentation; -import org.keycloak.representations.idm.authorization.RolePolicyRepresentation; /** * @author Pedro Igor @@ -39,7 +37,6 @@ public interface GroupPolicyResource { @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache GroupPolicyRepresentation toRepresentation(); @PUT @@ -52,19 +49,16 @@ public interface GroupPolicyResource { @Path("/associatedPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List associatedPolicies(); @Path("/dependentPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List dependentPolicies(); @Path("/resources") @GET @Produces("application/json") - @NoCache List resources(); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/GroupResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/GroupResource.java index 0a833efad6eb..1075f0486d1b 100755 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/GroupResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/GroupResource.java @@ -17,7 +17,6 @@ package org.keycloak.admin.client.resource; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.GroupRepresentation; import org.keycloak.representations.idm.ManagementPermissionReference; import org.keycloak.representations.idm.ManagementPermissionRepresentation; @@ -71,7 +70,6 @@ public interface GroupResource { * @return */ @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) GroupRepresentation toRepresentation(); @@ -96,7 +94,6 @@ public interface GroupResource { */ @POST @Path("children") - @NoCache @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) Response subGroup(GroupRepresentation rep); @@ -113,7 +110,6 @@ public interface GroupResource { * @return Returns a max size of 100 users */ @GET - @NoCache @Path("/members") @Produces(MediaType.APPLICATION_JSON) List members(); @@ -128,7 +124,6 @@ public interface GroupResource { * @return */ @GET - @NoCache @Path("/members") @Produces(MediaType.APPLICATION_JSON) List members(@QueryParam("first") Integer firstResult, @@ -147,7 +142,6 @@ List members(@QueryParam("first") Integer firstResult, * @return */ @GET - @NoCache @Path("/members") @Produces(MediaType.APPLICATION_JSON) List members(@QueryParam("first") Integer firstResult, diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/GroupsResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/GroupsResource.java index d0ab87ddca47..96548f81d015 100755 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/GroupsResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/GroupsResource.java @@ -17,7 +17,6 @@ package org.keycloak.admin.client.resource; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.GroupRepresentation; import javax.ws.rs.*; @@ -37,7 +36,6 @@ public interface GroupsResource { * @return A list containing all groups. */ @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) List groups(); @@ -48,7 +46,6 @@ public interface GroupsResource { * @return A list containing the slice of all groups. */ @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) List groups(@QueryParam("first") Integer first, @QueryParam("max") Integer max); @@ -61,7 +58,6 @@ public interface GroupsResource { * @return A list containing the slice of all groups. */ @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) List groups(@QueryParam("search") String search, @@ -77,7 +73,6 @@ List groups(@QueryParam("search") String search, * @return A list containing the slice of all groups. */ @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) List groups(@QueryParam("search") String search, @@ -89,7 +84,6 @@ List groups(@QueryParam("search") String search, * @return A map containing key "count" with number of groups as value. */ @GET - @NoCache @Path("count") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @@ -101,7 +95,6 @@ List groups(@QueryParam("search") String search, * @return A map containing key "count" with number of groups as value which matching with search. */ @GET - @NoCache @Path("count") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @@ -113,7 +106,6 @@ List groups(@QueryParam("search") String search, * @return A map containing key "count" with number of top level groups. */ @GET - @NoCache @Path("count") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/IdentityProvidersResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/IdentityProvidersResource.java index 290f23d33631..ebc31339c8b6 100755 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/IdentityProvidersResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/IdentityProvidersResource.java @@ -17,7 +17,6 @@ package org.keycloak.admin.client.resource; -import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataOutput; import org.keycloak.representations.idm.IdentityProviderRepresentation; import javax.ws.rs.Consumes; @@ -58,7 +57,7 @@ public interface IdentityProvidersResource { @Path("import-config") @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.APPLICATION_JSON) - Map importFrom(MultipartFormDataOutput data); + Map importFrom(Object data); @POST @Path("import-config") diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/JSPoliciesResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/JSPoliciesResource.java index a6788eb00164..62daa38475d0 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/JSPoliciesResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/JSPoliciesResource.java @@ -26,7 +26,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.JSPolicyRepresentation; /** @@ -45,6 +44,5 @@ public interface JSPoliciesResource { @Path("/search") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache JSPolicyRepresentation findByName(@QueryParam("name") String name); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/JSPolicyResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/JSPolicyResource.java index 433d71eefb8a..78caa3961784 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/JSPolicyResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/JSPolicyResource.java @@ -26,11 +26,9 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.JSPolicyRepresentation; import org.keycloak.representations.idm.authorization.PolicyRepresentation; import org.keycloak.representations.idm.authorization.ResourceRepresentation; -import org.keycloak.representations.idm.authorization.RolePolicyRepresentation; /** * @author Pedro Igor @@ -39,7 +37,6 @@ public interface JSPolicyResource { @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache JSPolicyRepresentation toRepresentation(); @PUT @@ -52,19 +49,16 @@ public interface JSPolicyResource { @Path("/associatedPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List associatedPolicies(); @Path("/dependentPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List dependentPolicies(); @Path("/resources") @GET @Produces("application/json") - @NoCache List resources(); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/PoliciesResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/PoliciesResource.java index 45bee4b858e4..9eed5e99067a 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/PoliciesResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/PoliciesResource.java @@ -16,7 +16,6 @@ */ package org.keycloak.admin.client.resource; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.PolicyEvaluationRequest; import org.keycloak.representations.idm.authorization.PolicyEvaluationResponse; import org.keycloak.representations.idm.authorization.PolicyProviderRepresentation; @@ -49,17 +48,14 @@ public interface PoliciesResource { @Path("/search") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache PolicyRepresentation findByName(@QueryParam("name") String name); @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List policies(); @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List policies(@QueryParam("policyId") String id, @QueryParam("name") String name, @QueryParam("type") String type, @@ -74,7 +70,6 @@ List policies(@QueryParam("policyId") String id, @Path("providers") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List policyProviders(); @POST diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/PolicyResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/PolicyResource.java index 7287795750f3..00550230fbf5 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/PolicyResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/PolicyResource.java @@ -27,7 +27,6 @@ import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.PolicyRepresentation; import org.keycloak.representations.idm.authorization.ResourceRepresentation; import org.keycloak.representations.idm.authorization.ScopeRepresentation; @@ -39,12 +38,10 @@ public interface PolicyResource { @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache PolicyRepresentation toRepresentation(); @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache PolicyRepresentation toRepresentation(@QueryParam("fields") String fields); @PUT @@ -57,24 +54,20 @@ public interface PolicyResource { @Path("/associatedPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List associatedPolicies(); @Path("/dependentPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List dependentPolicies(); @Path("/scopes") @GET @Produces("application/json") - @NoCache List scopes(); @Path("/resources") @GET @Produces("application/json") - @NoCache List resources(); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/RealmResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/RealmResource.java index bfcdad2b16e4..40293fb70b4f 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/RealmResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/RealmResource.java @@ -17,8 +17,6 @@ package org.keycloak.admin.client.resource; -import org.jboss.resteasy.annotations.cache.NoCache; -import org.jboss.resteasy.spi.ResteasyProviderFactory; import org.keycloak.representations.adapters.action.GlobalRequestResult; import org.keycloak.representations.idm.AdminEventRepresentation; import org.keycloak.representations.idm.ClientRepresentation; @@ -94,7 +92,7 @@ public interface RealmResource { @Path("client-description-converter") @POST - @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN }) + @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) ClientRepresentation convertClientDescription(String description); @@ -121,7 +119,6 @@ public interface RealmResource { @Path("events") @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) List getEvents(@QueryParam("type") List types, @QueryParam("client") String client, @QueryParam("user") String user, @QueryParam("dateFrom") String dateFrom, @QueryParam("dateTo") String dateTo, @@ -167,7 +164,6 @@ List getAdminEvents(@QueryParam("operationTypes") List @GET @Path("group-by-path/{path: .*}") - @NoCache @Produces(MediaType.APPLICATION_JSON) GroupRepresentation getGroupByPath(@PathParam("path") String path); @@ -221,7 +217,6 @@ RealmRepresentation partialExport(@QueryParam("exportGroupsAndRoles") Boolean ex @Path("testLDAPConnection") @POST @Consumes(MediaType.APPLICATION_FORM_URLENCODED) - @NoCache @Deprecated Response testLDAPConnection(@FormParam("action") String action, @FormParam("connectionUrl") String connectionUrl, @FormParam("bindDn") String bindDn, @FormParam("bindCredential") String bindCredential, @@ -230,26 +225,22 @@ Response testLDAPConnection(@FormParam("action") String action, @FormParam("conn @Path("testLDAPConnection") @POST @Consumes(MediaType.APPLICATION_JSON) - @NoCache Response testLDAPConnection(TestLdapConnectionRepresentation config); @POST @Path("ldap-server-capabilities") - @NoCache @Consumes(MediaType.APPLICATION_JSON) @Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON) List ldapServerCapabilities(TestLdapConnectionRepresentation config); @Path("testSMTPConnection") @POST - @NoCache @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @Deprecated Response testSMTPConnection(@FormParam("config") String config); @Path("testSMTPConnection") @POST - @NoCache @Consumes(MediaType.APPLICATION_JSON) Response testSMTPConnection(Map config); diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourcePermissionResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourcePermissionResource.java index ec49ec8d6ef9..f2bb6d8cfa4d 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourcePermissionResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourcePermissionResource.java @@ -26,7 +26,6 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.PolicyRepresentation; import org.keycloak.representations.idm.authorization.ResourcePermissionRepresentation; import org.keycloak.representations.idm.authorization.ResourceRepresentation; @@ -38,7 +37,6 @@ public interface ResourcePermissionResource { @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache ResourcePermissionRepresentation toRepresentation(); @PUT @@ -51,19 +49,16 @@ public interface ResourcePermissionResource { @Path("/associatedPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List associatedPolicies(); @Path("/dependentPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List dependentPolicies(); @Path("/resources") @GET @Produces("application/json") - @NoCache List resources(); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourcePermissionsResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourcePermissionsResource.java index c833f01d401f..e77377bdb717 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourcePermissionsResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourcePermissionsResource.java @@ -26,7 +26,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.ResourcePermissionRepresentation; /** @@ -45,6 +44,5 @@ public interface ResourcePermissionsResource { @Path("/search") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache ResourcePermissionRepresentation findByName(@QueryParam("name") String name); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourceResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourceResource.java index 28e57a7e27fe..9c3a73ea8a67 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourceResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourceResource.java @@ -18,7 +18,6 @@ import java.util.List; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.PolicyRepresentation; import org.keycloak.representations.idm.authorization.ResourceRepresentation; @@ -37,7 +36,6 @@ public interface ResourceResource { @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache ResourceRepresentation toRepresentation(); @PUT @@ -49,7 +47,6 @@ public interface ResourceResource { @Path("permissions") @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) List permissions(); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourceScopeResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourceScopeResource.java index 87b285bb4d87..60efbf6ad786 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourceScopeResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourceScopeResource.java @@ -18,7 +18,6 @@ import java.util.List; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.PolicyRepresentation; import org.keycloak.representations.idm.authorization.ScopeRepresentation; @@ -37,7 +36,6 @@ public interface ResourceScopeResource { @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache ScopeRepresentation toRepresentation(); @PUT diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourceScopesResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourceScopesResource.java index ddcaf53055c7..7e3f2d117939 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourceScopesResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourceScopesResource.java @@ -16,7 +16,6 @@ */ package org.keycloak.admin.client.resource; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.ScopeRepresentation; import javax.ws.rs.Consumes; @@ -44,13 +43,11 @@ public interface ResourceScopesResource { ResourceScopeResource scope(@PathParam("id") String id); @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) List scopes(); @Path("/search") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache ScopeRepresentation findByName(@QueryParam("name") String name); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourcesResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourcesResource.java index 7f2c39457b6b..dcf05a0c63d1 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourcesResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ResourcesResource.java @@ -16,7 +16,6 @@ */ package org.keycloak.admin.client.resource; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.ResourceRepresentation; import javax.ws.rs.Consumes; @@ -44,7 +43,6 @@ public interface ResourcesResource { ResourceResource resource(@PathParam("id") String id); @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) List find(@QueryParam("name") String name, @QueryParam("uri") String uri, @@ -55,17 +53,14 @@ List find(@QueryParam("name") String name, @QueryParam("max") Integer maxResult); @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) List findByName(@QueryParam("name") String name); @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) List findByName(@QueryParam("name") String name, @QueryParam("owner") String owner); @GET - @NoCache @Produces(MediaType.APPLICATION_JSON) List resources(); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/RolePoliciesResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/RolePoliciesResource.java index f9f1f98bbcca..be834f39f207 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/RolePoliciesResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/RolePoliciesResource.java @@ -26,7 +26,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.RolePolicyRepresentation; /** @@ -45,6 +44,5 @@ public interface RolePoliciesResource { @Path("/search") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache RolePolicyRepresentation findByName(@QueryParam("name") String name); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/RolePolicyResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/RolePolicyResource.java index 824554f5b978..b3be353f09fe 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/RolePolicyResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/RolePolicyResource.java @@ -26,7 +26,6 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.PolicyRepresentation; import org.keycloak.representations.idm.authorization.ResourceRepresentation; import org.keycloak.representations.idm.authorization.RolePolicyRepresentation; @@ -38,7 +37,6 @@ public interface RolePolicyResource { @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache RolePolicyRepresentation toRepresentation(); @PUT @@ -51,19 +49,16 @@ public interface RolePolicyResource { @Path("/associatedPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List associatedPolicies(); @Path("/dependentPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List dependentPolicies(); @Path("/resources") @GET @Produces("application/json") - @NoCache List resources(); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ScopePermissionResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ScopePermissionResource.java index 199e412ecb55..99fa30b3e75e 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ScopePermissionResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ScopePermissionResource.java @@ -26,7 +26,6 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.PolicyRepresentation; import org.keycloak.representations.idm.authorization.ResourceRepresentation; import org.keycloak.representations.idm.authorization.ScopePermissionRepresentation; @@ -39,7 +38,6 @@ public interface ScopePermissionResource { @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache ScopePermissionRepresentation toRepresentation(); @PUT @@ -52,24 +50,20 @@ public interface ScopePermissionResource { @Path("/associatedPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List associatedPolicies(); @Path("/dependentPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List dependentPolicies(); @Path("/resources") @GET @Produces("application/json") - @NoCache List resources(); @Path("/scopes") @GET @Produces("application/json") - @NoCache List scopes(); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ScopePermissionsResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ScopePermissionsResource.java index ab0dd5c2fb1f..e130960e509d 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ScopePermissionsResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/ScopePermissionsResource.java @@ -26,7 +26,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.ScopePermissionRepresentation; /** @@ -45,6 +44,5 @@ public interface ScopePermissionsResource { @Path("/search") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache ScopePermissionRepresentation findByName(@QueryParam("name") String name); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/TimePoliciesResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/TimePoliciesResource.java index 326bebe405b5..5bc03e03fb05 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/TimePoliciesResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/TimePoliciesResource.java @@ -26,7 +26,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.TimePolicyRepresentation; /** @@ -45,6 +44,5 @@ public interface TimePoliciesResource { @Path("/search") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache TimePolicyRepresentation findByName(@QueryParam("name") String name); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/TimePolicyResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/TimePolicyResource.java index 560c06a09c48..acad51a686c8 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/TimePolicyResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/TimePolicyResource.java @@ -26,7 +26,6 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.PolicyRepresentation; import org.keycloak.representations.idm.authorization.ResourceRepresentation; import org.keycloak.representations.idm.authorization.TimePolicyRepresentation; @@ -38,7 +37,6 @@ public interface TimePolicyResource { @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache TimePolicyRepresentation toRepresentation(); @PUT @@ -51,19 +49,16 @@ public interface TimePolicyResource { @Path("/associatedPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List associatedPolicies(); @Path("/dependentPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List dependentPolicies(); @Path("/resources") @GET @Produces("application/json") - @NoCache List resources(); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/UserPoliciesResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/UserPoliciesResource.java index 702995f50a2e..b5f7f74d25d0 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/UserPoliciesResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/UserPoliciesResource.java @@ -26,7 +26,6 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.UserPolicyRepresentation; /** @@ -45,6 +44,5 @@ public interface UserPoliciesResource { @Path("/search") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache UserPolicyRepresentation findByName(@QueryParam("name") String name); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/UserPolicyResource.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/UserPolicyResource.java index d12378c13657..7856378642f4 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/UserPolicyResource.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/resource/UserPolicyResource.java @@ -26,7 +26,6 @@ import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import org.jboss.resteasy.annotations.cache.NoCache; import org.keycloak.representations.idm.authorization.PolicyRepresentation; import org.keycloak.representations.idm.authorization.ResourceRepresentation; import org.keycloak.representations.idm.authorization.UserPolicyRepresentation; @@ -38,7 +37,6 @@ public interface UserPolicyResource { @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache UserPolicyRepresentation toRepresentation(); @PUT @@ -51,19 +49,16 @@ public interface UserPolicyResource { @Path("/associatedPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List associatedPolicies(); @Path("/dependentPolicies") @GET @Produces(MediaType.APPLICATION_JSON) - @NoCache List dependentPolicies(); @Path("/resources") @GET @Produces("application/json") - @NoCache List resources(); } diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/spi/ResteasyClientClassicProvider.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/spi/ResteasyClientClassicProvider.java new file mode 100644 index 000000000000..f5df72ded09b --- /dev/null +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/spi/ResteasyClientClassicProvider.java @@ -0,0 +1,50 @@ +/* + * Copyright 2021 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.keycloak.admin.client.spi; + +import javax.net.ssl.SSLContext; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.WebTarget; +import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; +import org.keycloak.admin.client.ClientBuilderWrapper; +import org.keycloak.admin.client.JacksonProvider; + +/** + * An implementation of {@link ResteasyClientProvider} based on RESTEasy classic. + */ +public class ResteasyClientClassicProvider implements ResteasyClientProvider { + + @Override + public Client newRestEasyClient(Object customJacksonProvider, SSLContext sslContext, boolean disableTrustManager) { + ClientBuilder clientBuilder = ClientBuilderWrapper.create(sslContext, disableTrustManager); + + if (customJacksonProvider != null) { + clientBuilder.register(customJacksonProvider, 100); + } else { + clientBuilder.register(JacksonProvider.class, 100); + } + + return clientBuilder.build(); + } + + @Override + public R targetProxy(WebTarget client, Class targetClass) { + return ResteasyWebTarget.class.cast(client).proxy(targetClass); + } +} diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/spi/ResteasyClientProvider.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/spi/ResteasyClientProvider.java new file mode 100644 index 000000000000..ebc602034b6c --- /dev/null +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/spi/ResteasyClientProvider.java @@ -0,0 +1,47 @@ +/* + * Copyright 2021 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.keycloak.admin.client.spi; + +import javax.net.ssl.SSLContext; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.WebTarget; + +/** + * An SPI for using the JAX-RS Client API regardless of the underlying stack. + */ +public interface ResteasyClientProvider { + + /** + * Creates a new {@link Client}. + * + * @param messageHandler a {@link javax.ws.rs.ext.MessageBodyReader} and/or {@link javax.ws.rs.ext.MessageBodyWriter} instance. + * @param sslContext an optional {@link SSLContext} + * @param disableTrustManager if the client should not validate the server certificates when using TLS + * @return + */ + Client newRestEasyClient(Object messageHandler, SSLContext sslContext, boolean disableTrustManager); + + /** + * Creates a implementation-specific proxy for a given {@code targetClass}. + * + * @param target the {@link WebTarget} instance + * @param targetClass the JAX-RS client resource class + * @return an instance of {@code targetClass} + */ + R targetProxy(WebTarget target, Class targetClass); +} diff --git a/integration/admin-client/src/main/java/org/keycloak/admin/client/token/TokenManager.java b/integration/admin-client/src/main/java/org/keycloak/admin/client/token/TokenManager.java index 8b0b46ab265a..de9bbd7a8cc5 100644 --- a/integration/admin-client/src/main/java/org/keycloak/admin/client/token/TokenManager.java +++ b/integration/admin-client/src/main/java/org/keycloak/admin/client/token/TokenManager.java @@ -17,9 +17,9 @@ package org.keycloak.admin.client.token; -import org.jboss.resteasy.client.jaxrs.ResteasyClient; -import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; +import javax.ws.rs.client.WebTarget; import org.keycloak.admin.client.Config; +import org.keycloak.admin.client.Keycloak; import org.keycloak.admin.client.resource.BasicAuthFilter; import org.keycloak.common.util.Time; import org.keycloak.representations.AccessTokenResponse; @@ -49,11 +49,11 @@ public class TokenManager { public TokenManager(Config config, Client client) { this.config = config; - ResteasyWebTarget target = (ResteasyWebTarget) client.target(config.getServerUrl()); + WebTarget target = client.target(config.getServerUrl()); if (!config.isPublicClient()) { target.register(new BasicAuthFilter(config.getClientId(), config.getClientSecret())); } - this.tokenService = target.proxy(TokenService.class); + this.tokenService = Keycloak.getClientProvider().targetProxy(target, TokenService.class); this.accessTokenGrantType = config.getGrantType(); if (CLIENT_CREDENTIALS.equals(accessTokenGrantType) && config.isPublicClient()) {