192 delegate =
new TxAwareLDAPUserModelDelegate(delegate,
ldapProvider, ldapUser) {
195 public void setSingleAttribute(String name, String value) {
196 if (setLDAPAttribute(name, value)) {
197 super.setSingleAttribute(name, value);
202 public void setAttribute(String name, List<String> values) {
203 if (setLDAPAttribute(name, values)) {
204 super.setAttribute(name, values);
209 public void removeAttribute(String name) {
210 if ( setLDAPAttribute(name, null)) {
211 super.removeAttribute(name);
216 public void setEmail(String email) {
219 setLDAPAttribute(UserModel.EMAIL, email);
220 super.setEmail(email);
224 public void setLastName(String lastName) {
225 setLDAPAttribute(UserModel.LAST_NAME, lastName);
226 super.setLastName(lastName);
230 public void setFirstName(String firstName) {
231 setLDAPAttribute(UserModel.FIRST_NAME, firstName);
232 super.setFirstName(firstName);
235 protected boolean setLDAPAttribute(String modelAttrName, Object value) {
236 if (modelAttrName.equalsIgnoreCase(userModelAttrName)) {
238 UserAttributeLDAPStorageMapper.logger.tracef(
"Pushing user attribute to LDAP. username: %s, Model attribute name: %s, LDAP attribute name: %s, Attribute value: %s", getUsername(), modelAttrName, ldapAttrName, value);
241 ensureTransactionStarted();
244 if (isMandatoryInLdap) {
245 ldapUser.setSingleAttribute(ldapAttrName, LDAPConstants.EMPTY_ATTRIBUTE_VALUE);
247 ldapUser.setAttribute(ldapAttrName,
new LinkedHashSet<String>());
249 }
else if (value instanceof String) {
250 ldapUser.setSingleAttribute(ldapAttrName, (String) value);
252 List<String> asList = (List<String>) value;
253 if (asList.isEmpty() && isMandatoryInLdap) {
254 ldapUser.setSingleAttribute(ldapAttrName, LDAPConstants.EMPTY_ATTRIBUTE_VALUE);
256 ldapUser.setAttribute(ldapAttrName,
new LinkedHashSet<>(asList));
260 if (isBinaryAttribute) {
261 UserAttributeLDAPStorageMapper.logger.debugf(
"Skip writing model attribute '%s' to DB for user '%s' as it is mapped to binary LDAP attribute.", userModelAttrName, getUsername());
273 }
else if (isBinaryAttribute) {
275 delegate =
new UserModelDelegate(delegate) {
278 public void setSingleAttribute(String name, String value) {
279 if (name.equalsIgnoreCase(userModelAttrName)) {
282 super.setSingleAttribute(name, value);
287 public void setAttribute(String name, List<String> values) {
288 if (name.equalsIgnoreCase(userModelAttrName)) {
291 super.setAttribute(name, values);
296 public void removeAttribute(String name) {
297 if (name.equalsIgnoreCase(userModelAttrName)) {
300 super.removeAttribute(name);
304 private void logSkipDBWrite() {
305 logger.debugf(
"Skip writing model attribute '%s' to DB for user '%s' as it is mapped to binary LDAP attribute", userModelAttrName, getUsername());
313 if (isAlwaysReadValueFromLDAP) {
315 delegate =
new UserModelDelegate(delegate) {
318 public String getFirstAttribute(String name) {
319 if (name.equalsIgnoreCase(userModelAttrName)) {
320 return ldapUser.getAttributeAsString(ldapAttrName);
322 return super.getFirstAttribute(name);
327 public List<String> getAttribute(String name) {
328 if (name.equalsIgnoreCase(userModelAttrName)) {
329 Collection<String> ldapAttrValue = ldapUser.getAttributeAsSet(ldapAttrName);
330 if (ldapAttrValue == null) {
331 return Collections.emptyList();
333 return new ArrayList<>(ldapAttrValue);
336 return super.getAttribute(name);
341 public Map<String, List<String>> getAttributes() {
342 Map<String, List<String>> attrs =
new HashMap<>(super.getAttributes());
349 Set<String> allLdapAttrValues = ldapUser.getAttributeAsSet(ldapAttrName);
350 if (allLdapAttrValues != null) {
351 attrs.put(userModelAttrName,
new ArrayList<>(allLdapAttrValues));
357 public String getEmail() {
358 if (UserModel.EMAIL.equalsIgnoreCase(userModelAttrName)) {
359 return ldapUser.getAttributeAsString(ldapAttrName);
361 return super.getEmail();
366 public String getLastName() {
367 if (UserModel.LAST_NAME.equalsIgnoreCase(userModelAttrName)) {
368 return ldapUser.getAttributeAsString(ldapAttrName);
370 return super.getLastName();
375 public String getFirstName() {
376 if (UserModel.FIRST_NAME.equalsIgnoreCase(userModelAttrName)) {
377 return ldapUser.getAttributeAsString(ldapAttrName);
379 return super.getFirstName();
static boolean parseBooleanParameter(ComponentModel mapperModel, String paramName)
Definition: AbstractLDAPStorageMapper.java:73
UserAttributeLDAPStorageMapper(ComponentModel mapperModel, LDAPStorageProvider ldapProvider)
Definition: UserAttributeLDAPStorageMapper.java:85
final ComponentModel mapperModel
Definition: AbstractLDAPStorageMapper.java:43
static final String USER_MODEL_ATTRIBUTE
Definition: UserAttributeLDAPStorageMapper.java:78
V getFirst(K key)
Definition: MultivaluedHashMap.java:86
static final String IS_BINARY_ATTRIBUTE
Definition: UserAttributeLDAPStorageMapper.java:83
void checkDuplicateEmail(String userModelAttrName, String email, RealmModel realm, KeycloakSession session, UserModel user)
Definition: UserAttributeLDAPStorageMapper.java:166
KeycloakSession getSession()
Definition: LDAPStorageProvider.java:122
static final Logger logger
Definition: UserAttributeLDAPStorageMapper.java:53
static final String ALWAYS_READ_VALUE_FROM_LDAP
Definition: UserAttributeLDAPStorageMapper.java:81
MultivaluedHashMap< String, String > getConfig()
Definition: ComponentModel.java:71
EditMode getEditMode()
Definition: LDAPStorageProvider.java:130
static final Map< String, Property< Object > > userModelProperties
Definition: UserAttributeLDAPStorageMapper.java:55
static final String IS_MANDATORY_IN_LDAP
Definition: UserAttributeLDAPStorageMapper.java:82
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44
WRITABLE
Definition: UserStorageProvider.java:80
static final String LDAP_ATTRIBUTE
Definition: UserAttributeLDAPStorageMapper.java:79
boolean isReadOnly()
Definition: UserAttributeLDAPStorageMapper.java:406