parent
4950f7bebe
commit
2252b09949
11 changed files with 60 additions and 317 deletions
|
@ -463,31 +463,6 @@ public class ClientAdapter implements ClientModel, CachedObject {
|
||||||
updated.setBaseUrl(url);
|
updated.setBaseUrl(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public Stream<String> getDefaultRolesStream() {
|
|
||||||
if (isUpdated()) return updated.getDefaultRolesStream();
|
|
||||||
return getRealm().getDefaultRole().getCompositesStream().filter(this::isClientRole).map(RoleModel::getName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isClientRole(RoleModel role) {
|
|
||||||
return role.isClientRole() && Objects.equals(role.getContainerId(), this.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public void addDefaultRole(String name) {
|
|
||||||
getDelegateForUpdate();
|
|
||||||
updated.addDefaultRole(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public void removeDefaultRoles(String... defaultRoles) {
|
|
||||||
getDelegateForUpdate();
|
|
||||||
updated.removeDefaultRoles(defaultRoles);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isBearerOnly() {
|
public boolean isBearerOnly() {
|
||||||
if (isUpdated()) return updated.isBearerOnly();
|
if (isUpdated()) return updated.isBearerOnly();
|
||||||
|
|
|
@ -747,32 +747,6 @@ public class RealmAdapter implements CachedRealmModel {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public Stream<String> getDefaultRolesStream() {
|
|
||||||
if (isUpdated()) return updated.getDefaultRolesStream();
|
|
||||||
return getDefaultRole().getCompositesStream().filter(this::isRealmRole).map(RoleModel::getName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isRealmRole(RoleModel role) {
|
|
||||||
return ! role.isClientRole();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public void addDefaultRole(String name) {
|
|
||||||
getDelegateForUpdate();
|
|
||||||
updated.addDefaultRole(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public void removeDefaultRoles(String... defaultRoles) {
|
|
||||||
getDelegateForUpdate();
|
|
||||||
updated.removeDefaultRoles(defaultRoles);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addToDefaultRoles(RoleModel role) {
|
public void addToDefaultRoles(RoleModel role) {
|
||||||
getDelegateForUpdate();
|
getDelegateForUpdate();
|
||||||
|
|
|
@ -655,38 +655,6 @@ public class ClientAdapter implements ClientModel, JpaModel<ClientEntity> {
|
||||||
return RoleUtils.hasRole(getRolesStream(), role);
|
return RoleUtils.hasRole(getRolesStream(), role);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public Stream<String> getDefaultRolesStream() {
|
|
||||||
return realm.getDefaultRole().getCompositesStream().filter(this::isClientRole).map(RoleModel::getName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isClientRole(RoleModel role) {
|
|
||||||
return role.isClientRole() && Objects.equals(role.getContainerId(), this.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public void addDefaultRole(String name) {
|
|
||||||
realm.getDefaultRole().addCompositeRole(getOrAddRoleId(name));
|
|
||||||
}
|
|
||||||
|
|
||||||
private RoleModel getOrAddRoleId(String name) {
|
|
||||||
RoleModel role = getRole(name);
|
|
||||||
if (role == null) {
|
|
||||||
role = addRole(name);
|
|
||||||
}
|
|
||||||
return role;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public void removeDefaultRoles(String... defaultRoles) {
|
|
||||||
for (String defaultRole : defaultRoles) {
|
|
||||||
realm.getDefaultRole().removeCompositeRole(getRole(defaultRole));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getNodeReRegistrationTimeout() {
|
public int getNodeReRegistrationTimeout() {
|
||||||
return entity.getNodeReRegistrationTimeout();
|
return entity.getNodeReRegistrationTimeout();
|
||||||
|
|
|
@ -688,38 +688,6 @@ public class RealmAdapter implements LegacyRealmModel, JpaModel<RealmEntity> {
|
||||||
return realm.getRequiredCredentials().stream().map(this::toRequiredCredentialModel);
|
return realm.getRequiredCredentials().stream().map(this::toRequiredCredentialModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public Stream<String> getDefaultRolesStream() {
|
|
||||||
return getDefaultRole().getCompositesStream().filter(this::isRealmRole).map(RoleModel::getName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isRealmRole(RoleModel role) {
|
|
||||||
return ! role.isClientRole();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public void addDefaultRole(String name) {
|
|
||||||
getDefaultRole().addCompositeRole(getOrAddRoleId(name));
|
|
||||||
}
|
|
||||||
|
|
||||||
private RoleModel getOrAddRoleId(String name) {
|
|
||||||
RoleModel role = getRole(name);
|
|
||||||
if (role == null) {
|
|
||||||
role = addRole(name);
|
|
||||||
}
|
|
||||||
return role;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public void removeDefaultRoles(String... defaultRoles) {
|
|
||||||
for (String defaultRole : defaultRoles) {
|
|
||||||
getDefaultRole().removeCompositeRole(getRole(defaultRole));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Stream<GroupModel> getDefaultGroupsStream() {
|
public Stream<GroupModel> getDefaultGroupsStream() {
|
||||||
return realm.getDefaultGroupIds().stream().map(this::getGroupById);
|
return realm.getDefaultGroupIds().stream().map(this::getGroupById);
|
||||||
|
|
|
@ -64,27 +64,4 @@ public abstract class UnsupportedOperationsClientStorageAdapter implements Clien
|
||||||
return Stream.empty();
|
return Stream.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public final Stream<String> getDefaultRolesStream() {
|
|
||||||
return Stream.empty();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final void addDefaultRole(String name) {
|
|
||||||
throw new ModelException("Unsupported operation");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final void updateDefaultRoles(String... defaultRoles) {
|
|
||||||
throw new ModelException("Unsupported operation");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final void removeDefaultRoles(String... defaultRoles) {
|
|
||||||
throw new ModelException("Unsupported operation");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -482,40 +482,6 @@ public abstract class MapClientAdapter extends AbstractClientModel<MapClientEnti
|
||||||
return getRolesStream().anyMatch(r -> (Objects.equals(r, role) || r.hasRole(role)));
|
return getRolesStream().anyMatch(r -> (Objects.equals(r, role) || r.hasRole(role)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************** Default roles ****************/
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public Stream<String> getDefaultRolesStream() {
|
|
||||||
return realm.getDefaultRole().getCompositesStream().filter(this::isClientRole).map(RoleModel::getName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isClientRole(RoleModel role) {
|
|
||||||
return role.isClientRole() && Objects.equals(role.getContainerId(), this.getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public void addDefaultRole(String name) {
|
|
||||||
realm.getDefaultRole().addCompositeRole(getOrAddRoleId(name));
|
|
||||||
}
|
|
||||||
|
|
||||||
private RoleModel getOrAddRoleId(String name) {
|
|
||||||
RoleModel role = getRole(name);
|
|
||||||
if (role == null) {
|
|
||||||
role = addRole(name);
|
|
||||||
}
|
|
||||||
return role;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public void removeDefaultRoles(String... defaultRoles) {
|
|
||||||
for (String defaultRole : defaultRoles) {
|
|
||||||
realm.getDefaultRole().removeCompositeRole(getRole(defaultRole));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*************** Protocol mappers ****************/
|
/*************** Protocol mappers ****************/
|
||||||
|
|
||||||
private String safeGetProtocol() {
|
private String safeGetProtocol() {
|
||||||
|
|
|
@ -1554,38 +1554,6 @@ public class MapRealmAdapter extends AbstractRealmModel<MapRealmEntity> implemen
|
||||||
return session.roles().searchForRolesStream(this, search, first, max);
|
return session.roles().searchForRolesStream(this, search, first, max);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public Stream<String> getDefaultRolesStream() {
|
|
||||||
return getDefaultRole().getCompositesStream().filter(this::isRealmRole).map(RoleModel::getName);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isRealmRole(RoleModel role) {
|
|
||||||
return ! role.isClientRole();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public void addDefaultRole(String name) {
|
|
||||||
getDefaultRole().addCompositeRole(getOrAddRoleId(name));
|
|
||||||
}
|
|
||||||
|
|
||||||
private RoleModel getOrAddRoleId(String name) {
|
|
||||||
RoleModel role = getRole(name);
|
|
||||||
if (role == null) {
|
|
||||||
role = addRole(name);
|
|
||||||
}
|
|
||||||
return role;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@Deprecated
|
|
||||||
public void removeDefaultRoles(String... defaultRoles) {
|
|
||||||
for (String defaultRole : defaultRoles) {
|
|
||||||
getDefaultRole().removeCompositeRole(getRole(defaultRole));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isBruteForceProtected() {
|
public boolean isBruteForceProtected() {
|
||||||
return getAttribute(BRUTE_FORCE_PROTECTED, false);
|
return getAttribute(BRUTE_FORCE_PROTECTED, false);
|
||||||
|
|
|
@ -589,26 +589,6 @@ public class ClientModelLazyDelegate implements ClientModel {
|
||||||
return getDelegate().searchForRolesStream(search, first, max);
|
return getDelegate().searchForRolesStream(search, first, max);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Stream<String> getDefaultRolesStream() {
|
|
||||||
return getDelegate().getDefaultRolesStream();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addDefaultRole(String name) {
|
|
||||||
getDelegate().addDefaultRole(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateDefaultRoles(String... defaultRoles) {
|
|
||||||
getDelegate().updateDefaultRoles(defaultRoles);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeDefaultRoles(String... defaultRoles) {
|
|
||||||
getDelegate().removeDefaultRoles(defaultRoles);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Stream<ProtocolMapperModel> getProtocolMappersStream() {
|
public Stream<ProtocolMapperModel> getProtocolMappersStream() {
|
||||||
return getDelegate().getProtocolMappersStream();
|
return getDelegate().getProtocolMappersStream();
|
||||||
|
|
|
@ -67,21 +67,6 @@ public class IdentityBrokerStateTestHelpers {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Stream<String> getDefaultRolesStream() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addDefaultRole(String name) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeDefaultRoles(String... defaultRoles) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getClientId() {
|
public String getClientId() {
|
||||||
return clientId;
|
return clientId;
|
||||||
|
@ -553,21 +538,6 @@ public class IdentityBrokerStateTestHelpers {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Stream<String> getDefaultRolesStream() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addDefaultRole(String name) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeDefaultRoles(String... defaultRoles) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -73,62 +73,4 @@ public interface RoleContainerModel {
|
||||||
*/
|
*/
|
||||||
Stream<RoleModel> searchForRolesStream(String search, Integer first, Integer max);
|
Stream<RoleModel> searchForRolesStream(String search, Integer first, Integer max);
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Default roles are now managed by {@link org.keycloak.models.RealmModel#getDefaultRole()}. This method will be removed.
|
|
||||||
* @return List of default roles names or empty list if there are none. Never returns {@code null}.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
default List<String> getDefaultRoles() {
|
|
||||||
Stream<String> defaultRolesStream = getDefaultRolesStream();
|
|
||||||
if (defaultRolesStream != null) {
|
|
||||||
return defaultRolesStream.collect(Collectors.toList());
|
|
||||||
} else {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Default roles are now managed by {@link org.keycloak.models.RealmModel#getDefaultRole()}. This method will be removed.
|
|
||||||
* @return Stream of default roles names or empty stream if there are none. Never returns {@code null}.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
Stream<String> getDefaultRolesStream();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Default roles are now managed by {@link org.keycloak.models.RealmModel#getDefaultRole()}. This method will be removed.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
void addDefaultRole(String name);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Default roles are now managed by {@link org.keycloak.models.RealmModel#getDefaultRole()}. This method will be removed.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
default void updateDefaultRoles(String... defaultRoles) {
|
|
||||||
List<String> defaultRolesArray = Arrays.asList(defaultRoles);
|
|
||||||
Collection<String> entities = getDefaultRolesStream().collect(Collectors.toList());
|
|
||||||
Set<String> already = new HashSet<>();
|
|
||||||
ArrayList<String> remove = new ArrayList<>();
|
|
||||||
for (String rel : entities) {
|
|
||||||
if (! defaultRolesArray.contains(rel)) {
|
|
||||||
remove.add(rel);
|
|
||||||
} else {
|
|
||||||
already.add(rel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
removeDefaultRoles(remove.toArray(new String[] {}));
|
|
||||||
|
|
||||||
for (String roleName : defaultRoles) {
|
|
||||||
if (!already.contains(roleName)) {
|
|
||||||
addDefaultRole(roleName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Default roles are now managed by {@link org.keycloak.models.RealmModel#getDefaultRole()}. This method will be removed.
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
void removeDefaultRoles(String... defaultRoles);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,14 @@
|
||||||
|
|
||||||
package org.keycloak.services.clientregistration;
|
package org.keycloak.services.clientregistration;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
import org.keycloak.events.EventBuilder;
|
import org.keycloak.events.EventBuilder;
|
||||||
import org.keycloak.events.EventType;
|
import org.keycloak.events.EventType;
|
||||||
|
@ -26,6 +34,7 @@ import org.keycloak.models.ClientRegistrationAccessTokenConstants;
|
||||||
import org.keycloak.models.KeycloakSession;
|
import org.keycloak.models.KeycloakSession;
|
||||||
import org.keycloak.models.ModelDuplicateException;
|
import org.keycloak.models.ModelDuplicateException;
|
||||||
import org.keycloak.models.RealmModel;
|
import org.keycloak.models.RealmModel;
|
||||||
|
import org.keycloak.models.RoleModel;
|
||||||
import org.keycloak.models.utils.ModelToRepresentation;
|
import org.keycloak.models.utils.ModelToRepresentation;
|
||||||
import org.keycloak.models.utils.RepresentationToModel;
|
import org.keycloak.models.utils.RepresentationToModel;
|
||||||
import org.keycloak.representations.idm.ClientRepresentation;
|
import org.keycloak.representations.idm.ClientRepresentation;
|
||||||
|
@ -69,7 +78,7 @@ public abstract class AbstractClientRegistrationProvider implements ClientRegist
|
||||||
|
|
||||||
if (client.getDefaultRoles() != null) {
|
if (client.getDefaultRoles() != null) {
|
||||||
for (String name : client.getDefaultRoles()) {
|
for (String name : client.getDefaultRoles()) {
|
||||||
clientModel.addDefaultRole(name);
|
addDefaultRole(clientModel, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +108,7 @@ public abstract class AbstractClientRegistrationProvider implements ClientRegist
|
||||||
|
|
||||||
client.setDirectAccessGrantsEnabled(false);
|
client.setDirectAccessGrantsEnabled(false);
|
||||||
|
|
||||||
Stream<String> defaultRolesNames = clientModel.getDefaultRolesStream();
|
Stream<String> defaultRolesNames = getDefaultRolesStream(clientModel);
|
||||||
if (defaultRolesNames != null) {
|
if (defaultRolesNames != null) {
|
||||||
client.setDefaultRoles(defaultRolesNames.toArray(String[]::new));
|
client.setDefaultRoles(defaultRolesNames.toArray(String[]::new));
|
||||||
}
|
}
|
||||||
|
@ -128,7 +137,7 @@ public abstract class AbstractClientRegistrationProvider implements ClientRegist
|
||||||
rep.setRegistrationAccessToken(registrationAccessToken);
|
rep.setRegistrationAccessToken(registrationAccessToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
Stream<String> defaultRolesNames = client.getDefaultRolesStream();
|
Stream<String> defaultRolesNames = getDefaultRolesStream(client);
|
||||||
if (defaultRolesNames != null) {
|
if (defaultRolesNames != null) {
|
||||||
rep.setDefaultRoles(defaultRolesNames.toArray(String[]::new));
|
rep.setDefaultRoles(defaultRolesNames.toArray(String[]::new));
|
||||||
}
|
}
|
||||||
|
@ -154,14 +163,14 @@ public abstract class AbstractClientRegistrationProvider implements ClientRegist
|
||||||
RepresentationToModel.updateClientProtocolMappers(rep, client);
|
RepresentationToModel.updateClientProtocolMappers(rep, client);
|
||||||
|
|
||||||
if (rep.getDefaultRoles() != null) {
|
if (rep.getDefaultRoles() != null) {
|
||||||
client.updateDefaultRoles(rep.getDefaultRoles());
|
updateDefaultRoles(client, rep.getDefaultRoles());
|
||||||
}
|
}
|
||||||
|
|
||||||
rep = ModelToRepresentation.toRepresentation(client, session);
|
rep = ModelToRepresentation.toRepresentation(client, session);
|
||||||
|
|
||||||
rep.setSecret(client.getSecret());
|
rep.setSecret(client.getSecret());
|
||||||
|
|
||||||
Stream<String> defaultRolesNames = client.getDefaultRolesStream();
|
Stream<String> defaultRolesNames = getDefaultRolesStream(client);
|
||||||
if (defaultRolesNames != null) {
|
if (defaultRolesNames != null) {
|
||||||
rep.setDefaultRoles(defaultRolesNames.toArray(String[]::new));
|
rep.setDefaultRoles(defaultRolesNames.toArray(String[]::new));
|
||||||
}
|
}
|
||||||
|
@ -239,4 +248,50 @@ public abstract class AbstractClientRegistrationProvider implements ClientRegist
|
||||||
public void close() {
|
public void close() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* =========== default roles =========== */
|
||||||
|
|
||||||
|
private void addDefaultRole(ClientModel client, String name) {
|
||||||
|
client.getRealm().getDefaultRole().addCompositeRole(getOrAddRoleId(client, name));
|
||||||
|
}
|
||||||
|
|
||||||
|
private RoleModel getOrAddRoleId(ClientModel client, String name) {
|
||||||
|
RoleModel role = client.getRole(name);
|
||||||
|
if (role == null) {
|
||||||
|
role = client.addRole(name);
|
||||||
|
}
|
||||||
|
return role;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Stream<String> getDefaultRolesStream(ClientModel client) {
|
||||||
|
return client.getRealm().getDefaultRole().getCompositesStream()
|
||||||
|
.filter(role -> role.isClientRole() && Objects.equals(role.getContainerId(), client.getId()))
|
||||||
|
.map(RoleModel::getName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateDefaultRoles(ClientModel client, String... defaultRoles) {
|
||||||
|
List<String> defaultRolesArray = Arrays.asList(String.valueOf(defaultRoles));
|
||||||
|
Collection<String> entities = getDefaultRolesStream(client).collect(Collectors.toList());
|
||||||
|
Set<String> already = new HashSet<>();
|
||||||
|
ArrayList<String> remove = new ArrayList<>();
|
||||||
|
for (String rel : entities) {
|
||||||
|
if (! defaultRolesArray.contains(rel)) {
|
||||||
|
remove.add(rel);
|
||||||
|
} else {
|
||||||
|
already.add(rel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
removeDefaultRoles(client, remove.toArray(new String[] {}));
|
||||||
|
|
||||||
|
for (String roleName : defaultRoles) {
|
||||||
|
if (!already.contains(roleName)) {
|
||||||
|
addDefaultRole(client, roleName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void removeDefaultRoles(ClientModel client, String... defaultRoles) {
|
||||||
|
for (String defaultRole : defaultRoles) {
|
||||||
|
client.getRealm().getDefaultRole().removeCompositeRole(client.getRole(defaultRole));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue