mod_pep_plus/mod_pep_plus.lua
author Kim Alvefur <zash@zash.se>
Wed, 18 Oct 2017 09:56:29 +0200
changeset 2805 cb2342cf3f3c
parent 2672 f8fc79b3051a
permissions -rw-r--r--
mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
     1
local pubsub = module:require "util_pubsub";
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     2
local jid_bare = require "util.jid".bare;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     3
local jid_split = require "util.jid".split;
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
     4
local jid_join = require "util.jid".join;
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     5
local set_new = require "util.set".new;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     6
local st = require "util.stanza";
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     7
local calculate_hash = require "util.caps".calculate_hash;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     8
local is_contact_subscribed = require "core.rostermanager".is_contact_subscribed;
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
     9
local cache = require "util.cache";
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    10
local set = require "util.set";
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    11
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    12
local xmlns_pubsub = "http://jabber.org/protocol/pubsub";
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    13
local xmlns_pubsub_event = "http://jabber.org/protocol/pubsub#event";
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    14
local xmlns_pubsub_owner = "http://jabber.org/protocol/pubsub#owner";
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    15
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    16
local lib_pubsub = module:require "pubsub";
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    17
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    18
local empty_set = set_new();
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    19
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    20
local services = {};
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    21
local recipients = {};
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    22
local hash_map = {};
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    23
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    24
local host = module.host;
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    25
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    26
local known_nodes_map = module:open_store("pep", "map");
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    27
local known_nodes = module:open_store("pep");
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    28
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    29
function module.save()
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    30
	return { services = services };
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    31
end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    32
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    33
function module.restore(data)
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    34
	services = data.services;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    35
end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    36
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    37
local function subscription_presence(username, recipient)
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    38
	local user_bare = jid_join(username, host);
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    39
	local recipient_bare = jid_bare(recipient);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    40
	if (recipient_bare == user_bare) then return true; end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    41
	return is_contact_subscribed(username, host, recipient_bare);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    42
end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    43
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    44
local function simple_itemstore(username)
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    45
	return function (config, node)
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    46
		if config["persist_items"] then
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    47
			module:log("debug", "Creating new persistent item store for user %s, node %q", username, node);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    48
			known_nodes_map:set(username, node, true);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    49
			local archive = module:open_store("pep_"..node, "archive");
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    50
			return lib_pubsub.archive_itemstore(archive, config, username, node, false);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    51
		else
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    52
			module:log("debug", "Creating new ephemeral item store for user %s, node %q", username, node);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    53
			known_nodes_map:set(username, node, nil);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    54
			return cache.new(tonumber(config["max_items"]));
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    55
		end
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    56
	end
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    57
end
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    58
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    59
local function get_broadcaster(username)
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    60
	local user_bare = jid_join(username, host);
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    61
	local function simple_broadcast(kind, node, jids, item)
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    62
		if item then
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    63
			item = st.clone(item);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    64
			item.attr.xmlns = nil; -- Clear the pubsub namespace
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    65
		end
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    66
		local message = st.message({ from = user_bare, type = "headline" })
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    67
			:tag("event", { xmlns = xmlns_pubsub_event })
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    68
				:tag(kind, { node = node })
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    69
					:add_child(item);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    70
		for jid in pairs(jids) do
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    71
			module:log("debug", "Sending notification to %s from %s: %s", jid, user_bare, tostring(item));
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    72
			message.attr.to = jid;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    73
			module:send(message);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    74
		end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    75
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    76
	return simple_broadcast;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    77
