# HG changeset patch # User Matthew Wild # Date 1253839394 -3600 # Node ID 63080b8973ee7908f25aa6e9ff7cc5082727b194 # Parent 723fd785815fc92e96b46ac8d11e1bc1fea48025 mod_webpresence: Initial commit diff -r 723fd785815f -r 63080b8973ee mod_webpresence/icons/status_away.png Binary file mod_webpresence/icons/status_away.png has changed diff -r 723fd785815f -r 63080b8973ee mod_webpresence/icons/status_chat.png Binary file mod_webpresence/icons/status_chat.png has changed diff -r 723fd785815f -r 63080b8973ee mod_webpresence/icons/status_dnd.png Binary file mod_webpresence/icons/status_dnd.png has changed diff -r 723fd785815f -r 63080b8973ee mod_webpresence/icons/status_offline.png Binary file mod_webpresence/icons/status_offline.png has changed diff -r 723fd785815f -r 63080b8973ee mod_webpresence/icons/status_online.png Binary file mod_webpresence/icons/status_online.png has changed diff -r 723fd785815f -r 63080b8973ee mod_webpresence/icons/status_xa.png Binary file mod_webpresence/icons/status_xa.png has changed diff -r 723fd785815f -r 63080b8973ee mod_webpresence/mod_webpresence.in.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_webpresence/mod_webpresence.in.lua Fri Sep 25 01:43:14 2009 +0100 @@ -0,0 +1,51 @@ +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 = "

Page Not Found

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); diff -r 723fd785815f -r 63080b8973ee mod_webpresence/mod_webpresence.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mod_webpresence/mod_webpresence.lua Fri Sep 25 01:43:14 2009 +0100 @@ -0,0 +1,49 @@ +do local e={};e["icons/status_online.png"]='PNG\r\ +\ +\0\0\0\rIHDR\0\0\0\0\0\0\0\0\0V%\0\0\0sBIT|d\0\0\0 pHYs\0\0\r\0\0\rB(x\0\0\0tEXtSoftware\0www.inkscape.org<\0\0IDAT(U_h[u?woM65Kel]+a[uOE\ +">D܆Pd0/VӗXAa)Ctin7U$m&Mn{ׇ;kwp s뺬\'?7CjZԢ Tu\\;zVwxGn{f43 wiI//ѿ^;y^#jbB\0H["%v1k?R۶<\ +\\bЬ*Z@C{A\rPQu% 3εjL\0ޕ{Yh TPyɟ\' ޫ?(a+d E((BAhc3T^Ob0a2K%uU-.x"-KŸ`ߖ}zbcz4PªґȲ9l6mibA.w\\Fn/7XQA GZЧ!~alcm"G"9 ~@6@$ >cy@y()BI,Yueyz3o$胰Z&,PII*C$2dI{Cֻ|S<\0"r:p.dJI$x-6~/Q`ք1>Eb}t~x֣ͼwҨ{u5T%%%\0Ӿ}f&ԿGЪ`x7=4>=FuVCh?bɔ4C̠ɬwUjwv{Y[ҏ]@*Nn߼k^qRo,3v,j\0\0\0\0IENDB`'e["icons/status_xa.png"]="PNG\r\ +\ +\0\0\0\rIHDR\0\0\0\0\0\0\0\0\0V%\0\0\0sBIT|d\0\0\0 pHYs\0\0\r\0\0\rB(x\0\0\0tEXtSoftware\0www.inkscape.org<\0\07IDAT(UmLUu\0s=s7LoC؂jm\rIlBhЋsEzqImI,m (6)|P,.쑄,Ϟ6ivFjYEqhFtCmE?KۤIHm LDm3rљPyuSm^JUMƥ\0XCpOKk-,>_SU180$d'xhST>uo_PD87s@~iҵ/M4ώ#8ӹk/Ot$Xʖk%|!XPKW6օxs bGuk;/?etJ %{F };yX/!8BaaҁD>7^Ӷ*>+~?Xƚ{y_IX&Eq9ic9acddi(\0`vp\0`׫Ӓ$j5T O\r7M\rӅat= P%px‚Y%j3ٌ]p񠷵Ѻ~Da&FFس\0wzvXԽ3R䡺L'\\+z װL3ZU딎͒á#Ngeʑ\\2Qm ,K2LM7^hQ\0ڎc+_ Ee'(.i-\\1mJXM1Q䋉;Vw>E*lwQ:E=wUU'v?hj\0\0\0\0IENDB`"e["icons/status_dnd.png"]="PNG\r\ +\ +\0\0\0\rIHDR\0\0\0\0\0\0\0\0\0V%\0\0\0sBIT|d\0\0\0 pHYs\0\0\r\0\0\rB(x\0\0\0tEXtSoftware\0www.inkscape.org<\0\0IDAT(}k\\Us;IBj\"2hRLM[pQWnDtUQ(nZ*6]T\ +ªP-lL-I$w⚚ w^xD;{-SGZ宩_U٣6?jd\ +%!E`9x}W'zy?OZxi.+#Ei:mϷ{G~;ܡ\0h^xk}`m^D@ w)|xp_'浙7~0XS*'}z`@B\"v|_:;ڢ1Z RZ5(P\ +_6ϙ(\ +7\0i+R1J1A 1DiWL>Fb{s9sf=?=7j!!ƈk- (ͦJVj3B DAD֚Z]14[C/4jD!@ UY@}bSCBPʴzE,Enwp1e:]Yߕ_\\|jڭ{ɉ'֓{+ |_R:6rjxuRcፖN uj)ОO?y[]𶎼xt#fjWWdݿ(yRi\0\0\0\0IENDB`"e["icons/status_chat.png"]='PNG\r\ +\ +\0\0\0\rIHDR\0\0\0\0\0\0\0\0\0V%\0\0\0sBIT|d\0\0\0 pHYs\0\0\r\0\0\rB(x\0\0\0tEXtSoftware\0www.inkscape.org<\0\0IDAT(ULus!D`sqY:3deS˭15d-mfrㇶ6;f-oZs؈X6`LԎ Kk?PWt:r5c0:75m\rLƌP/ުz[/=@4"Xb24~ğo/ǎ{_hh*Rnr"),I $3=]}8@m@J.Fk/Zк<-no:\0w//gMk6E)ŲbX}N\r`"&o++tyYŕMap\0к\ +PEhvsiw%]DagkBY e%,NݦG{buoXd(-+gE2twP\\