Mercurial > prosody-modules
comparison mod_profile/mod_profile.lua @ 3190:76a2aca48b4f
mod_profile: Refactor wrapping of payloads in <item>
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Tue, 24 Jul 2018 16:27:59 +0200 |
| parents | 7c450c27d4ba |
| children | a1c92d62b861 |
comparison
equal
deleted
inserted
replaced
| 3189:57332ea0c1c7 | 3190:76a2aca48b4f |
|---|---|
| 48 end | 48 end |
| 49 end | 49 end |
| 50 return "application/octet-stream"; | 50 return "application/octet-stream"; |
| 51 end | 51 end |
| 52 | 52 |
| 53 local function item_container(id, payload) | |
| 54 return id, st.stanza("item", { id = "current" }) | |
| 55 :add_child(payload); | |
| 56 end | |
| 57 | |
| 53 local function update_pep(username, data, pep) | 58 local function update_pep(username, data, pep) |
| 54 pep = pep or pep_plus.get_pep_service(username); | 59 pep = pep or pep_plus.get_pep_service(username); |
| 55 local photo, p = get_item(data, "PHOTO"); | 60 local photo, p = get_item(data, "PHOTO"); |
| 56 if vcard.to_vcard4 then | 61 if vcard.to_vcard4 then |
| 57 if p then t_remove(data, p); end | 62 if p then t_remove(data, p); end |
| 58 pep:purge("urn:xmpp:vcard4", true); | 63 pep:purge("urn:xmpp:vcard4", true) |
| 59 pep:publish("urn:xmpp:vcard4", true, "current", st.stanza("item", {id="current"}) | 64 pep:publish("urn:xmpp:vcard4", true, item_container("current", vcard.to_vcard4(data))); |
| 60 :add_child(vcard.to_vcard4(data))); | |
| 61 if p then t_insert(data, p, photo); end | 65 if p then t_insert(data, p, photo); end |
| 62 end | 66 end |
| 63 | 67 |
| 64 local nickname = get_item(data, "NICKNAME"); | 68 local nickname = get_item(data, "NICKNAME"); |
| 65 if nickname and nickname[1] then | 69 if nickname and nickname[1] then |
| 66 pep:purge("http://jabber.org/protocol/nick", true); | 70 pep:purge("http://jabber.org/protocol/nick", true); |
| 67 pep:publish("http://jabber.org/protocol/nick", true, "current", st.stanza("item", {id="current"}) | 71 pep:publish("http://jabber.org/protocol/nick", true, item_container("current", |
| 68 :tag("nick", { xmlns="http://jabber.org/protocol/nick" }):text(nickname[1])); | 72 st.stanza("nick", { xmlns="http://jabber.org/protocol/nick" }):text(nickname[1]))); |
| 69 end | 73 end |
| 70 | 74 |
| 71 if photo and photo[1] then | 75 if photo and photo[1] then |
| 72 local photo_raw = base64.decode(photo[1]); | 76 local photo_raw = base64.decode(photo[1]); |
| 73 local photo_hash = sha1(photo_raw, true); | 77 local photo_hash = sha1(photo_raw, true); |
| 74 | 78 |
| 75 pep:purge("urn:xmpp:avatar:metadata", true); | 79 pep:purge("urn:xmpp:avatar:metadata", true); |
| 76 pep:purge("urn:xmpp:avatar:data", true); | 80 pep:purge("urn:xmpp:avatar:data", true); |
| 77 pep:publish("urn:xmpp:avatar:metadata", true, photo_hash, st.stanza("item", {id=photo_hash}) | 81 pep:publish("urn:xmpp:avatar:metadata", true, item_container(photo_hash, |
| 78 :tag("metadata", { xmlns="urn:xmpp:avatar:metadata" }) | 82 st.stanza("metadata", { xmlns="urn:xmpp:avatar:metadata" }) |
| 79 :tag("info", { | 83 :tag("info", { |
| 80 bytes = tostring(#photo_raw), | 84 bytes = tostring(#photo_raw), |
| 81 id = photo_hash, | 85 id = photo_hash, |
| 82 type = identify(photo_raw), | 86 type = identify(photo_raw), |
| 83 })); | 87 }))); |
| 84 pep:publish("urn:xmpp:avatar:data", true, photo_hash, st.stanza("item", {id=photo_hash}) | 88 pep:publish("urn:xmpp:avatar:data", true, item_container(photo_hash, |
| 85 :tag("data", { xmlns="urn:xmpp:avatar:data" }):text(photo[1])); | 89 st.stanza("data", { xmlns="urn:xmpp:avatar:data" }):text(photo[1]))); |
| 86 end | 90 end |
| 87 end | 91 end |
| 88 | 92 |
| 89 -- The "temporary" vCard XEP-0054 part | 93 -- The "temporary" vCard XEP-0054 part |
| 90 module:add_feature("vcard-temp"); | 94 module:add_feature("vcard-temp"); |
