Skip to content

Commit de584eb

Browse files
committed
revert some stupid resteasy version changes and implement http requests with SimpleHttp from KC
1 parent e7a940f commit de584eb

File tree

8 files changed

+91
-55
lines changed

8 files changed

+91
-55
lines changed

event-listener/pom.xml

-4
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,6 @@
3939
</exclusion>
4040
</exclusions>
4141
</dependency>
42-
<dependency>
43-
<groupId>org.apache.httpcomponents</groupId>
44-
<artifactId>httpclient</artifactId>
45-
</dependency>
4642
</dependencies>
4743

4844
<build>

magiclink/pom.xml

-4
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@
3030
<groupId>org.keycloak</groupId>
3131
<artifactId>keycloak-services</artifactId>
3232
</dependency>
33-
<dependency>
34-
<groupId>org.jboss.resteasy</groupId>
35-
<artifactId>resteasy-core</artifactId>
36-
</dependency>
3733
<dependency>
3834
<groupId>org.projectlombok</groupId>
3935
<artifactId>lombok</artifactId>

pom.xml

+2-8
Original file line numberDiff line numberDiff line change
@@ -28,24 +28,18 @@
2828
<maven-compiler.version>3.8.1</maven-compiler.version>
2929
<maven-shade.version>3.2.4</maven-shade.version>
3030
<maven-surefire.version>3.0.0-M5</maven-surefire.version>
31-
<shrinkwrap-resolver.version>3.1.4</shrinkwrap-resolver.version>
3231
</properties>
3332

3433
<dependencyManagement>
3534
<dependencies>
3635
<dependency>
3736
<groupId>com.github.dasniko</groupId>
3837
<artifactId>keycloak-spi-bom</artifactId>
39-
<version>${keycloak.version}</version>
38+
<version>main-SNAPSHOT</version>
39+
<!-- <version>${keycloak.version}</version>-->
4040
<type>pom</type>
4141
<scope>import</scope>
4242
</dependency>
43-
<dependency>
44-
<groupId>org.jboss.shrinkwrap.resolver</groupId>
45-
<artifactId>shrinkwrap-resolver-impl-maven-archive</artifactId>
46-
<version>${shrinkwrap-resolver.version}</version>
47-
<scope>test</scope>
48-
</dependency>
4943
</dependencies>
5044
</dependencyManagement>
5145

requiredaction/pom.xml

-4
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,6 @@
3030
<groupId>org.keycloak</groupId>
3131
<artifactId>keycloak-services</artifactId>
3232
</dependency>
33-
<dependency>
34-
<groupId>org.jboss.resteasy</groupId>
35-
<artifactId>resteasy-core</artifactId>
36-
</dependency>
3733
<dependency>
3834
<groupId>org.projectlombok</groupId>
3935
<artifactId>lombok</artifactId>

user-provider/pom.xml

+2-6
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
<artifactId>keycloak-server-spi-private</artifactId>
2828
</dependency>
2929
<dependency>
30-
<groupId>org.jboss.resteasy</groupId>
31-
<artifactId>resteasy-client</artifactId>
30+
<groupId>org.keycloak</groupId>
31+
<artifactId>keycloak-services</artifactId>
3232
</dependency>
3333
<dependency>
3434
<groupId>org.projectlombok</groupId>
@@ -55,10 +55,6 @@
5555
<groupId>com.github.dasniko</groupId>
5656
<artifactId>testcontainers-keycloak</artifactId>
5757
</dependency>
58-
<dependency>
59-
<groupId>org.jboss.shrinkwrap.resolver</groupId>
60-
<artifactId>shrinkwrap-resolver-impl-maven-archive</artifactId>
61-
</dependency>
6258
<dependency>
6359
<groupId>io.rest-assured</groupId>
6460
<artifactId>rest-assured</artifactId>

user-provider/src/main/java/dasniko/keycloak/user/PeanutsUserProvider.java

