Mercurial > prosody-modules
diff mod_atom/mod_atom.lua @ 2294:4915b8223b07
mod_atom: Expose Microbloging PEP data over HTTP
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Mon, 29 Aug 2016 23:11:05 +0200 |
parents | |
children | 4b52cafd5811 |
line wrap: on
line diff
--- /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; + }; +});