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 final String IS_BINARY_ATTRIBUTE
Definition: UserAttributeLDAPStorageMapper.java:83
 
boolean isReadOnly()
Definition: UserAttributeLDAPStorageMapper.java:406
 
KeycloakSession getSession()
Definition: LDAPStorageProvider.java:122
 
static boolean parseBooleanParameter(ComponentModel mapperModel, String paramName)
Definition: AbstractLDAPStorageMapper.java:73
 
void checkDuplicateEmail(String userModelAttrName, String email, RealmModel realm, KeycloakSession session, UserModel user)
Definition: UserAttributeLDAPStorageMapper.java:166
 
EditMode getEditMode()
Definition: LDAPStorageProvider.java:130
 
final ComponentModel mapperModel
Definition: AbstractLDAPStorageMapper.java:43
 
static final String IS_MANDATORY_IN_LDAP
Definition: UserAttributeLDAPStorageMapper.java:82
 
static final String LDAP_ATTRIBUTE
Definition: UserAttributeLDAPStorageMapper.java:79
 
static final Logger logger
Definition: UserAttributeLDAPStorageMapper.java:53
 
static final String USER_MODEL_ATTRIBUTE
Definition: UserAttributeLDAPStorageMapper.java:78
 
static final String ALWAYS_READ_VALUE_FROM_LDAP
Definition: UserAttributeLDAPStorageMapper.java:81
 
static final Map< String, Property< Object > > userModelProperties
Definition: UserAttributeLDAPStorageMapper.java:55
 
UserAttributeLDAPStorageMapper(ComponentModel mapperModel, LDAPStorageProvider ldapProvider)
Definition: UserAttributeLDAPStorageMapper.java:85
 
final LDAPStorageProvider ldapProvider
Definition: AbstractLDAPStorageMapper.java:44