mod_roster_command/mod_roster_command.lua
author Matthew Wild <mwild1@gmail.com>
Sat, 24 Sep 2022 09:26:26 +0100
changeset 5063 5f1120c284c5
parent 4330 f6fdefc5c6ac
permissions -rw-r--r--
mod_cloud_notify_extensions: Add note about dependency Noting here because people might not click through to see it on the mod_cloud_notify_encrypted page.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
1951
634b42541f5b mod_roster_command: Attempt to update for compatibility with 0.10
Kim Alvefur <zash@zash.se>
parents: 1950
diff changeset
    12
if module.host ~= "*" then
1950
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...
1952
2748aa8f36e0 mod_roster_command: Update workaround to perhaps work in 0.10
Kim Alvefur <zash@zash.se>
parents: 1951
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: 1951
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: 1951
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: 1951
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
1951
634b42541f5b mod_roster_command: Attempt to update for compatibility with 0.10
Kim Alvefur <zash@zash.se>
parents: 1950
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";
1951
634b42541f5b mod_roster_command: Attempt to update for compatibility with 0.10
Kim Alvefur <zash@zash.se>
parents: 1950
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
4330
f6fdefc5c6ac mod_roster_command: Fix subscription when the "user JID" is a bare domain.
Boris Grozev <boris@jitsi.org>
parents: 1952
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: 1952
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: 1952
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: 1952
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);
4330
f6fdefc5c6ac mod_roster_command: Fix subscription when the "user JID" is a bare domain.
Boris Grozev <boris@jitsi.org>
parents: 1952
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: 1952
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: 1952
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: 1952
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