view mod_pubsub_post/mod_pubsub_post.lua @ 2596:ffb6646b4253

Implement XEP-0198 revision 1.5.2 and limit number of hibernated sessions per user Revision 1.5.2 allows sending h-values on resumes that fail due to hibernation timeout and to send out a smacks ack directly before the stream close tag. I also made the used timers stoppable even for prosody 0.10 and below, this makes the smacks-ack-delayed event more useful.
author tmolitor <thilo@eightysoft.de>
date Sun, 05 Mar 2017 20:23:53 +0100
parents 43c54a27bab2
children 8bfba31a1f8b
line wrap: on
line source

module:depends("http");

local st = require "util.stanza";
local json = require "util.json";
local formdecode = require "net.http".formdecode;
local uuid_generate = require "util.uuid".generate;
local timestamp_generate = require "util.datetime".datetime;

local pubsub_service = module:depends("pubsub").service;

function handle_POST(event, path)
	local data = event.request.body;
	local item_id = "default";

	local post_item = st.stanza("item", { id = item_id, xmlns = "http://jabber.org/protocol/pubsub" })
		:tag("entry", { xmlns = "http://www.w3.org/2005/Atom" })
			:tag("id"):text(uuid_generate()):up()
			:tag("title"):text(data):up()
			:tag("author")
				:tag("name"):text(event.request.conn:ip()):up()
				:up()
			:tag("published"):text(timestamp_generate()):up();
	
	local ok, err = pubsub_service:publish(path, true, item_id, post_item);
	module:log("debug", "Handled POST: \n%s\n", tostring(event.request.body));
	return ok and "Posted" or ("Error: "..err);
end

module:provides("http", {
	route = {
		["POST /*"] = handle_POST;
	};
});

function module.load()
	module:log("debug", "Loaded at %s", module:http_url());
end