package org.keycloak.testsuite.util;
import org.keycloak.admin.client.resource.ClientResource;
import org.keycloak.admin.client.resource.RealmResource;
import org.keycloak.representations.idm.ClientRepresentation;
import org.keycloak.representations.idm.ProtocolMapperRepresentation;
import org.keycloak.representations.idm.RoleRepresentation;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import static org.keycloak.testsuite.admin.ApiUtil.findClientByClientId;
import static org.keycloak.testsuite.admin.ApiUtil.findProtocolMapperByName;
/**
* @author <a href="mailto:bruno@abstractj.org">Bruno Oliveira</a>.
*/
public class ClientManager {
private static RealmResource realm;
private ClientManager() {
}
public static ClientManager realm(RealmResource realm) {
ClientManager.realm = realm;
return new ClientManager();
}
public ClientManagerBuilder clientId(String clientId) {
return new ClientManagerBuilder(findClientByClientId(realm, clientId));
}
public class ClientManagerBuilder {
private final ClientResource clientResource;
public ClientManagerBuilder(ClientResource clientResource) {
this.clientResource = clientResource;
}
public void renameTo(String newName) {
ClientRepresentation app = clientResource.toRepresentation();
app.setClientId(newName);
clientResource.update(app);
}
public void enabled(Boolean enabled) {
ClientRepresentation app = clientResource.toRepresentation();
app.setEnabled(enabled);
clientResource.update(app);
}
public void updateAttribute(String attribute, String value) {
ClientRepresentation app = clientResource.toRepresentation();
if (app.getAttributes() == null) {
app.setAttributes(new LinkedHashMap<String, String>());
}
app.getAttributes().put(attribute, value);
clientResource.update(app);
}
public void directAccessGrant(Boolean enable) {
ClientRepresentation app = clientResource.toRepresentation();
app.setDirectAccessGrantsEnabled(enable);
clientResource.update(app);
}
public ClientManagerBuilder standardFlow(Boolean enable) {
ClientRepresentation app = clientResource.toRepresentation();
app.setStandardFlowEnabled(enable);
clientResource.update(app);
return this;
}
public ClientManagerBuilder implicitFlow(Boolean enable) {
ClientRepresentation app = clientResource.toRepresentation();
app.setImplicitFlowEnabled(enable);
clientResource.update(app);
return this;
}
public void fullScopeAllowed(boolean enable) {
ClientRepresentation app = clientResource.toRepresentation();
app.setFullScopeAllowed(enable);
clientResource.update(app);
}
public void consentRequired(boolean enable) {
ClientRepresentation app = clientResource.toRepresentation();
app.setConsentRequired(enable);
clientResource.update(app);
}
public ClientManagerBuilder addProtocolMapper(ProtocolMapperRepresentation protocolMapper) {
clientResource.getProtocolMappers().createMapper(protocolMapper);
return this;
}
public void addScopeMapping(RoleRepresentation newRole) {
clientResource.getScopeMappings().realmLevel().add(Collections.singletonList(newRole));
}
public ClientManagerBuilder removeProtocolMapper(String protocolMapperName) {
ProtocolMapperRepresentation rep = findProtocolMapperByName(clientResource, protocolMapperName);
clientResource.getProtocolMappers().delete(rep.getId());
return this;
}
public void removeScopeMapping(RoleRepresentation newRole) {
clientResource.getScopeMappings().realmLevel().remove(Collections.singletonList(newRole));
}
public void addRedirectUris(String... redirectUris) {
ClientRepresentation app = clientResource.toRepresentation();
if (app.getRedirectUris() == null) {
app.setRedirectUris(new LinkedList<String>());
}
for (String redirectUri : redirectUris) {
app.getRedirectUris().add(redirectUri);
}
clientResource.update(app);
}
public void removeRedirectUris(String... redirectUris) {
ClientRepresentation app = clientResource.toRepresentation();
for (String redirectUri : redirectUris) {
if (app.getRedirectUris() != null) {
app.getRedirectUris().remove(redirectUri);
}
}
clientResource.update(app);
}
}
}