+2-14
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,9 @@
33
import dasniko.keycloak.user.external.CredentialData;
44
import dasniko.keycloak.user.external.Peanut;
55
import dasniko.keycloak.user.external.PeanutsClient;
6+
import dasniko.keycloak.user.external.PeanutsClientSimpleHttp;
67
import lombok.extern.slf4j.Slf4j;
7-
import org.apache.http.impl.client.CloseableHttpClient;
8-
import org.jboss.resteasy.client.jaxrs.ResteasyClient;
9-
import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
10-
import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;
11-
import org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClientEngine;
12-
import org.jboss.resteasy.client.jaxrs.internal.BasicAuthentication;
138
import org.keycloak.component.ComponentModel;
14-
import org.keycloak.connections.httpclient.HttpClientProvider;
159
import org.keycloak.credential.CredentialInput;
1610
import org.keycloak.credential.CredentialInputUpdater;
1711
import org.keycloak.credential.CredentialInputValidator;
@@ -55,13 +49,7 @@ public class PeanutsUserProvider implements UserStorageProvider,
5549
public PeanutsUserProvider(KeycloakSession session, ComponentModel model) {
5650
this.session = session;
5751
this.model = model;
58-
59-
CloseableHttpClient httpClient = session.getProvider(HttpClientProvider.class).getHttpClient();
60-
ApacheHttpClientEngine engine = ApacheHttpClientEngine.create(httpClient, false);
61-
ResteasyClient resteasyClient = ((ResteasyClientBuilder) ResteasyClientBuilder.newBuilder()).httpEngine(engine).build();
62-
ResteasyWebTarget target = resteasyClient.target(model.get(Constants.BASE_URL));
63-
target.register(new BasicAuthentication(model.get(Constants.AUTH_USERNAME), model.get(Constants.AUTH_PASSWORD)));
64-
this.client = target.proxyBuilder(PeanutsClient.class).classloader(this.getClass().getClassLoader()).build();
52+
this.client = new PeanutsClientSimpleHttp(session, model);
6553
}
6654

6755
@Override
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package dasniko.keycloak.user.external;
2+
3+
import com.fasterxml.jackson.core.type.TypeReference;
4+
import dasniko.keycloak.user.Constants;
5+
import lombok.SneakyThrows;
6+
import lombok.extern.slf4j.Slf4j;
7+
import org.apache.http.impl.client.CloseableHttpClient;
8+
import org.keycloak.broker.provider.util.SimpleHttp;
9+
import org.keycloak.component.ComponentModel;
10+
import org.keycloak.connections.httpclient.HttpClientProvider;
11+
import org.keycloak.models.KeycloakSession;
12+
13+
import javax.ws.rs.WebApplicationException;
14+
import javax.ws.rs.core.Response;
15+
import java.util.List;
16+
17+
/**
18+
* @author Niko Köbler, https://www.n-k.de, @dasniko
19+
*/
20+
@Slf4j
21+
public class PeanutsClientSimpleHttp implements PeanutsClient {
22+
23+
private final CloseableHttpClient httpClient;
24+
private final String baseUrl;
25+
private final String basicUsername;
26+
private final String basicPassword;
27+
28+
public PeanutsClientSimpleHttp(KeycloakSession session, ComponentModel model) {
29+
this.httpClient = session.getProvider(HttpClientProvider.class).getHttpClient();
30+
this.baseUrl = model.get(Constants.BASE_URL);
31+
this.basicUsername = model.get(Constants.AUTH_USERNAME);
32+
this.basicPassword = model.get(Constants.AUTH_PASSWORD);
33+
}
34+
35+
@Override
36+
@SneakyThrows
37+
public List<Peanut> getPeanuts(String search, int first, int max) {
38+
SimpleHttp simpleHttp = SimpleHttp.doGet(baseUrl, httpClient).authBasic(basicUsername, basicPassword)
39+
.param("first", String.valueOf(first))
40+
.param("max", String.valueOf(max));
41+
if (search != null) {
42+
simpleHttp.param("search", search);
43+
}
44+
return simpleHttp.asJson(new TypeReference<>() {});
45+
}
46+
47+
@Override
48+
@SneakyThrows
49+
public Integer getPeanutsCount() {
50+
String url = String.format("%s/count", baseUrl);
51+
String count = SimpleHttp.doGet(url, httpClient).authBasic(basicUsername, basicPassword).asString();
52+
return Integer.valueOf(count);
53+
}
54+
55+
@Override
56+
@SneakyThrows
57+
public Peanut getPeanutById(String id) {
58+
String url = String.format("%s/%s", baseUrl, id);
59+
SimpleHttp.Response response = SimpleHttp.doGet(url, httpClient).authBasic(basicUsername, basicPassword).asResponse();
60+
if (response.getStatus() == 404) {
61+
throw new WebApplicationException(response.getStatus());
62+
}
63+
return response.asJson(Peanut.class);
64+
}
65+
66+
@Override
67+
@SneakyThrows
68+
public CredentialData getCredentialData(String id) {
69+
String url = String.format("%s/%s/credentials", baseUrl, id);
70+
SimpleHttp.Response response = SimpleHttp.doGet(url, httpClient).authBasic(basicUsername, basicPassword).asResponse();
71+
if (response.getStatus() == 404) {
72+
throw new WebApplicationException(response.getStatus());
73+
}
74+
return response.asJson(CredentialData.class);
75+
}
76+
77+
@Override
78+
@SneakyThrows
79+
public Response updateCredentialData(String id, CredentialData credentialData) {
80+
String url = String.format("%s/%s/credentials", baseUrl, id);
81+
int status = SimpleHttp.doPut(url, httpClient).authBasic(basicUsername, basicPassword).json(credentialData).asStatus();
82+
return Response.status(status).build();
83+
}
84+
85+
}

