File

mod_webpresence/mod_webpresence.in.lua @ 94:941fd7d8b9b2

mod_muc_log: split into mod_muc_log and mod_muc_log_http mod_muc_log: should be enabled per muc component which should log! mod_muc_log_http: handle /me messages, add previous, next day links to day view, add link to speeqe.com to directly join the room, make the window recalculate the content div size, scrollbars are only shown when needed
author Thilo Cestonaro <thilo@cestona.ro>
date Tue, 17 Nov 2009 21:19:17 +0100
parent 4:63080b8973ee
line wrap: on
line source

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

if not require_resource then
	function require_resource(name)
		local f = io.open((config.get("*", "core", "presence_icons") or "")..name);
		if f then
			return f:read("*a");
		end
		module:log("warn", "Failed to open image file %s", (config.get("*", "core", "presence_icons") or "")..name);
		return "";
	end
end

local response_404 = { status = "404 Not Found", body = "<h1>Page Not Found</h1>Sorry, we couldn't find what you were looking for :(" };

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

for _, status in ipairs(statuses) do
	statuses[status] = { status = "200 OK", headers = { ["Content-Type"] = "image/png" }, 
		body = require_resource("icons/status_"..status..".png") };
end

local function handle_request(method, body, request)
	local jid = request.url.path:match("[^/]+$");
	if jid then
		local user, host = jid_split(jid);
		if host and not user then
			user, host = host, 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

local ports = config.get(module.host, "core", "http_ports") or { 5280 };
require "net.httpserver".new_from_config(ports, "status", handle_request);