view mod_default_bookmarks/mod_default_bookmarks.lua @ 944:21e81fcb8896

mod_s2s_auth_compat: Workaround for Openfire doing EXTERNAL without proper stream headers
author Kim Alvefur <zash@zash.se>
date Mon, 01 Apr 2013 16:08:21 +0200
parents 597c872d691e
children 853a382c9bd6
line wrap: on
line source

-- Prosody IM
-- Copyright (C) 2008-2010 Matthew Wild
-- Copyright (C) 2008-2010 Waqas Hussain
-- Copyright (C) 2011 Kim Alvefur
-- 
-- This project is MIT/X11 licensed. Please see the
-- COPYING file in the source package for more information.
--


local st = require "util.stanza"

local dm_load = require "util.datamanager".load
local jid_split = require "util.jid".split

module:hook("iq/self/jabber:iq:private:query", function(event)
	local origin, stanza = event.origin, event.stanza;
	local typ = stanza.attr.type;
	local from = stanza.attr.from;
	local query = stanza.tags[1];
	if #query.tags == 1 and typ == "get" then
		local tag = query.tags[1];
		local key = tag.name..":"..tag.attr.xmlns;
		if key == "storage:storage:bookmarks" then
			local data, err = dm_load(origin.username, origin.host, "private");
			if not(data and data[key]) then
				local bookmarks = module:get_option("default_bookmarks");
				if bookmarks and #bookmarks > 0 then
					local reply = st.reply(stanza):tag("query", {xmlns = "jabber:iq:private"})
						:tag("storage", { xmlns = "storage:bookmarks" });
					local nick = jid_split(from);
					for i=1,#bookmarks do
						local bookmark = bookmarks[i];
						if type(bookmark) ~= "table" then -- assume it's only a jid
							bookmark = { jid = bookmark, name = jid_split(bookmark) };
						end
						reply:tag("conference", {
							jid = bookmark.jid,
							name = bookmark.name,
							autojoin = "1",
						}):tag("nick"):text(nick):up():up();
					end
					origin.send(reply);
					return true;
				end
			end
		end
	end
end, 1);