@Override public void preprocessFederatedIdentity(KeycloakSession session, RealmModel realm, IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) { String attribute = mapperModel.getConfig().get(CONF_USER_ATTRIBUTE); if (attribute == null || attribute.trim().isEmpty()) { logger.warnf("Attribute is not configured for mapper %s", mapperModel.getName()); return; } attribute = attribute.trim(); String value = getJsonValue(mapperModel, context); if (value != null) { context.setUserAttribute(attribute, value); } }
@Override public IdentityProviderMapperModel getIdentityProviderMapperByName(String alias, String name) { if (updated != null) return updated.getIdentityProviderMapperByName(alias, name); List<IdentityProviderMapperModel> models = cached.getIdentityProviderMappers().getList(alias); if (models == null) return null; for (IdentityProviderMapperModel model : models) { if (model.getName().equals(name)) return model; } return null; }
protected static String getJsonValue(IdentityProviderMapperModel mapperModel, BrokeredIdentityContext context) { String jsonField = mapperModel.getConfig().get(CONF_JSON_FIELD); if (jsonField == null || jsonField.trim().isEmpty()) { logger.warnf("JSON field path is not configured for mapper %s", mapperModel.getName()); return null; } jsonField = jsonField.trim(); if (jsonField.startsWith(JSON_PATH_DELIMITER) || jsonField.endsWith(JSON_PATH_DELIMITER) || jsonField.startsWith("[")) { logger.warnf("JSON field path is invalid %s", jsonField); return null; } JsonNode profileJsonNode = (JsonNode) context.getContextData().get(CONTEXT_JSON_NODE); String value = getJsonValue(profileJsonNode, jsonField); if (value == null) { logger.debugf("User profile JSON value '%s' is not available.", jsonField); } return value; }
@Override public IdentityProviderMapperModel getIdentityProviderMapperByName(String alias, String name) { if (isUpdated()) return updated.getIdentityProviderMapperByName(alias, name); List<IdentityProviderMapperModel> models = cached.getIdentityProviderMappers().getList(alias); if (models == null) return null; for (IdentityProviderMapperModel model : models) { if (model.getName().equals(name)) return model; } return null; }
public static IdentityProviderMapperRepresentation toRepresentation(IdentityProviderMapperModel model) { IdentityProviderMapperRepresentation rep = new IdentityProviderMapperRepresentation(); rep.setId(model.getId()); rep.setIdentityProviderMapper(model.getIdentityProviderMapper()); rep.setIdentityProviderAlias(model.getIdentityProviderAlias()); Map<String, String> config = new HashMap<String, String>(); config.putAll(model.getConfig()); rep.setConfig(config); rep.setName(model.getName()); return rep; }
@Override public IdentityProviderMapperModel addIdentityProviderMapper(IdentityProviderMapperModel model) { if (getIdentityProviderMapperByName(model.getIdentityProviderAlias(), model.getName()) != null) { throw new RuntimeException("identity provider mapper name must be unique per identity provider"); } String id = KeycloakModelUtils.generateId(); IdentityProviderMapperEntity entity = new IdentityProviderMapperEntity(); entity.setId(id); entity.setName(model.getName()); entity.setIdentityProviderAlias(model.getIdentityProviderAlias()); entity.setIdentityProviderMapper(model.getIdentityProviderMapper()); entity.setRealm(this.realm); entity.setConfig(model.getConfig()); em.persist(entity); this.realm.getIdentityProviderMappers().add(entity); return entityToModel(entity); }
@Override public IdentityProviderMapperModel addIdentityProviderMapper(IdentityProviderMapperModel model) { if (getIdentityProviderMapperByName(model.getIdentityProviderAlias(), model.getIdentityProviderMapper()) != null) { throw new RuntimeException("identity provider mapper name must be unique per identity provider"); } String id = KeycloakModelUtils.generateId(); IdentityProviderMapperEntity entity = new IdentityProviderMapperEntity(); entity.setId(id); entity.setName(model.getName()); entity.setIdentityProviderAlias(model.getIdentityProviderAlias()); entity.setIdentityProviderMapper(model.getIdentityProviderMapper()); entity.setConfig(model.getConfig()); getMongoEntity().getIdentityProviderMappers().add(entity); updateMongoEntity(); return entityToModel(entity); }