mod_groups_internal/mod_groups_internal.lua
author Jonas Schäfer <jonas@wielicki.name>
Sun, 31 Jan 2021 16:09:14 +0100
changeset 4423 1185acb2ab91
parent 4422 8c31d4b872c3
child 4427 ca821df93cb9
permissions -rw-r--r--
mod_groups_internal: handle empty groups correctly Otherwise, this causes a traceback when syncing the group.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     1
local rostermanager = require"core.rostermanager";
4392
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
     2
local modulemanager = require"core.modulemanager";
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     3
local id = require "util.id";
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     4
local jid = require "util.jid";
4403
846b7af5588c mod_groups_internal: send invite to new members of groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4396
diff changeset
     5
local st = require "util.stanza";
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     6
local jid_join = jid.join;
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     7
local host = module.host;
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     8
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     9
local group_info_store = module:open_store("group_info");
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    10
local group_members_store = module:open_store("groups");
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    11
local group_memberships = module:open_store("groups", "map");
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    12
4396
e5792ca1d704 mod_groups_internal: fix default value and handling of groups_muc_host
Jonas Schäfer <jonas@wielicki.name>
parents: 4393
diff changeset
    13
local muc_host_name = module:get_option("groups_muc_host", "groups."..host);
4392
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
    14
local muc_host = nil;
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
    15
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    16
local is_contact_subscribed = rostermanager.is_contact_subscribed;
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    17
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    18
-- Make a *one-way* subscription. User will see when contact is online,
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    19
-- contact will not see when user is online.
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    20
local function subscribe(user, user_jid, contact, contact_jid)
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    21
	-- Update user's roster to say subscription request is pending...
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    22
	rostermanager.set_contact_pending_out(user, host, contact_jid);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    23
	-- Update contact's roster to say subscription request is pending...
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    24
	rostermanager.set_contact_pending_in(contact, host, user_jid);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    25
	-- Update contact's roster to say subscription request approved...
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    26
	rostermanager.subscribed(contact, host, user_jid);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    27
	-- Update user's roster to say subscription request approved...
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    28
	rostermanager.process_inbound_subscription_approval(user, host, contact_jid);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    29
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    30
	-- Push updates to both rosters
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    31
	rostermanager.roster_push(user, host, contact_jid);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    32
	rostermanager.roster_push(contact, host, user_jid);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    33
end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    34
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    35
local function user_groups(username)
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    36
	return pairs(group_memberships:get_all(username) or {});
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    37
end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    38
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    39
local function do_single_group_subscriptions(username, group_id)
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    40
	local members = group_members_store:get(group_id);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    41
	if not members then return; end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    42
	local user_jid = jid_join(username, host);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    43
	for membername in pairs(members) do
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    44
		if membername ~= username then
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    45
			local member_jid = jid_join(membername, host);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    46
			if not is_contact_subscribed(username, host, member_jid) then
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    47
				module:log("debug", "[group %s] Subscribing %s to %s", member_jid, user_jid);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    48
				subscribe(membername, member_jid, username, user_jid);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    49
			end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    50
			if not is_contact_subscribed(membername, host, user_jid) then
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    51
				module:log("debug", "[group %s] Subscribing %s to %s", user_jid, member_jid);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    52
				subscribe(username, user_jid, membername, member_jid);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    53
			end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    54
		end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    55
	end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    56
end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    57
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    58
local function do_all_group_subscriptions_by_user(username)
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    59
	for group_id in user_groups(username) do
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    60
		do_single_group_subscriptions(username, group_id);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    61
	end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    62
end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    63
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    64
local function do_all_group_subscriptions_by_group(group_id)
4423
1185acb2ab91 mod_groups_internal: handle empty groups correctly
Jonas Schäfer <jonas@wielicki.name>
parents: 4422
diff changeset
    65
	local members = get_members(group_id)
1185acb2ab91 mod_groups_internal: handle empty groups correctly
Jonas Schäfer <jonas@wielicki.name>
parents: 4422
diff changeset
    66
	if not members then
1185acb2ab91 mod_groups_internal: handle empty groups correctly
Jonas Schäfer <jonas@wielicki.name>
parents: 4422
diff changeset
    67
		return
