Software / code / prosody
Annotate
plugins/mod_groups.lua @ 13801:a5d5fefb8b68 13.0
mod_tls: Enable Prosody's certificate checking for incoming s2s connections (fixes #1916) (thanks Damian, Zash)
Various options in Prosody allow control over the behaviour of the certificate
verification process For example, some deployments choose to allow falling
back to traditional "dialback" authentication (XEP-0220), while others verify
via DANE, hard-coded fingerprints, or other custom plugins.
Implementing this flexibility requires us to override OpenSSL's default
certificate verification, to allow Prosody to verify the certificate itself,
apply custom policies and make decisions based on the outcome.
To enable our custom logic, we have to suppress OpenSSL's default behaviour of
aborting the connection with a TLS alert message. With LuaSec, this can be
achieved by using the verifyext "lsec_continue" flag.
We also need to use the lsec_ignore_purpose flag, because XMPP s2s uses server
certificates as "client" certificates (for mutual TLS verification in outgoing
s2s connections).
Commit 99d2100d2918 moved these settings out of the defaults and into mod_s2s,
because we only really need these changes for s2s, and they should be opt-in,
rather than automatically applied to all TLS services we offer.
That commit was incomplete, because it only added the flags for incoming
direct TLS connections. StartTLS connections are handled by mod_tls, which was
not applying the lsec_* flags. It previously worked because they were already
in the defaults.
This resulted in incoming s2s connections with "invalid" certificates being
aborted early by OpenSSL, even if settings such as `s2s_secure_auth = false`
or DANE were present in the config.
Outgoing s2s connections inherit verify "none" from the defaults, which means
OpenSSL will receive the cert but will not terminate the connection when it is
deemed invalid. This means we don't need lsec_continue there, and we also
don't need lsec_ignore_purpose (because the remote peer is a "server").
Wondering why we can't just use verify "none" for incoming s2s? It's because
in that mode, OpenSSL won't request a certificate from the peer for incoming
connections. Setting verify "peer" is how you ask OpenSSL to request a
certificate from the client, but also what triggers its built-in verification.
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Tue, 01 Apr 2025 17:26:56 +0100 |
| parent | 12977:74b9e05af71e |
| rev | line source |
|---|---|
|
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 |
|
12977
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
10111
diff
changeset
|
13 local datamanager = require "prosody.util.datamanager"; |
|
74b9e05af71e
plugins: Prefix module imports with prosody namespace
Kim Alvefur <zash@zash.se>
parents:
10111
diff
changeset
|
14 local jid_prep = require "prosody.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 |
|
10111
0f335815244f
plugins: Remove tostring call from logging
Kim Alvefur <zash@zash.se>
parents:
8992
diff
changeset
|
28 --module:log("debug", "processing jid %s in group %s", jid, group_name); |
|
1383
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() |
|
7129
e4c886946ecb
mod_groups: Move variable to smaller scope
Kim Alvefur <zash@zash.se>
parents:
7128
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 |
|
10111
0f335815244f
plugins: Remove tostring call from logging
Kim Alvefur <zash@zash.se>
parents:
8992
diff
changeset
|
102 module:log("debug", "New group: %s", 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 |
|
10111
0f335815244f
plugins: Remove tostring call from logging
Kim Alvefur <zash@zash.se>
parents:
8992
diff
changeset
|
111 module:log("debug", "New member of %s: %s", curr_group, 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; |
|
8991
37ebcc7c6768
mod_groups: Log a warning about invalid JIDs (#1180)
Kim Alvefur <zash@zash.se>
parents:
7129
diff
changeset
|
115 elseif entryjid:match("%S") then |
|
37ebcc7c6768
mod_groups: Log a warning about invalid JIDs (#1180)
Kim Alvefur <zash@zash.se>
parents:
7129
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 |