Mercurial > prosody-modules
annotate mod_roster_command/mod_roster_command.lua @ 4651:8231774f5bfd
mod_cloud_notify_encrypted: Ensure body substring remains valid UTF-8
The `body:sub()` call risks splitting the string in the middle of a
multi-byte UTF-8 sequence. This should have been caught by util.stanza
validation, but that would have caused some havoc, at the very least causing
the notification to not be sent.
There have been no reports of this happening. Likely because this module
isn't widely deployed among users with languages that use many longer UTF-8
sequences.
The util.encodings.utf8.valid() function is O(n) where only the last
sequence really needs to be checked, but it's in C and expected to be fast.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 22 Aug 2021 13:22:59 +0200 |
parents | f6fdefc5c6ac |
children |
rev | line source |
---|---|
453
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 ----------------------------------------------------------- |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 -- mod_roster_command: Manage rosters through prosodyctl |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 -- version 0.02 |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
4 ----------------------------------------------------------- |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
5 -- Copyright (C) 2011 Matthew Wild |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 -- Copyright (C) 2011 Adam Nielsen |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 -- |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 -- This project is MIT/X11 licensed. Please see the |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 -- COPYING file in the source package for more information. |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
10 ----------------------------------------------------------- |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
11 |
1947
634b42541f5b
mod_roster_command: Attempt to update for compatibility with 0.10
Kim Alvefur <zash@zash.se>
parents:
1946
diff
changeset
|
12 if module.host ~= "*" then |
1946
1f263aaba83e
mod_roster_command: Update link to new docs site
Kim Alvefur <zash@zash.se>
parents:
1565
diff
changeset
|
13 module:log("error", "Do not load this module in Prosody, for correct usage see: https://modules.prosody.im/mod_roster_command.html"); |
492
f806c8a7f985
mod_roster_command: Fix traceback and log error message when loaded into Prosody (thanks epaulin)
Matthew Wild <mwild1@gmail.com>
parents:
453
diff
changeset
|
14 return; |
f806c8a7f985
mod_roster_command: Fix traceback and log error message when loaded into Prosody (thanks epaulin)
Matthew Wild <mwild1@gmail.com>
parents:
453
diff
changeset
|
15 end |
f806c8a7f985
mod_roster_command: Fix traceback and log error message when loaded into Prosody (thanks epaulin)
Matthew Wild <mwild1@gmail.com>
parents:
453
diff
changeset
|
16 |
f806c8a7f985
mod_roster_command: Fix traceback and log error message when loaded into Prosody (thanks epaulin)
Matthew Wild <mwild1@gmail.com>
parents:
453
diff
changeset
|
17 |
453
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
18 -- Workaround for lack of util.startup... |
1948
2748aa8f36e0
mod_roster_command: Update workaround to perhaps work in 0.10
Kim Alvefur <zash@zash.se>
parents:
1947
diff
changeset
|
19 local prosody = _G.prosody; |
2748aa8f36e0
mod_roster_command: Update workaround to perhaps work in 0.10
Kim Alvefur <zash@zash.se>
parents:
1947
diff
changeset
|
20 local hosts = prosody.hosts; |
2748aa8f36e0
mod_roster_command: Update workaround to perhaps work in 0.10
Kim Alvefur <zash@zash.se>
parents:
1947
diff
changeset
|
21 prosody.bare_sessions = prosody.bare_sessions or {}; |
2748aa8f36e0
mod_roster_command: Update workaround to perhaps work in 0.10
Kim Alvefur <zash@zash.se>
parents:
1947
diff
changeset
|
22 _G.bare_sessions = _G.bare_sessions or prosody.bare_sessions; |
453
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 |
1947
634b42541f5b
mod_roster_command: Attempt to update for compatibility with 0.10
Kim Alvefur <zash@zash.se>
parents:
1946
diff
changeset
|
24 local usermanager = require "core.usermanager"; |
453
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 local rostermanager = require "core.rostermanager"; |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 local storagemanager = require "core.storagemanager"; |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
27 local jid = require "util.jid"; |
1947
634b42541f5b
mod_roster_command: Attempt to update for compatibility with 0.10
Kim Alvefur <zash@zash.se>
parents:
1946
diff
changeset
|
28 local warn = require"util.prosodyctl".show_warning; |
453
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 -- Make a *one-way* subscription. User will see when contact is online, |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
31 -- contact will not see when user is online. |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
32 function subscribe(user_jid, contact_jid) |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 local user_username, user_host = jid.split(user_jid); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 local contact_username, contact_host = jid.split(contact_jid); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 if not hosts[user_host] then |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
36 warn("The host '%s' is not configured for this server.", user_host); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
37 return; |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
38 end |
1509
01e37ce7532e
mod_roster_command: Make sure hosts are only initialized once
Kim Alvefur <zash@zash.se>
parents:
1508
diff
changeset
|
39 if hosts[user_host].users.name == "null" then |
01e37ce7532e
mod_roster_command: Make sure hosts are only initialized once
Kim Alvefur <zash@zash.se>
parents:
1508
diff
changeset
|
40 storagemanager.initialize_host(user_host); |
01e37ce7532e
mod_roster_command: Make sure hosts are only initialized once
Kim Alvefur <zash@zash.se>
parents:
1508
diff
changeset
|
41 usermanager.initialize_host(user_host); |
01e37ce7532e
mod_roster_command: Make sure hosts are only initialized once
Kim Alvefur <zash@zash.se>
parents:
1508
diff
changeset
|
42 end |
4326
f6fdefc5c6ac
mod_roster_command: Fix subscription when the "user JID" is a bare domain.
Boris Grozev <boris@jitsi.org>
parents:
1948
diff
changeset
|
43 -- Update user's roster to say subscription request is pending. Bare hosts (e.g. components) don't have rosters. |
f6fdefc5c6ac
mod_roster_command: Fix subscription when the "user JID" is a bare domain.
Boris Grozev <boris@jitsi.org>
parents:
1948
diff
changeset
|
44 if user_username ~= nil then |
f6fdefc5c6ac
mod_roster_command: Fix subscription when the "user JID" is a bare domain.
Boris Grozev <boris@jitsi.org>
parents:
1948
diff
changeset
|
45 rostermanager.set_contact_pending_out(user_username, user_host, contact_jid); |
f6fdefc5c6ac
mod_roster_command: Fix subscription when the "user JID" is a bare domain.
Boris Grozev <boris@jitsi.org>
parents:
1948
diff
changeset
|
46 end |
453
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 if hosts[contact_host] then |
1509
01e37ce7532e
mod_roster_command: Make sure hosts are only initialized once
Kim Alvefur <zash@zash.se>
parents:
1508
diff
changeset
|
48 if contact_host ~= user_host and hosts[contact_host].users.name == "null" then |
453
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 storagemanager.initialize_host(contact_host); |
1508
f7cb287dd3c7
mod_roster_command: Also initialize usermanager
Kim Alvefur <zash@zash.se>
parents:
492
diff
changeset
|
50 usermanager.initialize_host(contact_host); |
453
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
51 end |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
52 -- Update contact's roster to say subscription request is pending... |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
53 rostermanager.set_contact_pending_in(contact_username, contact_host, user_jid); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
54 -- Update contact's roster to say subscription request approved... |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
55 rostermanager.subscribed(contact_username, contact_host, user_jid); |
4326
f6fdefc5c6ac
mod_roster_command: Fix subscription when the "user JID" is a bare domain.
Boris Grozev <boris@jitsi.org>
parents:
1948
diff
changeset
|
56 -- Update user's roster to say subscription request approved. Bare hosts (e.g. components) don't have rosters. |
f6fdefc5c6ac
mod_roster_command: Fix subscription when the "user JID" is a bare domain.
Boris Grozev <boris@jitsi.org>
parents:
1948
diff
changeset
|
57 if user_username ~= nil then |
f6fdefc5c6ac
mod_roster_command: Fix subscription when the "user JID" is a bare domain.
Boris Grozev <boris@jitsi.org>
parents:
1948
diff
changeset
|
58 rostermanager.process_inbound_subscription_approval(user_username, user_host, contact_jid); |
f6fdefc5c6ac
mod_roster_command: Fix subscription when the "user JID" is a bare domain.
Boris Grozev <boris@jitsi.org>
parents:
1948
diff
changeset
|
59 end |
453
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
60 end |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
61 end |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
62 |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
63 -- Make a mutual subscription between jid1 and jid2. Each JID will see |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
64 -- when the other one is online. |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
65 function subscribe_both(jid1, jid2) |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
66 subscribe(jid1, jid2); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
67 subscribe(jid2, jid1); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
68 end |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
69 |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
70 -- Unsubscribes user from contact (not contact from user, if subscribed). |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
71 function unsubscribe(user_jid, contact_jid) |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
72 local user_username, user_host = jid.split(user_jid); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
73 local contact_username, contact_host = jid.split(contact_jid); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
74 if not hosts[user_host] then |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
75 warn("The host '%s' is not configured for this server.", user_host); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
76 return; |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
77 end |
1509
01e37ce7532e
mod_roster_command: Make sure hosts are only initialized once
Kim Alvefur <zash@zash.se>
parents:
1508
diff
changeset
|
78 if hosts[user_host].users.name == "null" then |
01e37ce7532e
mod_roster_command: Make sure hosts are only initialized once
Kim Alvefur <zash@zash.se>
parents:
1508
diff
changeset
|
79 storagemanager.initialize_host(user_host); |
01e37ce7532e
mod_roster_command: Make sure hosts are only initialized once
Kim Alvefur <zash@zash.se>
parents:
1508
diff
changeset
|
80 usermanager.initialize_host(user_host); |
01e37ce7532e
mod_roster_command: Make sure hosts are only initialized once
Kim Alvefur <zash@zash.se>
parents:
1508
diff
changeset
|
81 end |
453
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
82 -- Update user's roster to say subscription is cancelled... |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
83 rostermanager.unsubscribe(user_username, user_host, contact_jid); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
84 if hosts[contact_host] then |
1509
01e37ce7532e
mod_roster_command: Make sure hosts are only initialized once
Kim Alvefur <zash@zash.se>
parents:
1508
diff
changeset
|
85 if contact_host ~= user_host and hosts[contact_host].users.name == "null" then |
453
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
86 storagemanager.initialize_host(contact_host); |
1508
f7cb287dd3c7
mod_roster_command: Also initialize usermanager
Kim Alvefur <zash@zash.se>
parents:
492
diff
changeset
|
87 usermanager.initialize_host(contact_host); |
453
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
88 end |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
89 -- Update contact's roster to say subscription is cancelled... |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
90 rostermanager.unsubscribed(contact_username, contact_host, user_jid); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
91 end |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
92 end |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
93 |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
94 -- Cancel any subscription in either direction. |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
95 function unsubscribe_both(jid1, jid2) |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
96 unsubscribe(jid1, jid2); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
97 unsubscribe(jid2, jid1); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
98 end |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
99 |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
100 -- Set the name shown and group used in the contact list |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
101 function rename(user_jid, contact_jid, contact_nick, contact_group) |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
102 local user_username, user_host = jid.split(user_jid); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
103 if not hosts[user_host] then |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
104 warn("The host '%s' is not configured for this server.", user_host); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
105 return; |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
106 end |
1509
01e37ce7532e
mod_roster_command: Make sure hosts are only initialized once
Kim Alvefur <zash@zash.se>
parents:
1508
diff
changeset
|
107 if hosts[user_host].users.name == "null" then |
01e37ce7532e
mod_roster_command: Make sure hosts are only initialized once
Kim Alvefur <zash@zash.se>
parents:
1508
diff
changeset
|
108 storagemanager.initialize_host(user_host); |
01e37ce7532e
mod_roster_command: Make sure hosts are only initialized once
Kim Alvefur <zash@zash.se>
parents:
1508
diff
changeset
|
109 usermanager.initialize_host(user_host); |
01e37ce7532e
mod_roster_command: Make sure hosts are only initialized once
Kim Alvefur <zash@zash.se>
parents:
1508
diff
changeset
|
110 end |
453
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
111 |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
112 -- Load user's roster and find the contact |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
113 local roster = rostermanager.load_roster(user_username, user_host); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
114 local item = roster[contact_jid]; |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
115 if item then |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
116 if contact_nick then |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
117 item.name = contact_nick; |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
118 end |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
119 if contact_group then |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
120 item.groups = {}; -- Remove from all current groups |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
121 item.groups[contact_group] = true; |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
122 end |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
123 rostermanager.save_roster(user_username, user_host, roster); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
124 end |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
125 end |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
126 |
1565
f9cb09d451c7
mod_roster_command: Add 'remove' command
Kim Alvefur <zash@zash.se>
parents:
1509
diff
changeset
|
127 function remove(user_jid, contact_jid) |
f9cb09d451c7
mod_roster_command: Add 'remove' command
Kim Alvefur <zash@zash.se>
parents:
1509
diff
changeset
|
128 unsubscribe_both(user_jid, contact_jid); |
f9cb09d451c7
mod_roster_command: Add 'remove' command
Kim Alvefur <zash@zash.se>
parents:
1509
diff
changeset
|
129 local user_username, user_host = jid.split(user_jid); |
f9cb09d451c7
mod_roster_command: Add 'remove' command
Kim Alvefur <zash@zash.se>
parents:
1509
diff
changeset
|
130 local roster = rostermanager.load_roster(user_username, user_host); |
f9cb09d451c7
mod_roster_command: Add 'remove' command
Kim Alvefur <zash@zash.se>
parents:
1509
diff
changeset
|
131 roster[contact_jid] = nil; |
f9cb09d451c7
mod_roster_command: Add 'remove' command
Kim Alvefur <zash@zash.se>
parents:
1509
diff
changeset
|
132 rostermanager.save_roster(user_username, user_host, roster); |
f9cb09d451c7
mod_roster_command: Add 'remove' command
Kim Alvefur <zash@zash.se>
parents:
1509
diff
changeset
|
133 end |
f9cb09d451c7
mod_roster_command: Add 'remove' command
Kim Alvefur <zash@zash.se>
parents:
1509
diff
changeset
|
134 |
453
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
135 function module.command(arg) |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
136 local command = arg[1]; |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
137 if not command then |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
138 warn("Valid subcommands: (un)subscribe(_both) | rename"); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
139 return 0; |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
140 end |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
141 table.remove(arg, 1); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
142 if command == "subscribe" then |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
143 subscribe(arg[1], arg[2]); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
144 return 0; |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
145 elseif command == "subscribe_both" then |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
146 subscribe_both(arg[1], arg[2]); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
147 return 0; |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
148 elseif command == "unsubscribe" then |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
149 unsubscribe(arg[1], arg[2]); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
150 return 0; |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
151 elseif command == "unsubscribe_both" then |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
152 unsubscribe_both(arg[1], arg[2]); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
153 return 0; |
1565
f9cb09d451c7
mod_roster_command: Add 'remove' command
Kim Alvefur <zash@zash.se>
parents:
1509
diff
changeset
|
154 elseif command == "remove" then |
f9cb09d451c7
mod_roster_command: Add 'remove' command
Kim Alvefur <zash@zash.se>
parents:
1509
diff
changeset
|
155 remove(arg[1], arg[2]); |
f9cb09d451c7
mod_roster_command: Add 'remove' command
Kim Alvefur <zash@zash.se>
parents:
1509
diff
changeset
|
156 return 0; |
453
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
157 elseif command == "rename" then |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
158 rename(arg[1], arg[2], arg[3], arg[4]); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
159 return 0; |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
160 else |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
161 warn("Unknown command: %s", command); |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
162 return 1; |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
163 end |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
164 return 0; |
1969310ea06a
mod_roster_command: Manage rosters through prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
165 end |