Class LdapVCardProvider
- java.lang.Object
-
- org.jivesoftware.openfire.ldap.LdapVCardProvider
-
- All Implemented Interfaces:
VCardProvider,PropertyEventListener
public class LdapVCardProvider extends Object implements VCardProvider, PropertyEventListener
Read-only LDAP provider for vCards.Configuration consists of adding a provider:provider.vcard.className = org.jivesoftware.openfire.ldap.LdapVCardProviderand an xml vcard-mapping in the system properties.
The vcard attributes can be configured by adding an
attrs="attr1,attr2"attribute to the vcard elements.Arbitrary text can be used for the element values as well as
MessageFormatstyle placeholders for the ldap attributes. For example, if you wanted to map the LDAP attributedisplayNameto the vcard elementFN, the xml nippet would be:<FN attrs="displayName">{0}</FN>The vCard XML must be escaped in CDATA and must also be well formed. It is the exact XML this provider will send to a client after after stripping
attrattributes and populating the placeholders with the data retrieved from LDAP. This system should be flexible enough to handle any client's vCard format. An example mapping follows.
ldap.vcard-mapping = <![CDATA[ <vCard xmlns='vcard-temp'> <FN attrs="displayName">{0}</FN> <NICKNAME attrs="uid">{0}</NICKNAME> <BDAY attrs="dob">{0}</BDAY> <ADR> <HOME/> <EXTADR>Ste 500</EXTADR> <STREET>317 SW Alder St</STREET> <LOCALITY>Portland</LOCALITY> <REGION>Oregon</REGION> <PCODE>97204</PCODE> <CTRY>USA</CTRY> </ADR> <TEL> <HOME/> <VOICE/> <NUMBER attrs="telephoneNumber">{0}</NUMBER> </TEL> <EMAIL> <INTERNET/> <USERID attrs="mail">{0}</USERID> </EMAIL> <TITLE attrs="title">{0}</TITLE> <ROLE attrs="">{0}</ROLE> <ORG> <ORGNAME attrs="o">{0}</ORGNAME> <ORGUNIT attrs="">{0}</ORGUNIT> </ORG> <URL attrs="labeledURI">{0}</URL> <DESC attrs="uidNumber,homeDirectory,loginShell"> uid: {0} home: {1} shell: {2} </DESC> </vCard> ]]>An easy way to get the vcard format your client needs, assuming you've been using the database store, is to do a
SELECT value FROM ofVCard WHERE username='some_user'in your favorite sql querier and paste the result into thevcard-mapping(don't forget the CDATA).- Author:
- rkelly
-
-
Field Summary
Fields Modifier and Type Field Description static PatternPATTERNA regular expression that matches values enclosed in { and }, applying a group to the value that's surrounded.static SystemProperty<Boolean>STORE_AVATAR_IN_DB
-
Constructor Summary
Constructors Constructor Description LdapVCardProvider()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description org.dom4j.ElementcreateVCard(String username, org.dom4j.Element vCardElement)Handles when a user creates a new vcard.voiddeleteVCard(String username)Handles when a user deletes their vcard.booleanisReadOnly()Returns true if this VCardProvider is read-only.org.dom4j.ElementloadVCard(String username)Loads the avatar from LDAP, based off the vcard template.voidpropertyDeleted(String property, Map params)A property was deleted.voidpropertySet(String property, Map params)A property was set.org.dom4j.ElementupdateVCard(String username, org.dom4j.Element vCardElement)Handles when a user updates their vcard.voidxmlPropertyDeleted(String property, Map params)An XML property was deleted.voidxmlPropertySet(String property, Map params)An XML property was set.
-
-
-
Field Detail
-
STORE_AVATAR_IN_DB
public static final SystemProperty<Boolean> STORE_AVATAR_IN_DB
-
PATTERN
public static final Pattern PATTERN
A regular expression that matches values enclosed in { and }, applying a group to the value that's surrounded.
-
-
Method Detail
-
loadVCard
public org.dom4j.Element loadVCard(String username)
Loads the avatar from LDAP, based off the vcard template. If enabled, will replace a blank PHOTO element with one from a DB stored vcard.- Specified by:
loadVCardin interfaceVCardProvider- Parameters:
username- User we are loading the vcard for.- Returns:
- The loaded vcard element, or null if none found.
-
createVCard
public org.dom4j.Element createVCard(String username, org.dom4j.Element vCardElement) throws UnsupportedOperationException, AlreadyExistsException
Handles when a user creates a new vcard.- Specified by:
createVCardin interfaceVCardProvider- Parameters:
username- User that created a new vcard.vCardElement- vCard element containing the new vcard.- Returns:
- vCard as it is after the provider has a chance to adjust it.
- Throws:
UnsupportedOperationException- If an invalid field is changed or we are in readonly mode.AlreadyExistsException- if the user already has a vCard.
-
updateVCard
public org.dom4j.Element updateVCard(String username, org.dom4j.Element vCardElement) throws UnsupportedOperationException
Handles when a user updates their vcard.- Specified by:
updateVCardin interfaceVCardProvider- Parameters:
username- User that updated their vcard.vCardElement- vCard element containing the new vcard.- Returns:
- vCard as it is after the provider has a chance to adjust it.
- Throws:
UnsupportedOperationException- If an invalid field is changed or we are in readonly mode.
-
deleteVCard
public void deleteVCard(String username) throws UnsupportedOperationException
Handles when a user deletes their vcard.- Specified by:
deleteVCardin interfaceVCardProvider- Parameters:
username- User that deketed their vcard.- Throws:
UnsupportedOperationException- If an invalid field is changed or we are in readonly mode.
-
isReadOnly
public boolean isReadOnly()
Description copied from interface:VCardProviderReturns true if this VCardProvider is read-only. When read-only, vcards can not be created, deleted, or modified.- Specified by:
isReadOnlyin interfaceVCardProvider- Returns:
- true if the vcard provider is read-only.
-
propertySet
public void propertySet(String property, Map params)
Description copied from interface:PropertyEventListenerA property was set. The parameter mapparamswill contain the the value of the property under the keyvalue.- Specified by:
propertySetin interfacePropertyEventListener- Parameters:
property- the name of the property.params- event parameters.
-
propertyDeleted
public void propertyDeleted(String property, Map params)
Description copied from interface:PropertyEventListenerA property was deleted.- Specified by:
propertyDeletedin interfacePropertyEventListener- Parameters:
property- the name of the property deleted.params- event parameters.
-
xmlPropertySet
public void xmlPropertySet(String property, Map params)
Description copied from interface:PropertyEventListenerAn XML property was set. The parameter mapparamswill contain the the value of the property under the keyvalue.- Specified by:
xmlPropertySetin interfacePropertyEventListener- Parameters:
property- the name of the property.params- event parameters.
-
xmlPropertyDeleted
public void xmlPropertyDeleted(String property, Map params)
Description copied from interface:PropertyEventListenerAn XML property was deleted.- Specified by:
xmlPropertyDeletedin interfacePropertyEventListener- Parameters:
property- the name of the property.params- event parameters.
-
-