@Override public ProtocolMapperModel getProtocolMapperById(String id) { ProtocolMapperEntity entity = getProtocolMapperEntity(id); if (entity == null) return null; return entityToModel(entity); }
@Override public String getAttribute(String name) { return getAttributes().get(name); }
public String toString() { return getClientId(); }
@Override public ProtocolMapperModel getProtocolMapperByName(String protocol, String name) { ProtocolMapperEntity entity = getProtocolMapperEntityByName(protocol, name); if (entity == null) return null; return entityToModel(entity); }
@Override public Map<String, ClientScopeModel> getClientScopes(boolean defaultScope, boolean filterByProtocol) { TypedQuery<String> query = em.createNamedQuery("clientScopeClientMappingIdsByClient", String.class); query.setParameter("client", getEntity()); query.setParameter("defaultScope", defaultScope); List<String> ids = query.getResultList(); // Defaults to openid-connect String clientProtocol = getProtocol() == null ? OIDCLoginProtocol.LOGIN_PROTOCOL : getProtocol(); Map<String, ClientScopeModel> clientScopes = new HashMap<>(); for (String clientScopeId : ids) { ClientScopeModel clientScope = realm.getClientScopeById(clientScopeId); if (clientScope == null) continue; if (!filterByProtocol || clientScope.getProtocol().equals(clientProtocol)) { clientScopes.put(clientScope.getName(), clientScope); } } return clientScopes; }
@Override public void updateDefaultRoles(String... defaultRoles) { Collection<RoleEntity> entities = entity.getDefaultRoles(); Set<String> already = new HashSet<String>(); List<RoleEntity> remove = new ArrayList<>(); for (RoleEntity rel : entities) { if (!contains(rel.getName(), defaultRoles)) { remove.add(rel); } else { already.add(rel.getName()); } } for (RoleEntity entity : remove) { entities.remove(entity); } em.flush(); for (String roleName : defaultRoles) { if (!already.contains(roleName)) { addDefaultRole(roleName); } } em.flush(); }
@Override public void addDefaultRole(String name) { RoleModel role = getRole(name); if (role == null) { role = addRole(name); } Collection<RoleEntity> entities = entity.getDefaultRoles(); for (RoleEntity entity : entities) { if (entity.getId().equals(role.getId())) { return; } } RoleEntity roleEntity = RoleAdapter.toRoleEntity(role, em); entities.add(roleEntity); }
@Override public void addClientScope(ClientScopeModel clientScope, boolean defaultScope) { if (getClientScopes(defaultScope, false).containsKey(clientScope.getName())) return; ClientScopeClientMappingEntity entity = new ClientScopeClientMappingEntity(); entity.setClientScope(ClientScopeAdapter.toClientScopeEntity(clientScope, em)); entity.setClient(getEntity()); entity.setDefaultScope(defaultScope); em.persist(entity); em.flush(); em.detach(entity); }
@Override public Set<RoleModel> getScopeMappings() { return getEntity().getScopeMapping().stream() .map(RoleEntity::getId) .map(realm::getRoleById) .filter(Objects::nonNull) .collect(Collectors.toSet()); }
@Override public ProtocolMapperModel addProtocolMapper(ProtocolMapperModel model) { if (getProtocolMapperByName(model.getProtocol(), model.getName()) != null) { throw new ModelDuplicateException("Protocol mapper name must be unique per protocol"); } String id = model.getId() != null ? model.getId() : KeycloakModelUtils.generateId(); ProtocolMapperEntity entity = new ProtocolMapperEntity(); entity.setId(id); entity.setName(model.getName()); entity.setProtocol(model.getProtocol()); entity.setProtocolMapper(model.getProtocolMapper()); entity.setClient(this.entity); entity.setConfig(model.getConfig()); em.persist(entity); this.entity.getProtocolMappers().add(entity); return entityToModel(entity); }
@Override public int hashCode() { return getId().hashCode(); }
@Override public ClientModel getClientById(String id, RealmModel realm) { ClientEntity app = em.find(ClientEntity.class, id); // Check if application belongs to this realm if (app == null || !realm.getId().equals(app.getRealm().getId())) return null; ClientAdapter client = new ClientAdapter(realm, em, session, app); return client; }
@Override public void removeDefaultRoles(String... defaultRoles) { Collection<RoleEntity> entities = entity.getDefaultRoles(); List<RoleEntity> remove = new ArrayList<RoleEntity>(); for (RoleEntity rel : entities) { if (contains(rel.getName(), defaultRoles)) { remove.add(rel); } } for (RoleEntity entity : remove) { entities.remove(entity); } em.flush(); }
@Override public void removeClientScope(ClientScopeModel clientScope) { int numRemoved = em.createNamedQuery("deleteClientScopeClientMapping") .setParameter("clientScope", ClientScopeAdapter.toClientScopeEntity(clientScope, em)) .setParameter("client", getEntity()) .executeUpdate(); em.flush(); }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || !(o instanceof ClientModel)) return false; ClientModel that = (ClientModel) o; return that.getId().equals(getId()); }
@Override public ClientModel addClient(RealmModel realm, String id, String clientId) { if (clientId == null) { clientId = id; } ClientEntity entity = new ClientEntity(); entity.setId(id); entity.setClientId(clientId); entity.setEnabled(true); entity.setStandardFlowEnabled(true); RealmEntity realmRef = em.getReference(RealmEntity.class, realm.getId()); entity.setRealm(realmRef); em.persist(entity); em.flush(); final ClientModel resource = new ClientAdapter(realm, em, session, entity); em.flush(); session.getKeycloakSessionFactory().publish(new RealmModel.ClientCreationEvent() { @Override public ClientModel getCreatedClient() { return resource; } }); return resource; }
@Override public void addScopeMapping(RoleModel role) { RoleEntity roleEntity = RoleAdapter.toRoleEntity(role, em); getEntity().getScopeMapping().add(roleEntity); }
@Override public void deleteScopeMapping(RoleModel role) { getEntity().getScopeMapping().remove(RoleAdapter.toRoleEntity(role, em)); }
ClientEntity clientEntity = ((ClientAdapter)client).getEntity();