end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    78
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    79
function get_pep_service(username)
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    80
	module:log("debug", "get_pep_service(%q)", username);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    81
	local user_bare = jid_join(username, host);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
    82
	local service = services[username];
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    83
	if service then
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    84
		return service;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    85
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    86
	service = pubsub.new({
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    87
		capabilities = {
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    88
			none = {
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    89
				create = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    90
				publish = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    91
				retract = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    92
				get_nodes = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    93
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    94
				subscribe = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    95
				unsubscribe = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    96
				get_subscription = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    97
				get_subscriptions = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    98
				get_items = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    99
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   100
				subscribe_other = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   101
				unsubscribe_other = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   102
				get_subscription_other = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   103
				get_subscriptions_other = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   104
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   105
				be_subscribed = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   106
				be_unsubscribed = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   107
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   108
				set_affiliation = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   109
			};
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   110
			subscriber = {
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   111
				create = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   112
				publish = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   113
				retract = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   114
				get_nodes = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   115
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   116
				subscribe = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   117
				unsubscribe = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   118
				get_subscription = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   119
				get_subscriptions = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   120
				get_items = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   121
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   122
				subscribe_other = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   123
				unsubscribe_other = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   124
				get_subscription_other = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   125
				get_subscriptions_other = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   126
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   127
				be_subscribed = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   128
				be_unsubscribed = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   129
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   130
				set_affiliation = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   131
			};
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   132
			publisher = {
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   133
				create = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   134
				publish = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   135
				retract = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   136
				get_nodes = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   137
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   138
				subscribe = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   139
				unsubscribe = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   140
				get_subscription = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   141
				get_subscriptions = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   142
				get_items = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   143
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   144
				subscribe_other = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   145
				unsubscribe_other = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   146
				get_subscription_other = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   147
				get_subscriptions_other = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   148
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   149
				be_subscribed = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   150
				be_unsubscribed = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   151
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   152
				set_affiliation = false;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   153
			};
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   154
			owner = {
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   155
				create = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   156
				publish = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   157
				retract = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   158
				delete = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   159
				get_nodes = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   160
				configure = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   161
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   162
				subscribe = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   163
				unsubscribe = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   164
				get_subscription = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   165
				get_subscriptions = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   166
				get_items = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   167
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   168
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   169
				subscribe_other = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   170
				unsubscribe_other = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   171
				get_subscription_other = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   172
				get_subscriptions_other = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   173
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   174
				be_subscribed = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   175
				be_unsubscribed = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   176
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   177
				set_affiliation = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   178
			};
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   179
		};
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   180
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   181
		node_defaults = {
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   182
			["max_items"] = 1;
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   183
			["persist_items"] = true;
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   184
		};
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   185
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   186
		autocreate_on_publish = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   187
		autocreate_on_subscribe = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   188
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   189
		itemstore = simple_itemstore(username);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   190
		broadcaster = get_broadcaster(username);
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   191
		get_affiliation = function (jid)
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   192
			if jid_bare(jid) == user_bare then
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   193
				return "owner";
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   194
			elseif subscription_presence(username, jid) then
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   195
				return "subscriber";
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   196
			end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   197
		end;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   198
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   199
		normalize_jid = jid_bare;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   200
	});
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   201
	local nodes, err = known_nodes:get(username);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   202
	if nodes then
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   203
		module:log("debug", "Restoring nodes for user %s", username);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   204
		for node in pairs(nodes) do
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   205
			module:log("debug", "Restoring node %q", node);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   206
			service:create(node, true);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   207
		end
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   208
	elseif err then
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   209
		module:log("error", "Could not restore nodes for %s: %s", username, err);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   210
	else
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   211
		module:log("debug", "No known nodes");
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   212
	end
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   213
	services[username] = service;
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   214
	module:add_item("pep-service", { service = service, jid = user_bare });
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   215
	return service;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   216
end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   217
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   218
function handle_pubsub_iq(event)
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   219
	local origin, stanza = event.origin, event.stanza;
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   220
	local service_name = origin.username;
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   221
	if stanza.attr.to ~= nil then
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   222
		service_name = jid_split(stanza.attr.to);
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   223
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   224
	local service = get_pep_service(service_name);
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   225
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   226
	return lib_pubsub.handle_pubsub_iq(event, service)
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   227
end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   228
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   229
module:hook("iq/bare/"..xmlns_pubsub..":pubsub", handle_pubsub_iq);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   230
module:hook("iq/bare/"..xmlns_pubsub_owner..":pubsub", handle_pubsub_iq);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   231
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   232
module:add_identity("pubsub", "pep", module:get_option_string("name", "Prosody"));
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   233
module:add_feature("http://jabber.org/protocol/pubsub#publish");
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   234
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   235
local function get_caps_hash_from_presence(stanza, current)
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   236
	local t = stanza.attr.type;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   237
	if not t then
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   238
		local child = stanza:get_child("c", "http://jabber.org/protocol/caps");
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   239
		if child then
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   240
			local attr = child.attr;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   241
			if attr.hash then -- new caps
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   242
				if attr.hash == 'sha-1' and attr.node and attr.ver then
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   243
					return attr.ver, attr.node.."#"..attr.ver;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   244
				end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   245
			else -- legacy caps
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   246
				if attr.node and attr.ver then
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   247
					return attr.node.."#"..attr.ver.."#"..(attr.ext or ""), attr.node.."#"..attr.ver;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   248
				end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   249
			end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   250
		end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   251
		return; -- no or bad caps
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   252
	elseif t == "unavailable" or t == "error" then
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   253
		return;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   254
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   255
	return current; -- no caps, could mean caps optimization, so return current
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   256
end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   257
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   258
local function resend_last_item(jid, node, service)
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   259
	local ok, items = service:get_items(node, jid);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   260
	if not ok then return; end
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   261
	for _, id in ipairs(items) do
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   262
		service.config.broadcaster("items", node, { [jid] = true }, items[id]);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   263
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   264
end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   265
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   266
local function update_subscriptions(recipient, service_name, nodes)
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   267
	local service = get_pep_service(service_name);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   268
	nodes = nodes or empty_set;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   269
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   270
	local service_recipients = recipients[service_name];
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   271
	if not service_recipients then
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   272
		service_recipients = {};
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   273
		recipients[service_name] = service_recipients;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   274
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   275
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   276
	local current = service_recipients[recipient];
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   277
	if not current or type(current) ~= "table" then
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   278
		current = empty_set;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   279
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   280
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   281
	if (current == empty_set or current:empty()) and (nodes == empty_set or nodes:empty()) then
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   282
		return;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   283
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   284
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   285
	for node in current - nodes do
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   286
		service:remove_subscription(node, recipient, recipient);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   287
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   288
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   289
	for node in nodes - current do
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   290
		service:add_subscription(node, recipient, recipient);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   291
		resend_last_item(recipient, node, service);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   292
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   293
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   294
	if nodes == empty_set or nodes:empty() then
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   295
		nodes = nil;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   296
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   297
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   298
	service_recipients[recipient] = nodes;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   299