1185acb2ab91 mod_groups_internal: handle empty groups correctly
Jonas Schäfer <jonas@wielicki.name>
parents: 4422
diff changeset
    68
	end
1185acb2ab91 mod_groups_internal: handle empty groups correctly
Jonas Schäfer <jonas@wielicki.name>
parents: 4422
diff changeset
    69
	for membername in pairs(members) do
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    70
		do_single_group_subscriptions(membername, group_id);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    71
	end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    72
end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    73
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    74
module:hook("resource-bind", function(event)
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    75
	module:log("debug", "Updating group subscriptions...");
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    76
	do_all_group_subscriptions_by_user(event.session.username);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    77
end);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    78
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    79
--luacheck: ignore 131
4389
dfb34cc97028 mod_groups_internal: allow specifying a group_id on create
Jonas Schäfer <jonas@wielicki.name>
parents: 4387
diff changeset
    80
function create(group_info, create_muc, group_id)
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    81
	if not group_info.name then
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    82
		return nil, "group-name-required";
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    83
	end
4389
dfb34cc97028 mod_groups_internal: allow specifying a group_id on create
Jonas Schäfer <jonas@wielicki.name>
parents: 4387
diff changeset
    84
	if group_id then
dfb34cc97028 mod_groups_internal: allow specifying a group_id on create
Jonas Schäfer <jonas@wielicki.name>
parents: 4387
diff changeset
    85
		if exists(group_id) then
dfb34cc97028 mod_groups_internal: allow specifying a group_id on create
Jonas Schäfer <jonas@wielicki.name>
parents: 4387
diff changeset
    86
			return nil, "conflict"
dfb34cc97028 mod_groups_internal: allow specifying a group_id on create
Jonas Schäfer <jonas@wielicki.name>
parents: 4387
diff changeset
    87
		end
dfb34cc97028 mod_groups_internal: allow specifying a group_id on create
Jonas Schäfer <jonas@wielicki.name>
parents: 4387
diff changeset
    88
	else
dfb34cc97028 mod_groups_internal: allow specifying a group_id on create
Jonas Schäfer <jonas@wielicki.name>
parents: 4387
diff changeset
    89
		group_id = id.short();
dfb34cc97028 mod_groups_internal: allow specifying a group_id on create
Jonas Schäfer <jonas@wielicki.name>
parents: 4387
diff changeset
    90
	end
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    91
4392
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
    92
	local muc_jid = nil
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
    93
	local room = nil
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    94
	if create_muc then
4392
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
    95
		if not muc_host_name then
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
    96
			module:log("error", "cannot create group with MUC: no MUC host configured")
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
    97
			return nil, "service-unavailable"
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
    98
		end
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
    99
		if not muc_host then
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   100
			module:log("error", "cannot create group with MUC: MUC host %s not configured properly", muc_host_name)
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   101
			return nil, "internal-server-error"
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   102
		end
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   103
4407
31470a256851 mod_groups_internal: Prep MUC JID before exposing/storing it (just in case)
Matthew Wild <mwild1@gmail.com>
parents: 4403
diff changeset
   104
		muc_jid = jid.prep(id.short() .. "@" .. muc_host_name);
4392
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   105
		room = muc_host.create_room(muc_jid)
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   106
		if not room then
4409
76d045f76f65 mod_groups_internal: Fix incorrect function name
Matthew Wild <mwild1@gmail.com>
parents: 4408
diff changeset
   107
			delete(group_id)
4392
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   108
			return nil, "internal-server-error"
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   109
		end
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   110
		room:set_public(false)
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   111
		room:set_persistent(true)
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   112
		room:set_members_only(true)
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   113
		room:set_allow_member_invites(false)
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   114
		room:set_moderated(false)
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   115
		room:set_whois("anyone")
4419
c7424b96c75e mod_groups_internal: maintain the name of the associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4411
diff changeset
   116
		room:set_name(group_info.name)
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   117
	end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   118
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   119
	local ok = group_info_store:set(group_id, {
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   120
		name = group_info.name;
4392
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   121
		muc_jid = muc_jid;
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   122
	});
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   123
	if not ok then
