Software /
code /
prosody
Comparison
plugins/mod_pubsub/pubsub.lib.lua @ 8337:dc4ea43ac463
mod_pubsub: Add support for Create and Configure
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 18 Oct 2017 09:08:16 +0200 |
parent | 8336:587305c0ff85 |
child | 8338:30d8157391e9 |
comparison
equal
deleted
inserted
replaced
8336:587305c0ff85 | 8337:dc4ea43ac463 |
---|---|
120 end | 120 end |
121 | 121 |
122 function handlers.set_create(origin, stanza, create, service) | 122 function handlers.set_create(origin, stanza, create, service) |
123 local node = create.attr.node; | 123 local node = create.attr.node; |
124 local ok, ret, reply; | 124 local ok, ret, reply; |
125 local config; | |
126 local configure = stanza.tags[1]:get_child("configure"); | |
127 if configure then | |
128 local config_form = config:get_child("x", "jabber:x:data"); | |
129 if not config_form then | |
130 origin.send(st.error_reply(stanza, "modify", "bad-request", "Missing dataform")); | |
131 return true; | |
132 end | |
133 local form_data, err = node_config_form:data(config_form); | |
134 if not form_data then | |
135 origin.send(st.error_reply(stanza, "modify", "bad-request", err)); | |
136 return true; | |
137 end | |
138 config = { | |
139 ["max_items"] = tonumber(form_data["pubsub#max_items"]); | |
140 ["persist_items"] = form_data["pubsub#persist_items"]; | |
141 }; | |
142 end | |
125 if node then | 143 if node then |
126 ok, ret = service:create(node, stanza.attr.from); | 144 ok, ret = service:create(node, stanza.attr.from, config); |
127 if ok then | 145 if ok then |
128 reply = st.reply(stanza); | 146 reply = st.reply(stanza); |
129 else | 147 else |
130 reply = pubsub_error_reply(stanza, ret); | 148 reply = pubsub_error_reply(stanza, ret); |
131 end | 149 end |
132 else | 150 else |
133 repeat | 151 repeat |
134 node = uuid_generate(); | 152 node = uuid_generate(); |
135 ok, ret = service:create(node, stanza.attr.from); | 153 ok, ret = service:create(node, stanza.attr.from, config); |
136 until ok or ret ~= "conflict"; | 154 until ok or ret ~= "conflict"; |
137 if ok then | 155 if ok then |
138 reply = st.reply(stanza) | 156 reply = st.reply(stanza) |
139 :tag("pubsub", { xmlns = xmlns_pubsub }) | 157 :tag("pubsub", { xmlns = xmlns_pubsub }) |
140 :tag("create", { node = node }); | 158 :tag("create", { node = node }); |