plugins/mod_groups.lua
author Jonas Schäfer <jonas@wielicki.name>
Mon, 10 Jan 2022 18:23:54 +0100
branch0.11
changeset 12185 783056b4e448
parent 8995 972b6f793ff9
child 10115 0f335815244f
permissions -rw-r--r--
util.xml: Do not allow doctypes, comments or processing instructions Yes. This is as bad as it sounds. CVE pending. In Prosody itself, this only affects mod_websocket, which uses util.xml to parse the <open/> frame, thus allowing unauthenticated remote DoS using Billion Laughs. However, third-party modules using util.xml may also be affected by this. This commit installs handlers which disallow the use of doctype declarations and processing instructions without any escape hatch. It, by default, also introduces such a handler for comments, however, there is a way to enable comments nontheless. This is because util.xml is used to parse human-facing data, where comments are generally a desirable feature, and also because comments are generally harmless.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1522
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1388
diff changeset
     1
-- Prosody IM
2923
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
     2
-- Copyright (C) 2008-2010 Matthew Wild
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
     3
-- Copyright (C) 2008-2010 Waqas Hussain
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5747
diff changeset
     4
--
1522
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1388
diff changeset
     5
-- This project is MIT/X11 licensed. Please see the
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1388
diff changeset
     6
-- COPYING file in the source package for more information.
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1388
diff changeset
     7
--
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1388
diff changeset
     8
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
     9
2910
6706a02df271 mod_groups: Only create group lists when necessary (now we can reliably detect when a user is in /any/ group, including public ones)
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
    10
local groups;
6706a02df271 mod_groups: Only create group lists when necessary (now we can reliably detect when a user is in /any/ group, including public ones)
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
    11
local members;
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    12
8992
5a25c5d22fe5 mod_groups: Adjust imports to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7132
diff changeset
    13
