Comparison

mod_pubsub_post/mod_pubsub_post.lua @ 3015:338b7c808ecc

mod_pubsub_post: Add support for posting Atom feeds, publishing each entry
author Kim Alvefur <zash@zash.se>
date Sun, 20 May 2018 00:04:41 +0200
parent 3014:72dbc9b66de8
child 3016:3f4e2340bfdc
comparison
equal deleted inserted replaced
3014:72dbc9b66de8 3015:338b7c808ecc
24 return error_mapping[err] or 500; 24 return error_mapping[err] or 500;
25 end 25 end
26 return 202; 26 return 202;
27 end 27 end
28 28
29 local function publish_atom(node, feed)
30 for entry in feed:childtags("entry") do
31 local item_id = entry:get_child_text("id");
32 if not item_id then
33 item_id = uuid_generate();
34 entry:tag("id"):text(item_id):up();
35 end
36 if not entry:get_child_text("published") then
37 entry:tag("published"):text(timestamp_generate()):up();
38 end
39 local resp = publish_payload(node, item_id, entry);
40 if resp ~= 202 then return resp; end
41 end
42 return 202;
43 end
44
29 local function handle_xml(node, payload) 45 local function handle_xml(node, payload)
30 local xmlpayload, err = xml.parse(payload); 46 local xmlpayload, err = xml.parse(payload);
31 if not xmlpayload then 47 if not xmlpayload then
32 module:log("debug", "XML parse error: %s\n%q", err, payload); 48 module:log("debug", "XML parse error: %s\n%q", err, payload);
33 return { status_code = 400, body = tostring(err) }; 49 return { status_code = 400, body = tostring(err) };
34 end 50 end
35 return publish_payload(node, "current", xmlpayload); 51 if xmlpayload.attr.xmlns == "http://www.w3.org/2005/Atom" and xmlpayload.name == "feed" then
52 return publish_atom(node, xmlpayload);
53 else
54 return publish_payload(node, "current", xmlpayload);
55 end
36 end 56 end
37 57
38 function handle_POST(event, path) 58 function handle_POST(event, path)
39 local request = event.request; 59 local request = event.request;
40 module:log("debug", "Handling POST: \n%s\n", tostring(request.body)); 60 module:log("debug", "Handling POST: \n%s\n", tostring(request.body));