view mod_atom/mod_atom.lua @ 2968:569b98d6fca1

mod_http_logging: Be robust against missing connection object
author Kim Alvefur <zash@zash.se>
date Fri, 30 Mar 2018 13:37:39 +0200
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;
	};
});