annotate mod_pep_vcard_png_avatar/mod_pep_vcard_png_avatar.lua @ 2494:d300ae5dba87

mod_smacks: Fix some bugs with smacks-ack-delayed event triggering. The old code had several flaws which are addressed here. First of all this fixes the if statement guarding the event generation There where some timing glitches addressed by this commit as well.
author tmolitor <thilo@eightysoft.de>
date Sun, 12 Feb 2017 21:23:22 +0100
parents 7be1ca7a51a4
children e6a3bdbce7b9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2216
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
1 -- Prosody IM
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
2 -- Copyright (C) 2008-2014 Matthew Wild
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
3 -- Copyright (C) 2008-2014 Waqas Hussain
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
4 -- Copyright (C) 2014 Kim Alvefur
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
5 --
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
6 -- This project is MIT/X11 licensed. Please see the
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
7 -- COPYING file in the source package for more information.
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
8 --
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
9
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
10 local st = require "util.stanza"
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
11 local jid = require "util.jid";
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
12 local base64 = require"util.encodings".base64;
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
13 local sha1 = require"util.hashes".sha1;
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
14
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
15 local mod_pep = module:depends"pep";
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
16 local pep_data = mod_pep.module.save().data;
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
17
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
18 module:add_feature("http://prosody.im/protocol/vcard-pep-integration");
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
19 module:depends"vcard";
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
20 local vcard_storage = module:open_store("vcard");
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
21
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
22 local function get_vcard(username)
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
23 local vcard, err = vcard_storage:get(username);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
24 if vcard then
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
25 vcard = st.deserialize(vcard);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
26 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
27 if not vcard then
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
28 vcard = st.stanza("vCard", { xmlns = "vcard-temp" });
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
29 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
30 return vcard, err;
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
31 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
32
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
33 local function replace_tag(s, replacement)
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
34 local once = false;
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
35 s:maptags(function (tag)
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
36 if tag.name == replacement.name and tag.attr.xmlns == replacement.attr.xmlns then
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
37 if not once then
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
38 once = true;
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
39 return replacement;
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
40 else
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
41 return nil;
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
42 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
43 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
44 return tag;
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
45 end);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
46 if not once then
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
47 s:add_child(replacement);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
48 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
49 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
50
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
51 local function set_vcard(username, vcard)
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
52 if vcard then
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
53 vcard = st.preserialize(st.clone(vcard));
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
54 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
55 return vcard_storage:set(username, vcard);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
56 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
57
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
58 local function publish(session, node, id, item)
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
59 return module:fire_event("pep-publish-item", {
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
60 actor = true, user = jid.bare(session.full_jid), session = session, node = node, id = id, item = item;
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
61 });
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
62 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
63
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
64 -- vCard -> PEP
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
65 local function update_pep(session, vcard)
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
66 if not vcard then return end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
67 local nickname = vcard:get_child_text("NICKNAME");
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
68 if nickname then
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
69 publish(session, "http://jabber.org/protocol/nick", "current", st.stanza("item", {id="current"})
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
70 :tag("nick", { xmlns="http://jabber.org/protocol/nick" }):text(nickname));
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
71 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
72
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
73 local photo = vcard:get_child("PHOTO");
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
74 if photo then
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
75 local photo_type = photo:get_child_text("TYPE");
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
76 local photo_b64 = photo:get_child_text("BINVAL");
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
77 local photo_raw = photo_b64 and base64.decode(photo_b64);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
78 if photo_raw and photo_type then -- Else invalid data or encoding
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
79 local photo_hash = sha1(photo_raw, true);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
80
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
81 publish(session, "urn:xmpp:avatar:data", photo_hash, st.stanza("item", {id=photo_hash})
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
82 :tag("data", { xmlns="urn:xmpp:avatar:data" }):text(photo_b64));
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
83 publish(session, "urn:xmpp:avatar:metadata", photo_hash, st.stanza("item", {id=photo_hash})
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
84 :tag("metadata", { xmlns="urn:xmpp:avatar:metadata" })
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
85 :tag("info", { id = photo_hash, bytes = tostring(#photo_raw), type = photo_type,}));
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
86 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
87 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
88 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
89
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
90 local function handle_vcard(event)
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
91 local session, stanza = event.origin, event.stanza;
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
92 if not stanza.attr.to and stanza.attr.type == "set" then
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
93 return update_pep(session, stanza:get_child("vCard", "vcard-temp"));
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
94 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
95 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
96
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
97 module:hook("iq/bare/vcard-temp:vCard", handle_vcard, 1);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
98
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
99 -- PEP Avatar -> vCard
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
100 local function on_publish_metadata(event)
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
101 local username = event.session.username;
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
102 local metadata = event.item:find("{urn:xmpp:avatar:metadata}metadata/info");
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
103 if not metadata then
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
104 module:log("error", "No info found");
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
105 module:log("debug", event.item:top_tag());
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
106 return;
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
107 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
108 module:log("debug", metadata:top_tag());
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
109 local user_data = pep_data[username.."@"..module.host];
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
110 local pep_photo = user_data["urn:xmpp:avatar:data"];
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
111 pep_photo = pep_photo and pep_photo[1] == metadata.attr.id and pep_photo[2];
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
112 if not pep_photo then
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
113 module:log("error", "No photo found");
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
114 return;
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
115 end -- Publishing in the wrong order?
2217
7be1ca7a51a4 mod_pep_vcard_png_avatar: Fix Lua warnings
Michel Le Bihan <michel@lebihan.pl>
parents: 2216
diff changeset
116 local image=pep_photo:get_child_text("data", "urn:xmpp:avatar:data");
2216
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
117 if pep_photo and metadata.attr.type == "image/webp" then
2217
7be1ca7a51a4 mod_pep_vcard_png_avatar: Fix Lua warnings
Michel Le Bihan <michel@lebihan.pl>
parents: 2216
diff changeset
118 local file_webp = io.open("/tmp/Prosody_temp_avatar.webp", "w");
2216
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
119 file_webp:write(base64.decode(pep_photo:get_child_text("data", "urn:xmpp:avatar:data")));
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
120 file_webp:close();
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
121 os.execute("convert /tmp/Prosody_temp_avatar.webp /tmp/Prosody_temp_avatar.png");
2217
7be1ca7a51a4 mod_pep_vcard_png_avatar: Fix Lua warnings
Michel Le Bihan <michel@lebihan.pl>
parents: 2216
diff changeset
122 local file_png = io.open("/tmp/Prosody_temp_avatar.png", "r");
2216
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
123 image=base64.encode(file_png:read("*a"));
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
124 file_png:close();
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
125 os.remove("/tmp/Prosody_temp_avatar.webp");
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
126 os.remove("/tmp/Prosody_temp_avatar.png");
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
127 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
128 local vcard = get_vcard(username);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
129 local new_photo = st.stanza("PHOTO", { xmlns = "vcard-temp" })
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
130 :tag("TYPE"):text(metadata.attr.type):up()
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
131 :tag("BINVAL"):text(image);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
132
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
133 replace_tag(vcard, new_photo);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
134 set_vcard(username, vcard);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
135 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
136
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
137 -- PEP Nickname -> vCard
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
138 local function on_publish_nick(event)
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
139 local username = event.session.username;
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
140 local vcard = get_vcard(username);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
141 local new_nick = st.stanza("NICKNAME", { xmlns = "vcard-temp" })
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
142 :text(event.item:get_child_text("nick", "http://jabber.org/protocol/nick"));
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
143 replace_tag(vcard, new_nick);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
144 set_vcard(username, vcard);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
145 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
146
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
147 local function on_publish(event)
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
148 if event.actor == true then return end -- Not from a client
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
149 local node = event.node;
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
150 if node == "urn:xmpp:avatar:metadata" then
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
151 return on_publish_metadata(event);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
152 elseif node == "http://jabber.org/protocol/nick" then
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
153 return on_publish_nick(event);
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
154 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
155 end
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
156
7f36ec9c836e mod_pep_vcard_png_avatar: Initial commit
Michel Le Bihan <michel@lebihan.pl>
parents:
diff changeset
157 module:hook("pep-publish-item", on_publish, 1);