Software /
code /
prosody-modules
Diff
mod_storage_ldap/ldap/vcard.lib.lua @ 830:f160166612c2
Properly handle avatar/logo BINVALs
Thanks to Petter Ericson for contributing the basis for this patch!
author | Rob Hoelz <rob@hoelz.ro> |
---|---|
date | Tue, 18 Sep 2012 00:29:28 +0200 |
parent | 809:1d51c5e38faa |
line wrap: on
line diff
--- a/mod_storage_ldap/ldap/vcard.lib.lua Tue Sep 18 00:16:12 2012 +0200 +++ b/mod_storage_ldap/ldap/vcard.lib.lua Tue Sep 18 00:29:28 2012 +0200 @@ -15,10 +15,41 @@ local builder_methods = {}; +local base64_encode = require('util.encodings').base64.encode; + function builder_methods:addvalue(key, value) self.vcard:tag(key):text(value):up(); end +function builder_methods:addphotofield(tagname, format_section) + local record = self.record; + local format = self.format; + local vcard = self.vcard; + local config = format[format_section]; + + if not config then + return; + end + + if config.extval then + if record[config.extval] then + local tag = vcard:tag(tagname); + tag:tag('EXTVAL'):text(record[config.extval]):up(); + end + elseif config.type and config.binval then + if record[config.binval] then + local tag = vcard:tag(tagname); + tag:tag('TYPE'):text(config.type):up(); + tag:tag('BINVAL'):text(base64_encode(record[config.binval])):up(); + end + else + module:log('error', 'You have an invalid %s config section', tagname); + return; + end + + vcard:up(); +end + function builder_methods:addregularfield(tagname, format_section) local record = self.record; local format = self.format; @@ -73,7 +104,7 @@ self:addvalue( 'FN', record[format.displayname]); self:addregularfield( 'N', 'name'); self:addvalue( 'NICKNAME', record[format.nickname]); - self:addregularfield( 'PHOTO', 'photo'); + self:addphotofield( 'PHOTO', 'photo'); self:addvalue( 'BDAY', record[format.birthday]); self:addmultisectionedfield('ADR', 'address'); self:addvalue( 'LABEL', nil); -- we don't support LABEL...yet. @@ -85,7 +116,7 @@ self:addregularfield( 'GEO', 'geo'); self:addvalue( 'TITLE', record[format.title]); self:addvalue( 'ROLE', record[format.role]); - self:addregularfield( 'LOGO', 'logo'); + self:addphotofield( 'LOGO', 'logo'); self:addvalue( 'AGENT', nil); -- we don't support AGENT...yet. self:addregularfield( 'ORG', 'org'); self:addvalue( 'CATEGORIES', nil); -- we don't support CATEGORIES...yet.