diff --git a/OpenLdapSync/resources/web/OpenLdapSync/panel/LdapSettingsPanel.js b/OpenLdapSync/resources/web/OpenLdapSync/panel/LdapSettingsPanel.js index dce782776..b3ca14d26 100644 --- a/OpenLdapSync/resources/web/OpenLdapSync/panel/LdapSettingsPanel.js +++ b/OpenLdapSync/resources/web/OpenLdapSync/panel/LdapSettingsPanel.js @@ -644,6 +644,10 @@ Ext4.define('OpenLdapSync.panel.LdapSettingsPanel', { helpPopup: 'This should hold the value that uniquely identifies this record on the LDAP server. Usually this would be the login, but it could also be the distinguishing name or objectId', itemId: 'uidFieldMapping', name: 'uidFieldMapping' + },{ + displayName: 'IM', + itemId: 'imFieldMapping', + name: 'imFieldMapping' }]; diff --git a/OpenLdapSync/src/org/labkey/openldapsync/OpenLdapSyncController.java b/OpenLdapSync/src/org/labkey/openldapsync/OpenLdapSyncController.java index 1c9f066e6..a4ba13b03 100644 --- a/OpenLdapSync/src/org/labkey/openldapsync/OpenLdapSyncController.java +++ b/OpenLdapSync/src/org/labkey/openldapsync/OpenLdapSyncController.java @@ -165,6 +165,7 @@ public static class LdapForm { private String _uidFieldMapping; private String _firstNameFieldMapping; private String _lastNameFieldMapping; + private String _imFieldMapping; private String _userDeleteBehavior; private String _groupDeleteBehavior; @@ -399,6 +400,16 @@ public void setLastNameFieldMapping(String lastNameFieldMapping) _lastNameFieldMapping = lastNameFieldMapping; } + public String getImFieldMapping() + { + return _imFieldMapping; + } + + public void setImFieldMapping(String imFieldMapping) + { + _imFieldMapping = imFieldMapping; + } + public String getUserInfoChangedBehavior() { return _userInfoChangedBehavior; @@ -629,6 +640,9 @@ public ApiResponse execute(LdapForm form, BindException errors) if (form.getLastNameFieldMapping() != null) props.put(LdapSettings.LASTNAME_FIELD_PROP, form.getLastNameFieldMapping()); + if (form.getImFieldMapping() != null) + props.put(LdapSettings.IM_FIELD_PROP, form.getImFieldMapping()); + if (form.getEmailFieldMapping() != null) props.put(LdapSettings.EMAIL_FIELD_PROP, form.getEmailFieldMapping()); diff --git a/OpenLdapSync/src/org/labkey/openldapsync/ldap/LdapEntry.java b/OpenLdapSync/src/org/labkey/openldapsync/ldap/LdapEntry.java index 986282896..12a0c2a0d 100644 --- a/OpenLdapSync/src/org/labkey/openldapsync/ldap/LdapEntry.java +++ b/OpenLdapSync/src/org/labkey/openldapsync/ldap/LdapEntry.java @@ -113,6 +113,20 @@ public String getUID() return getAttribute(_settings.getUIDMapping()); } + public String getIM() throws LdapInvalidAttributeValueException + { + try + { + Attribute a = _entry.get(_settings.getIMMapping()); + return a == null ? null : a.getString(); + } + catch (LdapInvalidAttributeValueException e) + { + //not sure what's best here + } + return null; + } + protected String getAttribute(String alias) { try diff --git a/OpenLdapSync/src/org/labkey/openldapsync/ldap/LdapSettings.java b/OpenLdapSync/src/org/labkey/openldapsync/ldap/LdapSettings.java index 73cbd0f1f..535fc59d9 100644 --- a/OpenLdapSync/src/org/labkey/openldapsync/ldap/LdapSettings.java +++ b/OpenLdapSync/src/org/labkey/openldapsync/ldap/LdapSettings.java @@ -38,6 +38,8 @@ public class LdapSettings public static final String PHONE_FIELD_PROP = "phoneNumberFieldMapping"; public static final String FIRSTNAME_FIELD_PROP = "firstNameFieldMapping"; public static final String LASTNAME_FIELD_PROP = "lastNameFieldMapping"; + public static final String IM_FIELD_PROP = "imFieldMapping"; + public static final String LABKEY_EMAIL_PROP = "labkeyAdminEmail"; @@ -70,6 +72,7 @@ public class LdapSettings public static final String DEFAULT_LAST_NAME_VAL = "sn"; public static final String DEFAULT_FIRST_NAME_VAL = "givenName"; public static final String DEFAULT_PHONE_VAL = "telephoneNumber"; + public static final String DEFAULT_IM_VAL = "im"; public static final String DEFAULT_UID_VAL = "userPrincipalName"; public static final String DEFAULT_USERCLASS_VAL = "user"; public static final String DEFAULT_GROUPCLASS_VAL = "group"; @@ -183,6 +186,9 @@ else if (key.equals(USE_SSL_PROP) && StringUtils.trimToNull(map.get(key)) != nul if (isMissingOrEmpty(ret, FIRSTNAME_FIELD_PROP)) ret.put(FIRSTNAME_FIELD_PROP, DEFAULT_FIRST_NAME_VAL); + if (!ret.containsKey(IM_FIELD_PROP)) + ret.put(IM_FIELD_PROP, DEFAULT_IM_VAL); + if (isMissingOrEmpty(ret, PHONE_FIELD_PROP)) ret.put(PHONE_FIELD_PROP, DEFAULT_PHONE_VAL); @@ -417,6 +423,11 @@ public String getPhoneMapping() return (String)_settings.get(PHONE_FIELD_PROP); } + public String getIMMapping() + { + return (String)_settings.get(IM_FIELD_PROP); + } + public String getUIDMapping() { return (String)_settings.get(UID_FIELD_PROP); diff --git a/OpenLdapSync/src/org/labkey/openldapsync/ldap/LdapSyncRunner.java b/OpenLdapSync/src/org/labkey/openldapsync/ldap/LdapSyncRunner.java index e20d27c00..f1728323b 100644 --- a/OpenLdapSync/src/org/labkey/openldapsync/ldap/LdapSyncRunner.java +++ b/OpenLdapSync/src/org/labkey/openldapsync/ldap/LdapSyncRunner.java @@ -612,6 +612,10 @@ private User createUser(LdapEntry ldapEntry) throws LdapException if (phone != null) newUser.setPhone(phone); + String im = ldapEntry.getIM(); + if (im != null) + newUser.setIM(im); + UserManager.updateUser(_settings.getLabKeyAdminUser(), newUser); return newUser; @@ -664,6 +668,13 @@ private void syncUserAttributes(LdapEntry ldapEntry, User existing) throws LdapE existing.setEmail(email); } + String im = ldapEntry.getIM(); + if (im != null && !im.equals(existing.getIM())) + { + changed = true; + existing.setIM(im); + } + if (changed) { log("Updating user settings: " + existing.getEmail());