Mercurial > prosody-modules
comparison 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 |
| parents | 1d51c5e38faa |
| children |
comparison
equal
deleted
inserted
replaced
| 829:9c134ff07d0f | 830:f160166612c2 |
|---|---|
| 13 | 13 |
| 14 local VCARD_NS = 'vcard-temp'; | 14 local VCARD_NS = 'vcard-temp'; |
| 15 | 15 |
| 16 local builder_methods = {}; | 16 local builder_methods = {}; |
| 17 | 17 |
| 18 local base64_encode = require('util.encodings').base64.encode; | |
| 19 | |
| 18 function builder_methods:addvalue(key, value) | 20 function builder_methods:addvalue(key, value) |
| 19 self.vcard:tag(key):text(value):up(); | 21 self.vcard:tag(key):text(value):up(); |
| 22 end | |
| 23 | |
| 24 function builder_methods:addphotofield(tagname, format_section) | |
| 25 local record = self.record; | |
| 26 local format = self.format; | |
| 27 local vcard = self.vcard; | |
| 28 local config = format[format_section]; | |
| 29 | |
| 30 if not config then | |
| 31 return; | |
| 32 end | |
| 33 | |
| 34 if config.extval then | |
| 35 if record[config.extval] then | |
| 36 local tag = vcard:tag(tagname); | |
| 37 tag:tag('EXTVAL'):text(record[config.extval]):up(); | |
| 38 end | |
| 39 elseif config.type and config.binval then | |
| 40 if record[config.binval] then | |
| 41 local tag = vcard:tag(tagname); | |
| 42 tag:tag('TYPE'):text(config.type):up(); | |
| 43 tag:tag('BINVAL'):text(base64_encode(record[config.binval])):up(); | |
| 44 end | |
| 45 else | |
| 46 module:log('error', 'You have an invalid %s config section', tagname); | |
| 47 return; | |
| 48 end | |
| 49 | |
| 50 vcard:up(); | |
| 20 end | 51 end |
| 21 | 52 |
| 22 function builder_methods:addregularfield(tagname, format_section) | 53 function builder_methods:addregularfield(tagname, format_section) |
| 23 local record = self.record; | 54 local record = self.record; |
| 24 local format = self.format; | 55 local format = self.format; |
| 71 | 102 |
| 72 self:addvalue( 'VERSION', '2.0'); | 103 self:addvalue( 'VERSION', '2.0'); |
| 73 self:addvalue( 'FN', record[format.displayname]); | 104 self:addvalue( 'FN', record[format.displayname]); |
| 74 self:addregularfield( 'N', 'name'); | 105 self:addregularfield( 'N', 'name'); |
| 75 self:addvalue( 'NICKNAME', record[format.nickname]); | 106 self:addvalue( 'NICKNAME', record[format.nickname]); |
| 76 self:addregularfield( 'PHOTO', 'photo'); | 107 self:addphotofield( 'PHOTO', 'photo'); |
| 77 self:addvalue( 'BDAY', record[format.birthday]); | 108 self:addvalue( 'BDAY', record[format.birthday]); |
| 78 self:addmultisectionedfield('ADR', 'address'); | 109 self:addmultisectionedfield('ADR', 'address'); |
| 79 self:addvalue( 'LABEL', nil); -- we don't support LABEL...yet. | 110 self:addvalue( 'LABEL', nil); -- we don't support LABEL...yet. |
| 80 self:addmultisectionedfield('TEL', 'telephone'); | 111 self:addmultisectionedfield('TEL', 'telephone'); |
| 81 self:addmultisectionedfield('EMAIL', 'email'); | 112 self:addmultisectionedfield('EMAIL', 'email'); |
| 83 self:addvalue( 'MAILER', record[format.mailer]); | 114 self:addvalue( 'MAILER', record[format.mailer]); |
| 84 self:addvalue( 'TZ', record[format.timezone]); | 115 self:addvalue( 'TZ', record[format.timezone]); |
| 85 self:addregularfield( 'GEO', 'geo'); | 116 self:addregularfield( 'GEO', 'geo'); |
| 86 self:addvalue( 'TITLE', record[format.title]); | 117 self:addvalue( 'TITLE', record[format.title]); |
| 87 self:addvalue( 'ROLE', record[format.role]); | 118 self:addvalue( 'ROLE', record[format.role]); |
| 88 self:addregularfield( 'LOGO', 'logo'); | 119 self:addphotofield( 'LOGO', 'logo'); |
| 89 self:addvalue( 'AGENT', nil); -- we don't support AGENT...yet. | 120 self:addvalue( 'AGENT', nil); -- we don't support AGENT...yet. |
| 90 self:addregularfield( 'ORG', 'org'); | 121 self:addregularfield( 'ORG', 'org'); |
| 91 self:addvalue( 'CATEGORIES', nil); -- we don't support CATEGORIES...yet. | 122 self:addvalue( 'CATEGORIES', nil); -- we don't support CATEGORIES...yet. |
| 92 self:addvalue( 'NOTE', record[format.note]); | 123 self:addvalue( 'NOTE', record[format.note]); |
| 93 self:addvalue( 'PRODID', nil); -- we don't support PRODID...yet. | 124 self:addvalue( 'PRODID', nil); -- we don't support PRODID...yet. |
