--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mod_atom/mod_atom.lua Mon Aug 29 23:11:05 2016 +0200
@@ -0,0 +1,47 @@
+-- HTTP Access to PEP -> microblog
+-- By Kim Alvefur <zash@zash.se>
+
+module:depends"http";
+module:depends"pep";
+local nodeprep = require "util.encodings".stringprep.nodeprep;
+local st = require "util.stanza";
+local host, hosts = module.host, hosts;
+
+local function handle_request(event, path)
+ local response = event.response;
+
+ local user = nodeprep(path);
+ if not user then return 400 end
+ local jid = user .. "@" .. host;
+
+ local pep_data = hosts[host].modules.pep.module.save();
+ if not pep_data.data[jid] or
+ not pep_data.data[jid]["urn:xmpp:microblog:0"] then
+ return 404;
+ end
+
+ local microblogdata = pep_data.data[jid]["urn:xmpp:microblog:0"][2]:get_child("entry", "http://www.w3.org/2005/Atom");
+ if not microblogdata then return 404; end
+ local feed = st.stanza("feed", { xmlns="http://www.w3.org/2005/Atom" } );
+ local source = microblogdata:get_child("source");
+ if source then
+ for i = 1,#source do
+ feed:add_child(source[i]):up();
+ end
+ for i = 1,#microblogdata do
+ if microblogdata[i].name == "source" then
+ table.remove(microblogdata, i);
+ break
+ end
+ end
+ end
+ feed:add_child(microblogdata);
+ response.headers.content_type = "application/atom+xml";
+ return "<?xml version='1.0' encoding='utf-8'?>" .. tostring(feed) .. "\n";
+end
+
+module:provides("http", {
+ route = {
+ ["GET /*"] = handle_request;
+ };
+});