4392
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   124
		if room then
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   125
			muc_host:delete_room(room)
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   126
		end
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   127
		return nil, "internal-server-error";
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   128
	end
4392
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   129
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   130
	return group_id;
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   131
end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   132
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   133
function get_info(group_id)
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   134
	return group_info_store:get(group_id);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   135
end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   136
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   137
function set_info(group_id, info)
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   138
	if not info then
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   139
		return nil, "bad-request"
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   140
	end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   141
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   142
	if not info.name or #info.name == 0 then
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   143
		return nil, "bad-request"
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   144
	end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   145
4419
c7424b96c75e mod_groups_internal: maintain the name of the associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4411
diff changeset
   146
	-- TODO: we should probably prohibit changing/removing the MUC JID of
c7424b96c75e mod_groups_internal: maintain the name of the associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4411
diff changeset
   147
	-- an existing group.
c7424b96c75e mod_groups_internal: maintain the name of the associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4411
diff changeset
   148
	if info.muc_jid then
c7424b96c75e mod_groups_internal: maintain the name of the associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4411
diff changeset
   149
		room = muc_host.get_room_from_jid(info.muc_jid);
c7424b96c75e mod_groups_internal: maintain the name of the associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4411
diff changeset
   150
		room:set_name(info.name);
c7424b96c75e mod_groups_internal: maintain the name of the associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4411
diff changeset
   151
	end
c7424b96c75e mod_groups_internal: maintain the name of the associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4411
diff changeset
   152
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   153
	local ok = group_info_store:set(group_id, info);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   154
	if not ok then
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   155
		return nil, "internal-server-error";
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   156
	end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   157
	return true
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   158
end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   159
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   160
function get_members(group_id)
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   161
	return group_members_store:get(group_id);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   162
end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   163
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   164
function exists(group_id)
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   165
	return not not get_info(group_id);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   166
end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   167
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   168
function get_user_groups(username)
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   169
	local groups = {};
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   170
	do
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   171
		local group_set = group_memberships:get_all(username);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   172
		if group_set then
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   173
			for group_id in pairs(group_set) do
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   174
				table.insert(groups, group_id);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   175
			end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   176
		end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   177
	end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   178
	return groups;
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   179
end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   180
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   181
function delete(group_id)
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   182
	if group_members_store:set(group_id, nil) then
4411
105586ca9a79 mod_groups_internal: Style
Matthew Wild <mwild1@gmail.com>
parents: 4410
diff changeset
   183
		local group_info = get_info(group_id);
4410
d86592775a20 mod_groups_internal: Fix unintended global variable (thanks luacheck)
Matthew Wild <mwild1@gmail.com>
parents: 4409
diff changeset
   184
		if group_info and group_info.muc_jid then
4411
105586ca9a79 mod_groups_internal: Style
Matthew Wild <mwild1@gmail.com>
parents: 4410
diff changeset
   185
			muc_host.delete_room(muc_host.get_room_from_jid(group_info.muc_jid));
4393
6cfa313cd524 mod_groups_internal: manage associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4392
diff changeset
   186
		end
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   187
		return group_info_store:set(group_id, nil);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   188
	end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   189
	return nil, "internal-server-error";
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   190
end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   191
4390
6357ac65b4eb mod_groups_internal: allow delay of roster sync on group change
Jonas Schäfer <jonas@wielicki.name>
parents: 4389
diff changeset
   192
function add_member(group_id, username, delay_update)
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   193
	local group_info = group_info_store:get(group_id);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   194
	if not group_info then
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   195
		return nil, "group-not-found";
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   196
	end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   197
	if not group_memberships:set(group_id, username, {}) then
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   198
		return nil, "internal-server-error";
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   199
	end
4393
6cfa313cd524 mod_groups_internal: manage associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4392
diff changeset
   200
	if group_info.muc_jid then
6cfa313cd524 mod_groups_internal: manage associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4392
diff changeset
   201
		local room = muc_host.get_room_from_jid(group_info.muc_jid);
6cfa313cd524 mod_groups_internal: manage associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4392
diff changeset
   202
		if room then
6cfa313cd524 mod_groups_internal: manage associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4392
diff changeset
   203
			local user_jid = username .. "@" .. host;