end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   300
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   301
module:hook("presence/bare", function(event)
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   302
	-- inbound presence to bare JID recieved
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   303
	local origin, stanza = event.origin, event.stanza;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   304
	local t = stanza.attr.type;
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   305
	local is_self = not stanza.attr.to;
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   306
	local username = jid_split(stanza.attr.to);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   307
	local user_bare = jid_bare(stanza.attr.to);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   308
	if is_self then
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   309
		username = origin.username;
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   310
		user_bare = jid_join(username, host);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   311
	end
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   312
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   313
	if not t then -- available presence
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   314
		if is_self or subscription_presence(username, stanza.attr.from) then
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   315
			local recipient = stanza.attr.from;
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   316
			local current = recipients[username] and recipients[username][recipient];
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   317
			local hash, query_node = get_caps_hash_from_presence(stanza, current);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   318
			if current == hash or (current and current == hash_map[hash]) then return; end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   319
			if not hash then
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   320
				update_subscriptions(recipient, username);
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   321
			else
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   322
				recipients[username] = recipients[username] or {};
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   323
				if hash_map[hash] then
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   324
					update_subscriptions(recipient, username, hash_map[hash]);
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   325
				else
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   326
					recipients[username][recipient] = hash;
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   327
					local from_bare = origin.type == "c2s" and origin.username.."@"..origin.host;
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   328
					if is_self or origin.type ~= "c2s" or (recipients[from_bare] and recipients[from_bare][origin.full_jid]) ~= hash then
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   329
						-- COMPAT from ~= stanza.attr.to because OneTeam can't deal with missing from attribute
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   330
						origin.send(
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   331
							st.stanza("iq", {from=user_bare, to=stanza.attr.from, id="disco", type="get"})
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   332
								:tag("query", {xmlns = "http://jabber.org/protocol/disco#info", node = query_node})
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   333
						);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   334
					end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   335
				end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   336
			end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   337
		end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   338
	elseif t == "unavailable" then
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   339
		update_subscriptions(stanza.attr.from, username);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   340
	elseif not is_self and t == "unsubscribe" then
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   341
		local from = jid_bare(stanza.attr.from);
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   342
		local subscriptions = recipients[username];
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   343
		if subscriptions then
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   344
			for subscriber in pairs(subscriptions) do
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   345
				if jid_bare(subscriber) == from then
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   346
					update_subscriptions(subscriber, username);
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   347
				end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   348
			end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   349
		end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   350
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   351
end, 10);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   352
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   353
module:hook("iq-result/bare/disco", function(event)
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   354
	local origin, stanza = event.origin, event.stanza;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   355
	local disco = stanza:get_child("query", "http://jabber.org/protocol/disco#info");
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   356
	if not disco then
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   357
		return;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   358
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   359
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   360
	-- Process disco response
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   361
	local is_self = stanza.attr.to == nil;
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   362
	local user_bare = jid_bare(stanza.attr.to);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   363
	local username = jid_split(stanza.attr.to);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   364
	if is_self then
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   365
		username = origin.username;
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   366
		user_bare = jid_join(username, host);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   367
	end
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   368
	local contact = stanza.attr.from;
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   369
	local current = recipients[username] and recipients[username][contact];
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   370
	if type(current) ~= "string" then return; end -- check if waiting for recipient's response
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   371
	local ver = current;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   372
	if not string.find(current, "#") then
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   373
		ver = calculate_hash(disco.tags); -- calculate hash
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   374
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   375
	local notify = set_new();
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   376
	for _, feature in pairs(disco.tags) do
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   377
		if feature.name == "feature" and feature.attr.var then
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   378
			local nfeature = feature.attr.var:match("^(.*)%+notify$");
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   379
			if nfeature then notify:add(nfeature); end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   380
		end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   381
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   382
	hash_map[ver] = notify; -- update hash map
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   383
	if is_self then
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   384
		-- Optimization: Fiddle with other local users
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   385
		for jid, item in pairs(origin.roster) do -- for all interested contacts
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   386
			if jid then
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   387
				local contact_node, contact_host = jid_split(jid);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   388
				if contact_host == host and item.subscription == "both" or item.subscription == "from" then
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   389
					update_subscriptions(user_bare, contact_node, notify);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   390
				end
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   391
			end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   392
		end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   393
	end
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   394
	update_subscriptions(contact, username, notify);
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   395
end);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   396
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   397
module:hook("account-disco-info-node", function(event)
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   398
	local reply, stanza, origin = event.reply, event.stanza, event.origin;
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   399
	local service_name = origin.username;
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   400
	if stanza.attr.to ~= nil then
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   401
		service_name = jid_split(stanza.attr.to);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   402
	end
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   403
	local service = get_pep_service(service_name);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   404
	local node = event.node;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   405
	local ok = service:get_items(node, jid_bare(stanza.attr.from) or true);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   406
	if not ok then return; end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   407
	event.exists = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   408
	reply:tag('identity', {category='pubsub', type='leaf'}):up();
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   409
end);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   410
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   411
module:hook("account-disco-info", function(event)
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   412
	local origin, reply = event.origin, event.reply;
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   413
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   414
	reply:tag('identity', {category='pubsub', type='pep'}):up();
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   415
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   416
	local username = jid_split(reply.attr.from) or origin.username;
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   417
	local service = get_pep_service(username);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   418
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   419
	local suppored_features = lib_pubsub.get_feature_set(service) + set.new{
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   420
		-- Features not covered by the above
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   421
		"access-presence",
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   422
		"auto-subscribe",
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   423
		"filtered-notifications",
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   424
		"last-published",
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   425
		"persistent-items",
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   426
		"presence-notifications",
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   427
		"presence-subscribe",
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   428
	};
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   429
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   430
	for feature in suppored_features do
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   431
		reply:tag('feature', {var=xmlns_pubsub.."#"..feature}):up();
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   432
	end
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   433
end);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   434
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   435
module:hook("account-disco-items-node", function(event)
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   436
	local reply, stanza, origin = event.reply, event.stanza, event.origin;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   437
	local node = event.node;
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   438
	local is_self = stanza.attr.to == nil;
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   439
	local user_bare = jid_bare(stanza.attr.to);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   440
	local username = jid_split(stanza.attr.to);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   441
	if is_self then
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   442
		username = origin.username;
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   443
		user_bare = jid_join(username, host);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   444
	end
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   445
	local service = get_pep_service(username);
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   446
	local ok, ret = service:get_items(node, jid_bare(stanza.attr.from) or true);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   447
	if not ok then return; end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   448
	event.exists = true;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   449
	for _, id in ipairs(ret) do
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   450
		reply:tag("item", { jid = user_bare, name = id }):up();
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   451
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   452
end);
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   453
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   454
module:hook("account-disco-items", function(event)
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   455
	local reply, stanza, origin = event.reply, event.stanza, event.origin;
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   456
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   457
	local is_self = stanza.attr.to == nil;
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   458
	local user_bare = jid_bare(stanza.attr.to);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   459
	local username = jid_split(stanza.attr.to);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   460
	if is_self then
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   461
		username = origin.username;
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   462
		user_bare = jid_join(username, host);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   463
	end
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   464
	local service = get_pep_service(username);
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   465
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   466
	local ok, ret = service:get_nodes(jid_bare(stanza.attr.from));
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   467
	if not ok then return; end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   468
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   469
	for node, node_obj in pairs(ret) do
2805
cb2342cf3f3c mod_pep_plus: Snapshot from Prosody trunk 910d3c3f60a6 including dependencies
Kim Alvefur <zash@zash.se>
parents: 2672
diff changeset
   470
		reply:tag("item", { jid = user_bare, node = node, name = node_obj.config.name }):up();
2672
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   471
	end
f8fc79b3051a mod_pep_plus: Import from Prosody trunk ae3c5abb3336
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   472
end);