Mercurial > prosody-modules
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 2293:144b74caa5ef | 2294:4915b8223b07 |
|---|---|
| 1 -- HTTP Access to PEP -> microblog | |
| 2 -- By Kim Alvefur <zash@zash.se> | |
| 3 | |
| 4 module:depends"http"; | |
| 5 module:depends"pep"; | |
| 6 local nodeprep = require "util.encodings".stringprep.nodeprep; | |
| 7 local st = require "util.stanza"; | |
| 8 local host, hosts = module.host, hosts; | |
| 9 | |
| 10 local function handle_request(event, path) | |
| 11 local response = event.response; | |
| 12 | |
| 13 local user = nodeprep(path); | |
| 14 if not user then return 400 end | |
| 15 local jid = user .. "@" .. host; | |
| 16 | |
| 17 local pep_data = hosts[host].modules.pep.module.save(); | |
| 18 if not pep_data.data[jid] or | |
| 19 not pep_data.data[jid]["urn:xmpp:microblog:0"] then | |
| 20 return 404; | |
| 21 end | |
| 22 | |
| 23 local microblogdata = pep_data.data[jid]["urn:xmpp:microblog:0"][2]:get_child("entry", "http://www.w3.org/2005/Atom"); | |
| 24 if not microblogdata then return 404; end | |
| 25 local feed = st.stanza("feed", { xmlns="http://www.w3.org/2005/Atom" } ); | |
| 26 local source = microblogdata:get_child("source"); | |
| 27 if source then | |
| 28 for i = 1,#source do | |
| 29 feed:add_child(source[i]):up(); | |
| 30 end | |
| 31 for i = 1,#microblogdata do | |
| 32 if microblogdata[i].name == "source" then | |
| 33 table.remove(microblogdata, i); | |
| 34 break | |
| 35 end | |
| 36 end | |
| 37 end | |
| 38 feed:add_child(microblogdata); | |
| 39 response.headers.content_type = "application/atom+xml"; | |
| 40 return "<?xml version='1.0' encoding='utf-8'?>" .. tostring(feed) .. "\n"; | |
| 41 end | |
| 42 | |
| 43 module:provides("http", { | |
| 44 route = { | |
| 45 ["GET /*"] = handle_request; | |
| 46 }; | |
| 47 }); |