user-provider/src/test/java/dasniko/keycloak/user/PeanutsUserProviderTest.java

-15
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55
import dasniko.testcontainers.keycloak.KeycloakContainer;
66
import io.restassured.response.Response;
77
import lombok.extern.slf4j.Slf4j;
8-
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
9-
import org.jboss.shrinkwrap.resolver.api.maven.MavenResolvedArtifact;
10-
import org.jboss.shrinkwrap.resolver.api.maven.MavenResolverSystem;
118
import org.junit.jupiter.api.Test;
129
import org.junit.jupiter.params.ParameterizedTest;
1310
import org.junit.jupiter.params.provider.ValueSource;
@@ -23,7 +20,6 @@
2320
import org.testcontainers.junit.jupiter.Testcontainers;
2421
import org.testcontainers.utility.MountableFile;
2522

26-
import java.io.File;
2723
import java.io.IOException;
2824
import java.util.Base64;
2925
import java.util.HashMap;
@@ -49,21 +45,10 @@ public class PeanutsUserProviderTest {
4945

5046
static Network network = Network.newNetwork();
5147

52-
private static final List<File> dependencies;
53-
static {
54-
MavenResolverSystem resolver = Maven.resolver();
55-
String version = resolver.loadPomFromFile("./pom.xml")
56-
.resolve("org.jboss.resteasy:resteasy-client").withoutTransitivity().asSingle(MavenResolvedArtifact.class).getResolvedVersion();
57-
dependencies = resolver
58-
.resolve("org.jboss.resteasy:resteasy-client:" + version, "org.jboss.resteasy:resteasy-client-api:" + version)
59-
.withoutTransitivity().asList(File.class);
60-
}
61-
6248
@Container
6349
private static final KeycloakContainer keycloak = new KeycloakContainer()
6450
.withRealmImportFile("/peanuts-realm.json")
6551
.withProviderClassesFrom("target/classes")
66-
.withProviderLibsFrom(dependencies)
6752
.withNetwork(network);
6853

6954
@Container

0 commit comments

Comments
 (0)