keycloak-event-metrics/src/test/java/io/kokuwa/keycloak/metrics/junit/KeycloakClient.java

88 lines
2.8 KiB
Java

package io.kokuwa.keycloak.metrics.junit;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.keycloak.OAuth2Constants;
import org.keycloak.admin.client.Keycloak;
import org.keycloak.admin.client.token.TokenService;
import org.keycloak.representations.idm.ClientRepresentation;
import org.keycloak.representations.idm.CredentialRepresentation;
import org.keycloak.representations.idm.RealmRepresentation;
import org.keycloak.representations.idm.UserRepresentation;
import jakarta.ws.rs.NotAuthorizedException;
import jakarta.ws.rs.core.MultivaluedHashMap;
/**
* Client for keycloak.
*
* @author Stephan Schnabel
*/
public class KeycloakClient {
private final Keycloak keycloak;
private final TokenService token;
KeycloakClient(Keycloak keycloak, TokenService token) {
this.keycloak = keycloak;
this.token = token;
}
public void createRealm(String realmName) {
var realm = new RealmRepresentation();
realm.setId(UUID.randomUUID().toString());
realm.setEnabled(true);
realm.setRealm(realmName);
realm.setEventsListeners(List.of("metrics-listener"));
keycloak.realms().create(realm);
}
public void createClient(String realmName, String clientId) {
var client = new ClientRepresentation();
client.setId(UUID.randomUUID().toString());
client.setClientId(clientId);
client.setPublicClient(true);
client.setDirectAccessGrantsEnabled(true);
var response = keycloak.realms().realm(realmName).clients().create(client);
assertEquals(201, response.getStatus());
}
public void createUser(String realmName, String username, String password) {
var credential = new CredentialRepresentation();
credential.setType(CredentialRepresentation.PASSWORD);
credential.setValue(password);
credential.setTemporary(false);
var user = new UserRepresentation();
user.setEnabled(true);
user.setEmail(username + "@example.org");
user.setEmailVerified(true);
user.setUsername(username);
user.setCredentials(List.of(credential));
var response = keycloak.realms().realm(realmName).users().create(user);
assertEquals(201, response.getStatus());
}
public void deleteUser(String realmName, String username) {
keycloak.realms().realm(realmName).users()
.searchByUsername(username, true).stream()
.map(UserRepresentation::getId)
.forEach(keycloak.realms().realm(realmName).users()::delete);
}
public boolean login(String clientId, String realmName, String username, String password) {
try {
token.grantToken(realmName, new MultivaluedHashMap<>(Map.of(
OAuth2Constants.CLIENT_ID, clientId,
OAuth2Constants.GRANT_TYPE, OAuth2Constants.PASSWORD,
OAuth2Constants.USERNAME, username,
OAuth2Constants.PASSWORD, password)));
return true;
} catch (NotAuthorizedException e) {
return false;
}
}
}