Mercurial > prosody-modules
diff mod_pubsub_post/mod_pubsub_post.lua @ 3017:8e48c0b233e0
mod_pubsub_post: Factor out the 'actor' into an argument
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 20 May 2018 02:56:48 +0200 |
parents | 3f4e2340bfdc |
children | 727a8beeb5c3 |
line wrap: on
line diff
--- a/mod_pubsub_post/mod_pubsub_post.lua Sun May 20 00:00:33 2018 +0200 +++ b/mod_pubsub_post/mod_pubsub_post.lua Sun May 20 02:56:48 2018 +0200 @@ -15,10 +15,10 @@ ["conflict"] = 409; }; -local function publish_payload(node, item_id, payload) +local function publish_payload(node, actor, item_id, payload) local post_item = st.stanza("item", { xmlns = "http://jabber.org/protocol/pubsub", id = item_id, }) :add_child(payload); - local ok, err = pubsub_service:publish(node, true, item_id, post_item); + local ok, err = pubsub_service:publish(node, actor, item_id, post_item); module:log("debug", ":publish(%q, true, %q, %s) -> %q", node, item_id, payload:top_tag(), err or ""); if not ok then return error_mapping[err] or 500; @@ -26,7 +26,7 @@ return 202; end -local function handle_json(node, data) +local function handle_json(node, actor, data) local parsed, err = json.decode(data); if not parsed then return { status_code = 400; body = tostring(err); } @@ -35,10 +35,10 @@ return { status_code = 400; body = "object or array expected"; }; end local wrapper = st.stanza("json", { xmlns="urn:xmpp:json:0" }):text(data); - return publish_payload(node, data.id or "current", wrapper); + return publish_payload(node, actor, data.id or "current", wrapper); end -local function publish_atom(node, feed) +local function publish_atom(node, actor, feed) for entry in feed:childtags("entry") do local item_id = entry:get_child_text("id"); if not item_id then @@ -48,22 +48,22 @@ if not entry:get_child_text("published") then entry:tag("published"):text(timestamp_generate()):up(); end - local resp = publish_payload(node, item_id, entry); + local resp = publish_payload(node, actor, item_id, entry); if resp ~= 202 then return resp; end end return 202; end -local function handle_xml(node, payload) +local function handle_xml(node, actor, payload) local xmlpayload, err = xml.parse(payload); if not xmlpayload then module:log("debug", "XML parse error: %s\n%q", err, payload); return { status_code = 400, body = tostring(err) }; end if xmlpayload.attr.xmlns == "http://www.w3.org/2005/Atom" and xmlpayload.name == "feed" then - return publish_atom(node, xmlpayload); + return publish_atom(node, actor, xmlpayload); else - return publish_payload(node, "current", xmlpayload); + return publish_payload(node, actor, "current", xmlpayload); end end @@ -72,11 +72,12 @@ module:log("debug", "Handling POST: \n%s\n", tostring(request.body)); local content_type = request.headers.content_type or "application/octet-stream"; + local actor = true; if content_type == "application/xml" or content_type:sub(-4) == "+xml" then - return handle_xml(path, request.body); + return handle_xml(path, actor, request.body); elseif content_type == "application/json" or content_type:sub(-5) == "+json" then - return handle_json(path, request.body); + return handle_json(path, actor, request.body); end module:log("debug", "Unsupported content-type: %q", content_type);