Mercurial > prosody-modules
view mod_atom/mod_atom.lua @ 2900:0286ccacec7c
mod_auto_answer_disco_info: New module answering disco#info queries on the behalf of the recipient
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Wed, 07 Mar 2018 17:11:49 +0100 |
parents | 4915b8223b07 |
children | 4b52cafd5811 |
line wrap: on
line source
-- 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; }; });