simple-xmpp / node-simple-xmpp

Simple High Level NodeJS XMPP Client
300 stars 90 forks source link

vcard as json #31

Closed nilclass closed 11 years ago

nilclass commented 11 years ago

refs #27

silverbucket commented 11 years ago

looks great, thanks @nilclass !

jeedee commented 11 years ago

Just to let you know this is not working when using facebook XMPP. 'BINVAL' is somehow breaking this feature;

Relevant stack trace; TypeError: Cannot call method 'toLowerCase' of undefined at /Users/jeedee/Dropbox/Projects/Bulle/dev/node_modules/simple-xmpp/lib/simple-xmpp.js:139:30 at Array.reduce (native) at parseVCard (/Users/jeedee/Dropbox/Projects/Bulle/dev/node_modules/simple-xmpp/lib/simple-xmpp.js:138:31)

nilclass commented 11 years ago

@jeedee can you provide an example vcard that breaks?

jeedee commented 11 years ago

Yea sorry, was going to!

Basically, the BINVAL gets splitted in an array of 30+ indexes which confuses the reduce;

<vCard xmlns="vcard-temp"><FN>John Doe</FN><PHOTO><TYPE>image/jpeg</TYPE><BINVAL>/9j/4AAQSkZJRgABAgAAAQABAAD//gAEKgD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODw wQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMo GhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wg ARCAAgACADACIAAREBAhEB/8QAGQABAAIDAAAAAAAAAAAAAAAABgIFAAQH/8QAFwEAAwEAAAAA AAAAAAAAAAAAAAIDAf/EABcBAAMBAAAAAAAAAAAAAAAAAAACAwH/2gAMAwAAARECEQAAAXU4kQ v9/nSPGRh2ZOsjdtT4rf/EAB8QAAIBBAIDAAAAAAAAAAAAAAMEAQACBREGFBASMf/aAAgBAAAB BQK3fjurRfFRXI27gKpJClfEF9aj5yRaS2BbLbWJEe7Jb1Wagk43tPoDE88wb//EABgRAAMBAQ AAAAAAAAAAAAAAAAABAhED/9oACAECEQE/ARy0VWD6vD//xAAaEQACAgMAAAAAAAAAAAAAAAAA AQIhAxES/9oACAEBEQE/ATZCHVsWOz//xAAkEAABAwMEAQUAAAAAAAAAAAACAQMRABAhBBITUU EiMkKBkf/aAAgBAAAGPwLKW2cwzfYGFcxNevTmbncx+U5pXDl1ko+rIbaSSdVp97TqqiYjzT7z gbUUszZSbJU7jqgQiAh+MwVIfP7VRI8V/8QAHxABAAIDAAIDAQAAAAAAAAAAAQARITFBUXEQYc Hh/9oACAEAAAE/IUlKK1nZFjalbVD2V42TQhFlWDddhEogu1f4lN5wX3n4KEGyZPqGUBjk2Jj+ XmfU0i3wijAR81swYwmQoPcYrDAAydVP/9oADAMAAAERAhEAABAwFif/xAAYEQEBAQEBAAAAAA AAAAAAAAABABFBUf/aAAgBAhEBPxAhNZ8h2djy/8QAGBEBAQEBAQAAAAAAAAAAAAAAAQAhEUH/ 2gAIAQERAT8QYK5B14R4b//EAB8QAQACAgIDAQEAAAAAAAAAAAEAESExQVFhgaFxkf/aAAgBAA ABPxClxVOji34zZ6gVSa+Q0kxsAN26lhZJqsjD/bMzJgigPgcHuCmx+zlVfaUCBGSmXfLW+o9Q zd1dRsJee9OAcAK+WEFha15nTq7ly9xardHo3qFzmqng7/YgDbVKUy6yTMP/AG9RtzpZRooUw9 JSPfE//9k=</BINVAL></PHOTO></vCard>

Until this is fixed, if anyone gets the issue, you can add a want-extval child to vcard-temp in order to get an image URL instead of binary data, like so var stanza = new xmpp.Element('iq', { to: buddy, type: 'get', id: id }).c('vCard', { xmlns: 'vcard-temp'}).c('want-extval xmlns=\'http://www.facebook.com/xmpp/vcard/photo\'').root();

This is Facebook XMPP specific, obviously :)

nilclass commented 11 years ago

Thanks. I believe 48a971ed68aa8464dfc77eeba1a4f84123bdca1b solves the problem. At least it parses your example correctly.