6 local st = require"util.stanza"; |
6 local st = require"util.stanza"; |
7 local jid = require"util.jid"; |
7 local jid = require"util.jid"; |
8 local dataform = require"util.dataforms".new; |
8 local dataform = require"util.dataforms".new; |
9 |
9 |
10 local xmlns_push = "urn:xmpp:push:0"; |
10 local xmlns_push = "urn:xmpp:push:0"; |
|
11 |
|
12 -- configuration |
|
13 local include_body = module:get_option("push_notification_with_body", true); |
|
14 local include_sender = module:get_option("push_notification_with_sender", true); |
11 |
15 |
12 -- For keeping state across reloads |
16 -- For keeping state across reloads |
13 local push_enabled = module:shared("push-enabled-users"); |
17 local push_enabled = module:shared("push-enabled-users"); |
14 |
18 |
15 -- http://xmpp.org/extensions/xep-0357.html#disco |
19 -- http://xmpp.org/extensions/xep-0357.html#disco |
84 push_info.count = push_info.count + 1; |
88 push_info.count = push_info.count + 1; |
85 local push_jid, push_node = push_info.jid, push_info.node; |
89 local push_jid, push_node = push_info.jid, push_info.node; |
86 local push_publish = st.iq({ to = push_jid, from = module.host, type = "set", id = "push" }) |
90 local push_publish = st.iq({ to = push_jid, from = module.host, type = "set", id = "push" }) |
87 :tag("pubsub", { xmlns = "http://jabber.org/protocol/pubsub" }) |
91 :tag("pubsub", { xmlns = "http://jabber.org/protocol/pubsub" }) |
88 :tag("publish", { node = push_node }); |
92 :tag("publish", { node = push_node }); |
89 push_publish:add_child(push_form:form({ |
93 local form_data = { |
90 ["message-count"] = tostring(push_info.count); |
94 ["message-count"] = tostring(push_info.count); |
91 ["last-message-sender"] = stanza.attr.from; |
95 }; |
92 ["last-message-body"] = stanza:get_child_text("body"); |
96 if include_sender then |
93 })); |
97 form_data["last-message-sender"] = stanza.attr.from; |
|
98 end |
|
99 if include_body then |
|
100 form_data["last-message-body"] = stanza:get_child_text("body"); |
|
101 end |
|
102 push_publish:add_child(push_form:form(form_data)); |
94 push_publish:up(); -- / publish |
103 push_publish:up(); -- / publish |
95 if push_info.options then |
104 if push_info.options then |
96 push_publish:tag("publish-options"):add_child(push_info.options); |
105 push_publish:tag("publish-options"):add_child(push_info.options); |
97 end |
106 end |
98 module:send(push_publish); |
107 module:send(push_publish); |