4411
105586ca9a79 mod_groups_internal: Style
Matthew Wild <mwild1@gmail.com>
parents: 4410
diff changeset
   204
			room:set_affiliation(true, user_jid, "member");
4403
846b7af5588c mod_groups_internal: send invite to new members of groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4396
diff changeset
   205
			module:send(st.message(
846b7af5588c mod_groups_internal: send invite to new members of groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4396
diff changeset
   206
				{ from = group_info.muc_jid, to = user_jid }
846b7af5588c mod_groups_internal: send invite to new members of groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4396
diff changeset
   207
			):tag("x", {
846b7af5588c mod_groups_internal: send invite to new members of groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4396
diff changeset
   208
				xmlns = "jabber:x:conference",
846b7af5588c mod_groups_internal: send invite to new members of groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4396
diff changeset
   209
				jid = group_info.muc_jid
846b7af5588c mod_groups_internal: send invite to new members of groups
Jonas Schäfer <jonas@wielicki.name>
parents: 4396
diff changeset
   210
			}):up());
4411
105586ca9a79 mod_groups_internal: Style
Matthew Wild <mwild1@gmail.com>
parents: 4410
diff changeset
   211
			module:log("debug", "set user %s to be member in %s and sent invite", username, group_info.muc_jid);
4393
6cfa313cd524 mod_groups_internal: manage associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4392
diff changeset
   212
		else
4422
8c31d4b872c3 mod_groups_internal: fix log message not appearing
Jonas Schäfer <jonas@wielicki.name>
parents: 4421
diff changeset
   213
			module:log("warn", "failed to update affiliation for %s in %s", username, group_info.muc_jid);
4393
6cfa313cd524 mod_groups_internal: manage associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4392
diff changeset
   214
		end
6cfa313cd524 mod_groups_internal: manage associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4392
diff changeset
   215
	end
4390
6357ac65b4eb mod_groups_internal: allow delay of roster sync on group change
Jonas Schäfer <jonas@wielicki.name>
parents: 4389
diff changeset
   216
	if not delay_update then
6357ac65b4eb mod_groups_internal: allow delay of roster sync on group change
Jonas Schäfer <jonas@wielicki.name>
parents: 4389
diff changeset
   217
		do_all_group_subscriptions_by_group(group_id);
6357ac65b4eb mod_groups_internal: allow delay of roster sync on group change
Jonas Schäfer <jonas@wielicki.name>
parents: 4389
diff changeset
   218
	end
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   219
	return true;
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   220
end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   221
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   222
function remove_member(group_id, username)
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   223
	local group_info = group_info_store:get(group_id);
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   224
	if not group_info then
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   225
		return nil, "group-not-found";
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   226
	end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   227
	if not group_memberships:set(group_id, username, nil) then
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   228
		return nil, "internal-server-error";
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   229
	end
4393
6cfa313cd524 mod_groups_internal: manage associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4392
diff changeset
   230
	if group_info.muc_jid then
6cfa313cd524 mod_groups_internal: manage associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4392
diff changeset
   231
		local room = muc_host.get_room_from_jid(group_info.muc_jid);
6cfa313cd524 mod_groups_internal: manage associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4392
diff changeset
   232
		if room then
6cfa313cd524 mod_groups_internal: manage associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4392
diff changeset
   233
			local user_jid = username .. "@" .. host;
4411
105586ca9a79 mod_groups_internal: Style
Matthew Wild <mwild1@gmail.com>
parents: 4410
diff changeset
   234
			room:set_affiliation(true, user_jid, nil);
4393
6cfa313cd524 mod_groups_internal: manage associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4392
diff changeset
   235
		else
4422
8c31d4b872c3 mod_groups_internal: fix log message not appearing
Jonas Schäfer <jonas@wielicki.name>
parents: 4421
diff changeset
   236
			module:log("warn", "failed to update affiliation for %s in %s", username, group_info.muc_jid);
4393
6cfa313cd524 mod_groups_internal: manage associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4392
diff changeset
   237
		end
