KEYCLOAK-14106 Adding a role to a composite role does not work with kcadm

This commit is contained in:
Martin Kanis 2020-05-27 14:04:00 +02:00 committed by Hynek Mlnařík
parent 7247734a0f
commit 7fea6776f8
5 changed files with 12 additions and 16 deletions

View file

@ -24,6 +24,6 @@ import static org.keycloak.client.admin.cli.util.HttpUtil.getIdForType;
public class ClientOperations {
public static String getIdFromClientId(String rootUrl, String realm, String auth, String clientId) {
return getIdForType(rootUrl, realm, auth, "clients", "clientId", clientId);
return getIdForType(rootUrl, realm, auth, "clients", "clientId", clientId, "clientId");
}
}

View file

@ -29,11 +29,11 @@ import static org.keycloak.client.admin.cli.util.HttpUtil.getIdForType;
public class GroupOperations {
public static String getIdFromName(String rootUrl, String realm, String auth, String groupname) {
return getIdForType(rootUrl, realm, auth, "groups", "name", groupname);
return getIdForType(rootUrl, realm, auth, "groups", "name", groupname, "name");
}
public static String getIdFromPath(String rootUrl, String realm, String auth, String path) {
return getIdForType(rootUrl, realm, auth, "groups", "path", path);
return getIdForType(rootUrl, realm, auth, "groups", "path", path, "path");
}
public static void addRealmRoles(String rootUrl, String realm, String auth, String groupid, List<?> roles) {

View file

@ -38,7 +38,7 @@ public class RoleOperations {
public static class LIST_OF_NODES extends ArrayList<ObjectNode>{};
public static String getIdFromRoleName(String adminRoot, String realm, String auth, String rname) {
return getIdForType(adminRoot, realm, auth, "roles", "name", rname);
return getIdForType(adminRoot, realm, auth, "roles", "search", rname, "name");
}
public static void addRealmRoles(String rootUrl, String realm, String auth, String roleid, List<?> roles) {
@ -60,11 +60,11 @@ public class RoleOperations {
}
public static String getRoleNameFromId(String adminRoot, String realm, String auth, String rid) {
return getAttrForType(adminRoot, realm, auth, "roles", "id", rid, "name");
return getAttrForType(adminRoot, realm, auth, "roles", "id", rid, "id","name");
}
public static String getClientRoleNameFromId(String adminRoot, String realm, String auth, String cid, String rid) {
return getAttrForType(adminRoot, realm, auth, "clients/" + cid + "/roles", "id", rid, "name");
return getAttrForType(adminRoot, realm, auth, "clients/" + cid + "/roles", "id", rid, "id", "name");
}
public static List<RoleRepresentation> getRealmRoles(String rootUrl, String realm, String auth) {

View file

@ -91,6 +91,6 @@ public class UserOperations {
}
public static String getIdFromUsername(String rootUrl, String realm, String auth, String username) {
return getIdForType(rootUrl, realm, auth, "users", "username", username);
return getIdForType(rootUrl, realm, auth, "users", "username", username, "username");
}
}

View file

@ -434,25 +434,21 @@ public class HttpUtil {
checkSuccess(resourceUrl, response);
}
public static String getIdForType(String rootUrl, String realm, String auth, String resourceEndpoint, String attrName, String attrValue) {
public static String getIdForType(String rootUrl, String realm, String auth, String resourceEndpoint, String attrName, String attrValue, String inputAttrName) {
return getAttrForType(rootUrl, realm, auth, resourceEndpoint, attrName, attrValue, "id");
return getAttrForType(rootUrl, realm, auth, resourceEndpoint, attrName, attrValue, inputAttrName, "id");
}
public static String getAttrForType(String rootUrl, String realm, String auth, String resourceEndpoint, String attrName, String attrValue, String returnAttrName) {
public static String getAttrForType(String rootUrl, String realm, String auth, String resourceEndpoint, String attrName, String attrValue, String inputAttrName, String returnAttrName) {
String resourceUrl = composeResourceUrl(rootUrl, realm, resourceEndpoint);
if ("roles".equals(resourceEndpoint)) {
resourceUrl = HttpUtil.addQueryParamsToUri(resourceUrl, "search", attrValue, "first", "0", "max", "2");
} else {
resourceUrl = HttpUtil.addQueryParamsToUri(resourceUrl, attrName, attrValue, "first", "0", "max", "2");
}
resourceUrl = HttpUtil.addQueryParamsToUri(resourceUrl, attrName, attrValue, "first", "0", "max", "2");
List<ObjectNode> users = doGetJSON(RoleOperations.LIST_OF_NODES.class, resourceUrl, auth);
ObjectNode user;
try {
user = new LocalSearch(users).exactMatchOne(attrValue, attrName);
user = new LocalSearch(users).exactMatchOne(attrValue, inputAttrName);
} catch (Exception e) {
throw new RuntimeException("Multiple " + resourceEndpoint + " found for " + attrName + ": " + attrValue, e);
}