KEYCLOAK-19480 Introduce MapProtocolMapperEntity
This commit is contained in:
parent
00feef4dbe
commit
576292a662
4 changed files with 102 additions and 25 deletions
|
@ -503,10 +503,35 @@ public abstract class MapClientAdapter extends AbstractClientModel<MapClientEnti
|
|||
|
||||
/*************** Protocol mappers ****************/
|
||||
|
||||
private static MapProtocolMapperEntity fromModel(ProtocolMapperModel model) {
|
||||
MapProtocolMapperEntity res = new MapProtocolMapperEntityImpl();
|
||||
res.setId(model.getId());
|
||||
res.setName(model.getName());
|
||||
res.setProtocolMapper(model.getProtocolMapper());
|
||||
res.setConfig(model.getConfig());
|
||||
return res;
|
||||
}
|
||||
|
||||
private ProtocolMapperModel toModel(MapProtocolMapperEntity entity) {
|
||||
ProtocolMapperModel res = new ProtocolMapperModel();
|
||||
res.setId(entity.getId());
|
||||
res.setName(entity.getName());
|
||||
res.setProtocolMapper(entity.getProtocolMapper());
|
||||
res.setConfig(entity.getConfig());
|
||||
|
||||
res.setProtocol(safeGetProtocol());
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Stream<ProtocolMapperModel> getProtocolMappersStream() {
|
||||
final Map<String, ProtocolMapperModel> protocolMappers = entity.getProtocolMappers();
|
||||
return protocolMappers == null ? Stream.empty() : protocolMappers.values().stream().distinct();
|
||||
final Map<String, MapProtocolMapperEntity> protocolMappers = entity.getProtocolMappers();
|
||||
return protocolMappers == null ? Stream.empty() : protocolMappers.values().stream().distinct()
|
||||
.map(this::toModel);
|
||||
}
|
||||
|
||||
private String safeGetProtocol() {
|
||||
return entity.getProtocol() == null ? "openid-connect" : entity.getProtocol();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -515,20 +540,17 @@ public abstract class MapClientAdapter extends AbstractClientModel<MapClientEnti
|
|||
return null;
|
||||
}
|
||||
|
||||
ProtocolMapperModel pm = new ProtocolMapperModel();
|
||||
pm.setId(KeycloakModelUtils.generateId());
|
||||
pm.setName(model.getName());
|
||||
pm.setProtocol(model.getProtocol());
|
||||
pm.setProtocolMapper(model.getProtocolMapper());
|
||||
|
||||
if (model.getConfig() != null) {
|
||||
pm.setConfig(new HashMap<>(model.getConfig()));
|
||||
} else {
|
||||
MapProtocolMapperEntity pm = fromModel(model);
|
||||
if (pm.getId() == null) {
|
||||
String id = KeycloakModelUtils.generateId();
|
||||
pm.setId(id);
|
||||
}
|
||||
if (model.getConfig() == null) {
|
||||
pm.setConfig(new HashMap<>());
|
||||
}
|
||||
|
||||
entity.setProtocolMapper(pm.getId(), pm);
|
||||
return pm;
|
||||
return toModel(pm);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -543,20 +565,25 @@ public abstract class MapClientAdapter extends AbstractClientModel<MapClientEnti
|
|||
public void updateProtocolMapper(ProtocolMapperModel mapping) {
|
||||
final String id = mapping == null ? null : mapping.getId();
|
||||
if (id != null) {
|
||||
entity.setProtocolMapper(id, mapping);
|
||||
entity.setProtocolMapper(id, fromModel(mapping));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProtocolMapperModel getProtocolMapperById(String id) {
|
||||
return entity.getProtocolMapper(id);
|
||||
MapProtocolMapperEntity protocolMapper = entity.getProtocolMapper(id);
|
||||
return protocolMapper == null ? null : toModel(protocolMapper);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ProtocolMapperModel getProtocolMapperByName(String protocol, String name) {
|
||||
final Map<String, ProtocolMapperModel> protocolMappers = entity.getProtocolMappers();
|
||||
final Map<String, MapProtocolMapperEntity> protocolMappers = entity.getProtocolMappers();
|
||||
if (! Objects.equals(protocol, safeGetProtocol())) {
|
||||
return null;
|
||||
}
|
||||
return protocolMappers == null ? null : protocolMappers.values().stream()
|
||||
.filter(pm -> Objects.equals(pm.getProtocol(), protocol) && Objects.equals(pm.getName(), name))
|
||||
.filter(pm -> Objects.equals(pm.getName(), name))
|
||||
.map(this::toModel)
|
||||
.findAny()
|
||||
.orElse(null);
|
||||
}
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
*/
|
||||
package org.keycloak.models.map.client;
|
||||
|
||||
import org.keycloak.models.ProtocolMapperModel;
|
||||
import org.keycloak.models.map.common.AbstractEntity;
|
||||
import org.keycloak.models.map.common.UpdatableEntity;
|
||||
import java.util.Collection;
|
||||
|
@ -35,7 +34,7 @@ import org.keycloak.models.map.annotations.GenerateEntityImplementations;
|
|||
@GenerateEntityImplementations(inherits="org.keycloak.models.map.client.MapClientEntity.AbstractClientEntity")
|
||||
public interface MapClientEntity extends AbstractEntity, UpdatableEntity {
|
||||
|
||||
static abstract class AbstractClientEntity implements MapClientEntity {
|
||||
public abstract class AbstractClientEntity implements MapClientEntity {
|
||||
/**
|
||||
* Flag signalizing that any of the setters has been meaningfully used.
|
||||
*/
|
||||
|
@ -79,9 +78,9 @@ public interface MapClientEntity extends AbstractEntity, UpdatableEntity {
|
|||
void setClientScope(String id, Boolean defaultScope);
|
||||
void removeClientScope(String id);
|
||||
|
||||
ProtocolMapperModel getProtocolMapper(String id);
|
||||
Map<String, ProtocolMapperModel> getProtocolMappers();
|
||||
void setProtocolMapper(String id, ProtocolMapperModel mapping);
|
||||
MapProtocolMapperEntity getProtocolMapper(String id);
|
||||
Map<String, MapProtocolMapperEntity> getProtocolMappers();
|
||||
void setProtocolMapper(String id, MapProtocolMapperEntity mapping);
|
||||
void removeProtocolMapper(String id);
|
||||
|
||||
void addRedirectUri(String redirectUri);
|
||||
|
|
|
@ -16,7 +16,6 @@
|
|||
*/
|
||||
package org.keycloak.models.map.client;
|
||||
|
||||
import org.keycloak.models.ProtocolMapperModel;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
@ -164,12 +163,12 @@ public class MapClientEntityLazyDelegate implements MapClientEntity {
|
|||
}
|
||||
|
||||
@Override
|
||||
public ProtocolMapperModel getProtocolMapper(String id) {
|
||||
public MapProtocolMapperEntity getProtocolMapper(String id) {
|
||||
return getReadDelegate().getProtocolMapper(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String,ProtocolMapperModel> getProtocolMappers() {
|
||||
public Map<String,MapProtocolMapperEntity> getProtocolMappers() {
|
||||
return getReadDelegate().getProtocolMappers();
|
||||
}
|
||||
|
||||
|
@ -459,7 +458,7 @@ public class MapClientEntityLazyDelegate implements MapClientEntity {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void setProtocolMapper(String id, ProtocolMapperModel mapping) {
|
||||
public void setProtocolMapper(String id, MapProtocolMapperEntity mapping) {
|
||||
getWriteDelegate().setProtocolMapper(id, mapping);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* Copyright 2021 Red Hat, Inc. and/or its affiliates
|
||||
* and other contributors as indicated by the @author tags.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.keycloak.models.map.client;
|
||||
|
||||
import org.keycloak.models.map.annotations.GenerateEntityImplementations;
|
||||
import org.keycloak.models.map.common.UpdatableEntity;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author hmlnarik
|
||||
*/
|
||||
@GenerateEntityImplementations(
|
||||
inherits = "org.keycloak.models.map.client.MapProtocolMapperEntity.AbstractProtocolMapperEntity"
|
||||
)
|
||||
public interface MapProtocolMapperEntity extends UpdatableEntity {
|
||||
|
||||
public abstract class AbstractProtocolMapperEntity implements MapProtocolMapperEntity {
|
||||
protected boolean updated;
|
||||
|
||||
@Override
|
||||
public boolean isUpdated() {
|
||||
return this.updated;
|
||||
}
|
||||
}
|
||||
|
||||
String getId();
|
||||
void setId(String id);
|
||||
|
||||
String getName();
|
||||
void setName(String name);
|
||||
|
||||
String getProtocolMapper();
|
||||
void setProtocolMapper(String protocolMapper);
|
||||
|
||||
Map<String, String> getConfig();
|
||||
void setConfig(Map<String, String> config);
|
||||
}
|
Loading…
Reference in a new issue