view mod_webpresence/mod_webpresence.lua @ 737:e4ea03b060ed

mod_archive: switch from/to The XEP-0136 is not very explicit about the meening of <from> and <to> elements, but the examples are clear: <from> means it comes from the user in the 'with' attribute of the collection. That is the opposite of what is currently implemented in that module. So for better compatibility with complient clients, this switch the 'from' and 'to' fields
author Olivier Goffart <ogoffart@woboq.com>
date Wed, 04 Jul 2012 14:08:43 +0200
parents 28b0a8cd950a
children 36044b77b6c2
line wrap: on
line source

module:depends("http");

local jid_split = require "util.jid".prepped_split;

if not require_resource then
	function require_resource(name)
		local icon_path = module:get_option_string("presence_icons", "icons");
		local f, err  = module:load_resource(icon_path.."/"..name);
		if f then
			return f:read("*a");
		end
		module:log("warn", "Failed to open image file %s", icon_path..name);
		return "";
	end
end

local statuses = { "online", "away", "xa", "dnd", "chat", "offline" };

for _, status in ipairs(statuses) do
	statuses[status] = { status_code = 200, headers = { content_type = "image/png" }, 
		body = require_resource("status_"..status..".png") };
end

local function handle_request(event, path)
	local jid = path:match("[^/]+$");
	if jid then
		local user, host = jid_split(jid);
		if host and not user then
			user, host = host, event.request.headers.host;
			if host then host = host:gsub(":%d+$", ""); end
		end
		if user and host then
			local user_sessions = hosts[host] and hosts[host].sessions[user];
			if user_sessions then
				local status = user_sessions.top_resources[1];
				if status and status.presence then
					status = status.presence:child_with_name("show");
					if not status then
						status = "online";
					else
						status = status:get_text();
					end
					return statuses[status];
				end
			end
		end
	end
	return statuses.offline;
end

module:provides("http", {
	default_path = "/status";
	route = {
		["GET /*"] = handle_request;
	};
});