6cfa313cd524 mod_groups_internal: manage associated MUC
Jonas Schäfer <jonas@wielicki.name>
parents: 4392
diff changeset
   238
	end
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   239
	return true;
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   240
end
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   241
4390
6357ac65b4eb mod_groups_internal: allow delay of roster sync on group change
Jonas Schäfer <jonas@wielicki.name>
parents: 4389
diff changeset
   242
function sync(group_id)
4411
105586ca9a79 mod_groups_internal: Style
Matthew Wild <mwild1@gmail.com>
parents: 4410
diff changeset
   243
	do_all_group_subscriptions_by_group(group_id);
4390
6357ac65b4eb mod_groups_internal: allow delay of roster sync on group change
Jonas Schäfer <jonas@wielicki.name>
parents: 4389
diff changeset
   244
end
6357ac65b4eb mod_groups_internal: allow delay of roster sync on group change
Jonas Schäfer <jonas@wielicki.name>
parents: 4389
diff changeset
   245
4387
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   246
-- Returns iterator over group ids
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   247
function groups()
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   248
	return group_info_store:users();
1e7406b85add mod_groups_internal: new module for grouping beyond mod_adhoc_groups
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   249
end
4392
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   250
4421
7e379ccb8ed6 mod_groups_internal: make robust against module reloads
Jonas Schäfer <jonas@wielicki.name>
parents: 4419
diff changeset
   251
local function setup()
4396
e5792ca1d704 mod_groups_internal: fix default value and handling of groups_muc_host
Jonas Schäfer <jonas@wielicki.name>
parents: 4393
diff changeset
   252
	if not muc_host_name then
4411
105586ca9a79 mod_groups_internal: Style
Matthew Wild <mwild1@gmail.com>
parents: 4410
diff changeset
   253
		module:log("info", "MUC management disabled (groups_muc_host set to nil)");
105586ca9a79 mod_groups_internal: Style
Matthew Wild <mwild1@gmail.com>
parents: 4410
diff changeset
   254
		return;
4396
e5792ca1d704 mod_groups_internal: fix default value and handling of groups_muc_host
Jonas Schäfer <jonas@wielicki.name>
parents: 4393
diff changeset
   255
	end
e5792ca1d704 mod_groups_internal: fix default value and handling of groups_muc_host
Jonas Schäfer <jonas@wielicki.name>
parents: 4393
diff changeset
   256
4411
105586ca9a79 mod_groups_internal: Style
Matthew Wild <mwild1@gmail.com>
parents: 4410
diff changeset
   257
	local target_module = modulemanager.get_module(muc_host_name, "muc");
4392
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   258
	if not target_module then
4411
105586ca9a79 mod_groups_internal: Style
Matthew Wild <mwild1@gmail.com>
parents: 4410
diff changeset
   259
		module:log("error", "host %s is not a MUC host -- group management will not work correctly; check your groups_muc_host setting!", muc_host_name);
4392
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   260
	else
4411
105586ca9a79 mod_groups_internal: Style
Matthew Wild <mwild1@gmail.com>
parents: 4410
diff changeset
   261
		module:log("debug", "found MUC host at %s", muc_host_name);
4392
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   262
		muc_host = target_module;
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   263
	end
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   264
end
7de3c955cfe2 mod_groups_internal: allow creating MUCs if a MUC host is linked
Jonas Schäfer <jonas@wielicki.name>
parents: 4390
diff changeset
   265
4421
7e379ccb8ed6 mod_groups_internal: make robust against module reloads
Jonas Schäfer <jonas@wielicki.name>
parents: 4419
diff changeset
   266
if prosody.start_time then  -- server already started
7e379ccb8ed6 mod_groups_internal: make robust against module reloads
Jonas Schäfer <jonas@wielicki.name>
parents: 4419
diff changeset
   267
	setup();
7e379ccb8ed6 mod_groups_internal: make robust against module reloads
Jonas Schäfer <jonas@wielicki.name>
parents: 4419
diff changeset
   268
else
7e379ccb8ed6 mod_groups_internal: make robust against module reloads
Jonas Schäfer <jonas@wielicki.name>
parents: 4419
diff changeset
   269
	module:hook_global("server-started", setup);
7e379ccb8ed6 mod_groups_internal: make robust against module reloads
Jonas Schäfer <jonas@wielicki.name>
parents: 4419
diff changeset
   270
end