local datamanager = require "util.datamanager";
5a25c5d22fe5 mod_groups: Adjust imports to avoid name clash [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7132
diff changeset
    14
local jid_prep = require "util.jid".prep;
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    15
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    16
local module_host = module:get_host();
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    17
5747
23076ee191d3 rostermanager, mod_groups: Change roster-load event to pass an event table for consistency
Matthew Wild <mwild1@gmail.com>
parents: 5418
diff changeset
    18
function inject_roster_contacts(event)
23076ee191d3 rostermanager, mod_groups: Change roster-load event to pass an event table for consistency
Matthew Wild <mwild1@gmail.com>
parents: 5418
diff changeset
    19
	local username, host= event.username, event.host;
3054
05b45b1281aa mod_groups: Remove potentially verbose per-contact logging (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
    20
	--module:log("debug", "Injecting group members to roster");
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    21
	local bare_jid = username.."@"..host;
2910
6706a02df271 mod_groups: Only create group lists when necessary (now we can reliably detect when a user is in /any/ group, including public ones)
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
    22
	if not members[bare_jid] and not members[false] then return; end -- Not a member of any groups
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5747
diff changeset
    23
5747
23076ee191d3 rostermanager, mod_groups: Change roster-load event to pass an event table for consistency
Matthew Wild <mwild1@gmail.com>
parents: 5418
diff changeset
    24
	local roster = event.roster;
1388
546caa44620c mod_groups: Support for public groups, and extra logging
Matthew Wild <mwild1@gmail.com>
parents: 1383
diff changeset
    25
	local function import_jids_to_roster(group_name)
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    26
		for jid in pairs(groups[group_name]) do
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    27
			-- Add them to roster
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    28
			--module:log("debug", "processing jid %s in group %s", tostring(jid), tostring(group_name));
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    29
			if jid ~= bare_jid then
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    30
				if not roster[jid] then roster[jid] = {}; end
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    31
				roster[jid].subscription = "both";
3168
20c851616ade Add the ability to have names in group files, by putting them with an = sign after the jid:
Jeff Mitchell <jeff@jefferai.org>
parents: 3125
diff changeset
    32
				if groups[group_name][jid] then
20c851616ade Add the ability to have names in group files, by putting them with an = sign after the jid:
Jeff Mitchell <jeff@jefferai.org>
parents: 3125
diff changeset
    33
					roster[jid].name = groups[group_name][jid];
20c851616ade Add the ability to have names in group files, by putting them with an = sign after the jid:
Jeff Mitchell <jeff@jefferai.org>
parents: 3125
diff changeset
    34
				end
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    35
				if not roster[jid].groups then
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    36
					roster[jid].groups = { [group_name] = true };
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    37
				end
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    38
				roster[jid].groups[group_name] = true;
4315
51706d2b9f77 Backout bcdff2b1d3ec from 0.8 - going to commit a slightly cleaner patch for the same issue to trunk
Matthew Wild <mwild1@gmail.com>
parents: 4312
diff changeset
    39
				roster[jid].persist = false;
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    40
			end
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    41
		end
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    42
	end
1388
546caa44620c mod_groups: Support for public groups, and extra logging
Matthew Wild <mwild1@gmail.com>
parents: 1383
diff changeset
    43
546caa44620c mod_groups: Support for public groups, and extra logging
Matthew Wild <mwild1@gmail.com>
parents: 1383
diff changeset
    44
	-- Find groups this JID is a member of
2910
6706a02df271 mod_groups: Only create group lists when necessary (now we can reliably detect when a user is in /any/ group, including public ones)
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
    45
	if members[bare_jid] then
6706a02df271 mod_groups: Only create group lists when necessary (now we can reliably detect when a user is in /any/ group, including public ones)
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
    46
		for _, group_name in ipairs(members[bare_jid]) do
3054
05b45b1281aa mod_groups: Remove potentially verbose per-contact logging (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
    47
			--module:log("debug", "Importing group %s", group_name);
2910
6706a02df271 mod_groups: Only create group lists when necessary (now we can reliably detect when a user is in /any/ group, including public ones)
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
    48
			import_jids_to_roster(group_name);
6706a02df271 mod_groups: Only create group lists when necessary (now we can reliably detect when a user is in /any/ group, including public ones)
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
    49
		end
1388
546caa44620c mod_groups: Support for public groups, and extra logging
Matthew Wild <mwild1@gmail.com>
parents: 1383
diff changeset
    50
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5747
diff changeset
    51
1388
546caa44620c mod_groups: Support for public groups, and extra logging
Matthew Wild <mwild1@gmail.com>
parents: 1383
diff changeset
    52
	-- Import public groups
2910
6706a02df271 mod_groups: Only create group lists when necessary (now we can reliably detect when a user is in /any/ group, including public ones)
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
    53
	if members[false] then
6706a02df271 mod_groups: Only create group lists when necessary (now we can reliably detect when a user is in /any/ group, including public ones)
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
    54
		for _, group_name in ipairs(members[false]) do
3054
05b45b1281aa mod_groups: Remove potentially verbose per-contact logging (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents: 2925
diff changeset
    55
			--module:log("debug", "Importing group %s", group_name);
2910
6706a02df271 mod_groups: Only create group lists when necessary (now we can reliably detect when a user is in /any/ group, including public ones)
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
    56
			import_jids_to_roster(group_name);
6706a02df271 mod_groups: Only create group lists when necessary (now we can reliably detect when a user is in /any/ group, including public ones)
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
    57
		end
1388
546caa44620c mod_groups: Support for public groups, and extra logging
Matthew Wild <mwild1@gmail.com>
parents: 1383
diff changeset
    58
	end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5747
diff changeset
    59
2912
f5a5317f3485 mod_groups: Fixes to make compatible with roster versioning - set version to 'true' to indicate that the roster is not being versioned
Matthew Wild <mwild1@gmail.com>
parents: 2911
diff changeset
    60
	if roster[false] then
f5a5317f3485 mod_groups: Fixes to make compatible with roster versioning - set version to 'true' to indicate that the roster is not being versioned
Matthew Wild <mwild1@gmail.com>
parents: 2911
diff changeset
    61
		roster[false].version = true;
1388
546caa44620c mod_groups: Support for public groups, and extra logging
Matthew Wild <mwild1@gmail.com>
parents: 1383
diff changeset
    62
	end
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    63
end
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    64
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    65
function remove_virtual_contacts(username, host, datastore, data)
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    66
	if host == module_host and datastore == "roster" then
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    67
		local new_roster = {};
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    68
		for jid, contact in pairs(data) do
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    69
			if contact.persist ~= false then
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    70
				new_roster[jid] = contact;
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    71
			end
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    72
		end
3125
f2d1079a758d mod_groups: Check for existence of roster[false] before clearing version (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents: 3054
diff changeset
    73
		if new_roster[false] then
f2d1079a758d mod_groups: Check for existence of roster[false] before clearing version (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents: 3054
diff changeset
    74
			new_roster[false].version = nil; -- Version is void
f2d1079a758d mod_groups: Check for existence of roster[false] before clearing version (thanks Flo)
Matthew Wild <mwild1@gmail.com>
parents: 3054
diff changeset
    75
		end
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    76
		return username, host, datastore, new_roster;
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    77
	end
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    78
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    79
	return username, host, datastore, data;
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    80
end
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    81
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    82
function module.load()
7132
e4c886946ecb mod_groups: Move variable to smaller scope
Kim Alvefur <zash@zash.se>
parents: 7131
diff changeset
    83
	local groups_file = module:get_option_path("groups_file", nil, "config");
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    84
	if not groups_file then return; end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5747
diff changeset
    85
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    86
	module:hook("roster-load", inject_roster_contacts);
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    87
	datamanager.add_callback(remove_virtual_contacts);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5747
diff changeset
    88
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    89
	groups = { default = {} };
2911
30895e419e92 mod_groups: Missed hunk from last commit, don't create the list of public group members unless necessary
Matthew Wild <mwild1@gmail.com>
parents: 2910
diff changeset
    90
	members = { };
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    91
	local curr_group = "default";
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    92
	for line in io.lines(groups_file) do
1388
546caa44620c mod_groups: Support for public groups, and extra logging
Matthew Wild <mwild1@gmail.com>
parents: 1383
diff changeset
    93
		if line:match("^%s*%[.-%]%s*$") then
546caa44620c mod_groups: Support for public groups, and extra logging
Matthew Wild <mwild1@gmail.com>
parents: 1383
diff changeset
    94
			curr_group = line:match("^%s*%[(.-)%]%s*$");
546caa44620c mod_groups: Support for public groups, and extra logging
Matthew Wild <mwild1@gmail.com>
parents: 1383
diff changeset
    95
			if curr_group:match("^%+") then
546caa44620c mod_groups: Support for public groups, and extra logging
Matthew Wild <mwild1@gmail.com>
parents: 1383
diff changeset
    96
				curr_group = curr_group:gsub("^%+", "");
2910
6706a02df271 mod_groups: Only create group lists when necessary (now we can reliably detect when a user is in /any/ group, including public ones)
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
    97
				if not members[false] then
6706a02df271 mod_groups: Only create group lists when necessary (now we can reliably detect when a user is in /any/ group, including public ones)
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
    98
					members[false] = {};
6706a02df271 mod_groups: Only create group lists when necessary (now we can reliably detect when a user is in /any/ group, including public ones)
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
    99
				end
1388
546caa44620c mod_groups: Support for public groups, and extra logging
Matthew Wild <mwild1@gmail.com>
parents: 1383
diff changeset
   100
				members[false][#members[false]+1] = curr_group; -- Is a public group
546caa44620c mod_groups: Support for public groups, and extra logging
Matthew Wild <mwild1@gmail.com>
parents: 1383
diff changeset
   101
			end
546caa44620c mod_groups: Support for public groups, and extra logging
Matthew Wild <mwild1@gmail.com>
parents: 1383
diff changeset
   102
			module:log("debug", "New group: %s", tostring(curr_group));
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   103
			groups[curr_group] = groups[curr_group] or {};
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   104
		else
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   105
			-- Add JID
3168
20c851616ade Add the ability to have names in group files, by putting them with an = sign after the jid:
Jeff Mitchell <jeff@jefferai.org>
parents: 3125
diff changeset
   106
			local entryjid, name = line:match("([^=]*)=?(.*)");
20c851616ade Add the ability to have names in group files, by putting them with an = sign after the jid:
Jeff Mitchell <jeff@jefferai.org>
parents: 3125
diff changeset
   107
			module:log("debug", "entryjid = '%s', name = '%s'", entryjid, name);
20c851616ade Add the ability to have names in group files, by putting them with an = sign after the jid:
Jeff Mitchell <jeff@jefferai.org>
parents: 3125
diff changeset
   108
			local jid;
20c851616ade Add the ability to have names in group files, by putting them with an = sign after the jid:
Jeff Mitchell <jeff@jefferai.org>
parents: 3125
diff changeset
   109
			jid = jid_prep(entryjid:match("%S+"));
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   110
			if jid then
1388
546caa44620c mod_groups: Support for public groups, and extra logging
Matthew Wild <mwild1@gmail.com>
parents: 1383
diff changeset
   111
				module:log("debug", "New member of %s: %s", tostring(curr_group), tostring(jid));
3168
20c851616ade Add the ability to have names in group files, by putting them with an = sign after the jid:
Jeff Mitchell <jeff@jefferai.org>
parents: 3125
diff changeset
   112
				groups[curr_group][jid] = name or false;
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   113
				members[jid] = members[jid] or {};
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   114
				members[jid][#members[jid]+1] = curr_group;
8994
37ebcc7c6768 mod_groups: Log a warning about invalid JIDs (#1180)
Kim Alvefur <zash@zash.se>
parents: 7132
diff changeset
   115
			elseif entryjid:match("%S") then
37ebcc7c6768 mod_groups: Log a warning about invalid JIDs (#1180)
Kim Alvefur <zash@zash.se>
parents: 7132
diff changeset
   116
				module:log("warn", "Invalid JID: %q", entryjid);
1383
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   117
			end
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   118
		end
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   119
	end
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   120
	module:log("info", "Groups loaded successfully");
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   121
end
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   122
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   123
function module.unload()
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   124
	datamanager.remove_callback(remove_virtual_contacts);
8774c5cbf147 mod_groups: Experimental shared roster support
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   125
end
5417
d13ec6622752 mod_groups: Add a public function other modules can use to determine if a JID belongs to a given group
Matthew Wild <mwild1@gmail.com>
parents: 5373
diff changeset
   126
d13ec6622752 mod_groups: Add a public function other modules can use to determine if a JID belongs to a given group
Matthew Wild <mwild1@gmail.com>
parents: 5373
diff changeset
   127
-- Public for other modules to access
d13ec6622752 mod_groups: Add a public function other modules can use to determine if a JID belongs to a given group
Matthew Wild <mwild1@gmail.com>
parents: 5373
diff changeset
   128
function group_contains(group_name, jid)
d13ec6622752 mod_groups: Add a public function other modules can use to determine if a JID belongs to a given group
Matthew Wild <mwild1@gmail.com>
parents: 5373
diff changeset
   129
	return groups[group_name][jid];
d13ec6622752 mod_groups: Add a public function other modules can use to determine if a JID belongs to a given group
Matthew Wild <mwild1@gmail.com>
parents: 5373
diff changeset
   130
end