plugins/mod_privacy.lua
author Matthew Wild <mwild1@gmail.com>
Thu, 11 Feb 2010 12:10:06 +0000
changeset 2588 741302471a23
parent 2579 4e0caff152d6
child 2589 39f5a068dc41
permissions -rw-r--r--
mod_privacy: Don't store the privacy lists as an array, but as a map... faster and less code
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: 1293
diff changeset
     1
-- Prosody IM
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1293
diff changeset
     2
-- Copyright (C) 2008-2009 Matthew Wild
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1293
diff changeset
     3
-- Copyright (C) 2008-2009 Waqas Hussain
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
     4
-- Copyright (C) 2009 Thilo Cestonaro
1522
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1293
diff changeset
     5
-- 
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1293
diff changeset
     6
-- This project is MIT/X11 licensed. Please see the
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1293
diff changeset
     7
-- COPYING file in the source package for more information.
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1293
diff changeset
     8
--
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 1293
diff changeset
     9
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    10
local prosody = prosody;
1293
13dde33d5b87 mod_privacy: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    11
local st = require "util.stanza";
13dde33d5b87 mod_privacy: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
    12
local datamanager = require "util.datamanager";
2498
3d08a6cf57ea mod_privacy: Fixed global access.
Waqas Hussain <waqas20@gmail.com>
parents: 2496
diff changeset
    13
local bare_sessions, full_sessions = bare_sessions, full_sessions;
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    14
local util_Jid = require "util.jid";
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    15
local jid_bare = util_Jid.bare;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    16
local jid_split = util_Jid.split;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    17
local load_roster = require "core.rostermanager".load_roster;
2498
3d08a6cf57ea mod_privacy: Fixed global access.
Waqas Hussain <waqas20@gmail.com>
parents: 2496
diff changeset
    18
local to_number = tonumber;
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    19
2500
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
    20
function isListUsed(origin, name, privacy_lists)
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
    21
	local user = bare_sessions[origin.username.."@"..origin.host];
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
    22
	if user then
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
    23
		for resource, session in pairs(user.sessions) do
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    24
			if resource ~= origin.resource then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    25
				if session.activePrivacyList == name then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    26
					return true;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    27
				elseif session.activePrivacyList == nil and privacy_lists.default == name then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    28
					return true;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    29
				end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    30
			end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    31
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    32
	end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    33
end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    34
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    35
function isAnotherSessionUsingDefaultList(origin)
2500
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
    36
	local user = bare_sessions[origin.username.."@"..origin.host];
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
    37
	if user then
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
    38
		for resource, session in pairs(user.sessions) do
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    39
			if resource ~= origin.resource and session.activePrivacyList == nil then
2500
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
    40
				return true;
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    41
			end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    42
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    43
	end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    44
end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    45
2498
3d08a6cf57ea mod_privacy: Fixed global access.
Waqas Hussain <waqas20@gmail.com>
parents: 2496
diff changeset
    46
function sendUnavailable(origin, to, from)
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    47
--[[ example unavailable presence stanza
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    48
<presence from="node@host/resource" type="unavailable" to="node@host" >
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    49
	<status>Logged out</status>
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    50
</presence>
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    51
]]--
2500
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
    52
	local presence = st.presence({from=from, type="unavailable"});
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    53
	presence:tag("status"):text("Logged out");
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    54
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    55
	local node, host = jid_bare(to);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    56
	local bare = node .. "@" .. host;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    57
	
2500
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
    58
	local user = bare_sessions[bare];
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
    59
	if user then
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
    60
		for resource, session in pairs(user.sessions) do
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    61
			presence.attr.to = session.full_jid;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    62
			module:log("debug", "send unavailable to: %s; from: %s", tostring(presence.attr.to), tostring(presence.attr.from));
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    63
			origin.send(presence);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    64
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    65
	end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    66
end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    67
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    68
function sendNeededUnavailablePersences(origin, listnameOrItem) -- TODO implement it correctly!
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    69
	if type(listnameOrItem) == "string" then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    70
		local listname = listnameOrItem;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    71
		for _,list in ipairs(privacy_lists.lists) do
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    72
			if list.name == listname then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    73
				for _,item in ipairs(list.items) do
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    74
					sendNeededUnavailablePersences(origin, item);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    75
				end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    76
			end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    77
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    78
	elseif type(listnameOrItem) == "table" then
2524
b427f5401ce7 mod_privacy: A handful of logging fixes
Matthew Wild <mwild1@gmail.com>
parents: 2523
diff changeset
    79
		module:log("debug", "got an item, check whether to send unavailable presence stanza or not");
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    80
		local item = listnameOrItem;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    81
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    82
		if item["presence-out"] == true then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    83
			if item.type == "jid" then
2498
3d08a6cf57ea mod_privacy: Fixed global access.
Waqas Hussain <waqas20@gmail.com>
parents: 2496
diff changeset
    84
				sendUnavailable(origin, item.value, origin.full_jid);
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    85
			elseif item.type == "group" then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    86
			elseif item.type == "subscription" then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    87
			elseif item.type == nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    88
			end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    89
		elseif item["presence-in"] == true then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    90
			if item.type == "jid" then
2498
3d08a6cf57ea mod_privacy: Fixed global access.
Waqas Hussain <waqas20@gmail.com>
parents: 2496
diff changeset
    91
				sendUnavailable(origin, origin.full_jid, item.value);
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    92
			elseif item.type == "group" then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    93
			elseif item.type == "subscription" then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    94
			elseif item.type == nil then
2516
68a889016a46 mod_privacy: Trailing whitespace (I can't sleep)
Matthew Wild <mwild1@gmail.com>
parents: 2502
diff changeset
    95
			end
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    96
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    97
	else
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    98
		module:log("debug", "got unknown type: %s", type(listnameOrItem));
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
    99
	end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   100
end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   101
2500
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
   102
function declineList(privacy_lists, origin, stanza, which)
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   103
	if which == "default" then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   104
		if isAnotherSessionUsingDefaultList(origin) then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   105
			return { "cancel", "conflict", "Another session is online and using the default list."};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   106
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   107
		privacy_lists.default = nil;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   108
		origin.send(st.reply(stanza));
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   109
	elseif which == "active" then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   110
		origin.activePrivacyList = nil;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   111
		origin.send(st.reply(stanza));
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   112
	else
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   113
		return {"modify", "bad-request", "Neither default nor active list specifed to decline."};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   114
	end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   115
	return true;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   116
end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   117
2500
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
   118
function activateList(privacy_lists, origin, stanza, which, name)
2588
741302471a23 mod_privacy: Don't store the privacy lists as an array, but as a map... faster and less code
Matthew Wild <mwild1@gmail.com>
parents: 2579
diff changeset
   119
	local list = privacy_lists.lists[name];
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   120
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   121
	if privacy_lists.default == nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   122
		privacy_lists.default = "";
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   123
	end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   124
	if origin.activePrivacyList == nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   125
		origin.activePrivacyList = "";
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   126
	end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   127
	
2588
741302471a23 mod_privacy: Don't store the privacy lists as an array, but as a map... faster and less code
Matthew Wild <mwild1@gmail.com>
parents: 2579
diff changeset
   128
	if which == "default" and list then
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   129
		if isAnotherSessionUsingDefaultList(origin) then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   130
			return {"cancel", "conflict", "Another session is online and using the default list."};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   131
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   132
		privacy_lists.default = name;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   133
		origin.send(st.reply(stanza));
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   134
--[[
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   135
		if origin.activePrivacyList == nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   136
			sendNeededUnavailablePersences(origin, name);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   137
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   138
]]--
2588
741302471a23 mod_privacy: Don't store the privacy lists as an array, but as a map... faster and less code
Matthew Wild <mwild1@gmail.com>
parents: 2579
diff changeset
   139
	elseif which == "active" and list then
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   140
		origin.activePrivacyList = name;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   141
		origin.send(st.reply(stanza));
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   142
		-- sendNeededUnavailablePersences(origin, name);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   143
	else
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   144
		return {"modify", "bad-request", "Either not active or default given or unknown list name specified."};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   145
	end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   146
	return true;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   147
end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   148
2500
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
   149
function deleteList(privacy_lists, origin, stanza, name)
2588
741302471a23 mod_privacy: Don't store the privacy lists as an array, but as a map... faster and less code
Matthew Wild <mwild1@gmail.com>
parents: 2579
diff changeset
   150
	local list = privacy_lists.lists[name];
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   151
2588
741302471a23 mod_privacy: Don't store the privacy lists as an array, but as a map... faster and less code
Matthew Wild <mwild1@gmail.com>
parents: 2579
diff changeset
   152
	if list then
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   153
		if isListUsed(origin, name, privacy_lists) then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   154
			return {"cancel", "conflict", "Another session is online and using the list which should be deleted."};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   155
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   156
		if privacy_lists.default == name then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   157
			privacy_lists.default = "";
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   158
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   159
		if origin.activePrivacyList == name then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   160
			origin.activePrivacyList = "";
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   161
		end
2588
741302471a23 mod_privacy: Don't store the privacy lists as an array, but as a map... faster and less code
Matthew Wild <mwild1@gmail.com>
parents: 2579
diff changeset
   162
		privacy_lists.lists[name] = nil;
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   163
		origin.send(st.reply(stanza));
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   164
		return true;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   165
	end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   166
	return {"modify", "bad-request", "Not existing list specifed to be deleted."};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   167
end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   168
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   169
function createOrReplaceList (privacy_lists, origin, stanza, name, entries, roster)
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   170
	local bare_jid = origin.username.."@"..origin.host;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   171
	
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   172
	if privacy_lists.lists == nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   173
		privacy_lists.lists = {};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   174
	end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   175
2588
741302471a23 mod_privacy: Don't store the privacy lists as an array, but as a map... faster and less code
Matthew Wild <mwild1@gmail.com>
parents: 2579
diff changeset
   176
	local list = {};
741302471a23 mod_privacy: Don't store the privacy lists as an array, but as a map... faster and less code
Matthew Wild <mwild1@gmail.com>
parents: 2579
diff changeset
   177
	privacy_lists.lists[name] = list;
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   178
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   179
	local orderCheck = {};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   180
	list.name = name;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   181
	list.items = {};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   182
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   183
	for _,item in ipairs(entries) do
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   184
		if to_number(item.attr.order) == nil or to_number(item.attr.order) < 0 or orderCheck[item.attr.order] ~= nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   185
			return {"modify", "bad-request", "Order attribute not valid."};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   186
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   187
		
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   188
		if item.attr.type ~= nil and item.attr.type ~= "jid" and item.attr.type ~= "subscription" and item.attr.type ~= "group" then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   189
			return {"modify", "bad-request", "Type attribute not valid."};
2516
68a889016a46 mod_privacy: Trailing whitespace (I can't sleep)
Matthew Wild <mwild1@gmail.com>
parents: 2502
diff changeset
   190
		end
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   191
		
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   192
		local tmp = {};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   193
		orderCheck[item.attr.order] = true;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   194
		
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   195
		tmp["type"] = item.attr.type;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   196
		tmp["value"] = item.attr.value;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   197
		tmp["action"] = item.attr.action;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   198
		tmp["order"] = to_number(item.attr.order);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   199
		tmp["presence-in"] = false;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   200
		tmp["presence-out"] = false;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   201
		tmp["message"] = false;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   202
		tmp["iq"] = false;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   203
		
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   204
		if #item.tags > 0 then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   205
			for _,tag in ipairs(item.tags) do
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   206
				tmp[tag.name] = true;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   207
			end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   208
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   209
		
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   210
		if tmp.type == "group" then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   211
			local found = false;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   212
			local roster = load_roster(origin.username, origin.host);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   213
			for jid,item in pairs(roster) do
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   214
				if item.groups ~= nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   215
					for group in pairs(item.groups) do
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   216
						if group == tmp.value then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   217
							found = true;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   218
							break;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   219
						end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   220
					end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   221
					if found == true then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   222
						break;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   223
					end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   224
				end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   225
			end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   226
			if found == false then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   227
				return {"cancel", "item-not-found", "Specifed roster group not existing."};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   228
			end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   229
		elseif tmp.type == "subscription" then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   230
			if	tmp.value ~= "both" and
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   231
				tmp.value ~= "to" and
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   232
				tmp.value ~= "from" and
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   233
				tmp.value ~= "none" then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   234
				return {"cancel", "bad-request", "Subscription value must be both, to, from or none."};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   235
			end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   236
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   237
		
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   238
		if tmp.action ~= "deny" and tmp.action ~= "allow" then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   239
			return {"cancel", "bad-request", "Action must be either deny or allow."};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   240
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   241
		
2516
68a889016a46 mod_privacy: Trailing whitespace (I can't sleep)
Matthew Wild <mwild1@gmail.com>
parents: 2502
diff changeset
   242
--[[
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   243
		if (privacy_lists.default == name and origin.activePrivacyList == nil) or origin.activePrivacyList == name then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   244
			module:log("debug", "calling sendNeededUnavailablePresences!");
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   245
			-- item is valid and list is active, so send needed unavailable stanzas
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   246
			sendNeededUnavailablePersences(origin, tmp);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   247
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   248
]]--
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   249
		list.items[#list.items + 1] = tmp;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   250
	end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   251
	
2499
145d62abdbfc mod_privacy: Reduced a function.
Waqas Hussain <waqas20@gmail.com>
parents: 2498
diff changeset
   252
	table.sort(list, function(a, b) return a.order < b.order; end);
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   253
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   254
	origin.send(st.reply(stanza));
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   255
	if bare_sessions[bare_jid] ~= nil then
2498
3d08a6cf57ea mod_privacy: Fixed global access.
Waqas Hussain <waqas20@gmail.com>
parents: 2496
diff changeset
   256
		local iq = st.iq ( { type = "set", id="push1" } );
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   257
		iq:tag ("query", { xmlns = "jabber:iq:privacy" } );
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   258
		iq:tag ("list", { name = list.name } ):up();
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   259
		iq:up();
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   260
		for resource, session in pairs(bare_sessions[bare_jid].sessions) do
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   261
			iq.attr.to = bare_jid.."/"..resource
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   262
			session.send(iq);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   263
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   264
	else
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   265
		return {"cancel", "bad-request", "internal error."};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   266
	end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   267
	return true;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   268
end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   269
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   270
function getList(privacy_lists, origin, stanza, name)
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   271
	local reply = st.reply(stanza);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   272
	reply:tag("query", {xmlns="jabber:iq:privacy"});
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   273
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   274
	if name == nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   275
		reply:tag("active", {name=origin.activePrivacyList or ""}):up();
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   276
		reply:tag("default", {name=privacy_lists.default or ""}):up();
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   277
		if privacy_lists.lists then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   278
			for _,list in ipairs(privacy_lists.lists) do
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   279
				reply:tag("list", {name=list.name}):up();
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   280
			end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   281
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   282
	else
2588
741302471a23 mod_privacy: Don't store the privacy lists as an array, but as a map... faster and less code
Matthew Wild <mwild1@gmail.com>
parents: 2579
diff changeset
   283
		local list = privacy_lists.lists[name];
741302471a23 mod_privacy: Don't store the privacy lists as an array, but as a map... faster and less code
Matthew Wild <mwild1@gmail.com>
parents: 2579
diff changeset
   284
		if list then
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   285
			reply = reply:tag("list", {name=list.name});
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   286
			for _,item in ipairs(list.items) do
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   287
				reply:tag("item", {type=item.type, value=item.value, action=item.action, order=item.order});
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   288
				if item["message"] then reply:tag("message"):up(); end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   289
				if item["iq"] then reply:tag("iq"):up(); end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   290
				if item["presence-in"] then reply:tag("presence-in"):up(); end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   291
				if item["presence-out"] then reply:tag("presence-out"):up(); end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   292
				reply:up();
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   293
			end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   294
		else
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   295
			return {"cancel", "item-not-found", "Unknown list specified."};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   296
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   297
	end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   298
	
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   299
	origin.send(reply);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   300
	return true;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   301
end
1293
13dde33d5b87 mod_privacy: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
   302
13dde33d5b87 mod_privacy: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
   303
module:hook("iq/bare/jabber:iq:privacy:query", function(data)
13dde33d5b87 mod_privacy: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
   304
	local origin, stanza = data.origin, data.stanza;
13dde33d5b87 mod_privacy: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
   305
	
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   306
	if stanza.attr.to == nil then -- only service requests to own bare JID
1293
13dde33d5b87 mod_privacy: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
   307
		local query = stanza.tags[1]; -- the query element
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   308
		local valid = false;
1293
13dde33d5b87 mod_privacy: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
   309
		local privacy_lists = datamanager.load(origin.username, origin.host, "privacy") or {};
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   310
1293
13dde33d5b87 mod_privacy: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
   311
		if stanza.attr.type == "set" then
2516
68a889016a46 mod_privacy: Trailing whitespace (I can't sleep)
Matthew Wild <mwild1@gmail.com>
parents: 2502
diff changeset
   312
			if #query.tags == 1 then --  the <query/> element MUST NOT include more than one child element
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   313
				for _,tag in ipairs(query.tags) do
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   314
					if tag.name == "active" or tag.name == "default" then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   315
						if tag.attr.name == nil then -- Client declines the use of active / default list
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   316
							valid = declineList(privacy_lists, origin, stanza, tag.name);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   317
						else -- Client requests change of active / default list
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   318
							valid = activateList(privacy_lists, origin, stanza, tag.name, tag.attr.name);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   319
						end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   320
					elseif tag.name == "list" and tag.attr.name then -- Client adds / edits a privacy list
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   321
						if #tag.tags == 0 then -- Client removes a privacy list
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   322
							valid = deleteList(privacy_lists, origin, stanza, tag.attr.name);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   323
						else -- Client edits a privacy list
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   324
							valid = createOrReplaceList(privacy_lists, origin, stanza, tag.attr.name, tag.tags);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   325
						end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   326
					end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   327
				end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   328
			end
1293
13dde33d5b87 mod_privacy: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
   329
		elseif stanza.attr.type == "get" then
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   330
			local name = nil;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   331
			local listsToRetrieve = 0;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   332
			if #query.tags >= 1 then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   333
				for _,tag in ipairs(query.tags) do
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   334
					if tag.name == "list" then -- Client requests a privacy list from server
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   335
						name = tag.attr.name;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   336
						listsToRetrieve = listsToRetrieve + 1;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   337
					end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   338
				end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   339
			end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   340
			if listsToRetrieve == 0 or listsToRetrieve == 1 then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   341
				valid = getList(privacy_lists, origin, stanza, name);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   342
			end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   343
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   344
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   345
		if valid ~= true then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   346
			if valid[0] == nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   347
				valid[0] = "cancel";
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   348
			end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   349
			if valid[1] == nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   350
				valid[1] = "bad-request";
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   351
			end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   352
			origin.send(st.error_reply(stanza, valid[0], valid[1], valid[2]));
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   353
		else
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   354
			datamanager.store(origin.username, origin.host, "privacy", privacy_lists);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   355
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   356
		return true;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   357
	end
2500
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
   358
end);
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   359
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   360
function checkIfNeedToBeBlocked(e, session)
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   361
	local origin, stanza = e.origin, e.stanza;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   362
	local privacy_lists = datamanager.load(session.username, session.host, "privacy") or {};
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   363
	local bare_jid = session.username.."@"..session.host;
2523
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   364
	local to = stanza.attr.to;
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   365
	local from = stanza.attr.from;
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   366
	
2579
4e0caff152d6 mod_privacy: Rename from_user/to_user flags to is_from_user/is_to_user for clarity
Matthew Wild <mwild1@gmail.com>
parents: 2524
diff changeset
   367
	local is_to_user = bare_jid == jid_bare(to);
4e0caff152d6 mod_privacy: Rename from_user/to_user flags to is_from_user/is_to_user for clarity
Matthew Wild <mwild1@gmail.com>
parents: 2524
diff changeset
   368
	local is_from_user = bare_jid == jid_bare(from);
2523
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   369
	
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   370
	module:log("debug", "stanza: %s, to: %s, from: %s", tostring(stanza.name), tostring(to), tostring(from));
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   371
	
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   372
	if privacy_lists.lists == nil or
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   373
		(session.activePrivacyList == nil or session.activePrivacyList == "") and
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   374
		(privacy_lists.default == nil     or privacy_lists.default == "")
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   375
	then
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   376
		return; -- Nothing to block, default is Allow all
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   377
	end
2579
4e0caff152d6 mod_privacy: Rename from_user/to_user flags to is_from_user/is_to_user for clarity
Matthew Wild <mwild1@gmail.com>
parents: 2524
diff changeset
   378
	if is_from_user and is_to_user then
2524
b427f5401ce7 mod_privacy: A handful of logging fixes
Matthew Wild <mwild1@gmail.com>
parents: 2523
diff changeset
   379
		module:log("debug", "Not blocking communications between user's resources");
2523
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   380
		return; -- from one of a user's resource to another => HANDS OFF!
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   381
	end
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   382
	
2523
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   383
	local item;
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   384
	local listname = session.activePrivacyList;
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   385
	if listname == nil or listname == "" then
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   386
		listname = privacy_lists.default; -- no active list selected, use default list
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   387
	end
2588
741302471a23 mod_privacy: Don't store the privacy lists as an array, but as a map... faster and less code
Matthew Wild <mwild1@gmail.com>
parents: 2579
diff changeset
   388
	local list = privacy_lists.lists[listname];
741302471a23 mod_privacy: Don't store the privacy lists as an array, but as a map... faster and less code
Matthew Wild <mwild1@gmail.com>
parents: 2579
diff changeset
   389
	if not list then
741302471a23 mod_privacy: Don't store the privacy lists as an array, but as a map... faster and less code
Matthew Wild <mwild1@gmail.com>
parents: 2579
diff changeset
   390
		module:log("debug", "given privacy list not found. name: %s", listname);
2523
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   391
		return;
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   392
	end
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   393
	for _,item in ipairs(list.items) do
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   394
		local apply = false;
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   395
		local block = false;
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   396
		if (
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   397
			(stanza.name == "message" and item.message) or
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   398
			(stanza.name == "iq" and item.iq) or
2579
4e0caff152d6 mod_privacy: Rename from_user/to_user flags to is_from_user/is_to_user for clarity
Matthew Wild <mwild1@gmail.com>
parents: 2524
diff changeset
   399
			(stanza.name == "presence" and is_to_user and item["presence-in"]) or
4e0caff152d6 mod_privacy: Rename from_user/to_user flags to is_from_user/is_to_user for clarity
Matthew Wild <mwild1@gmail.com>
parents: 2524
diff changeset
   400
			(stanza.name == "presence" and is_from_user and item["presence-out"]) or
2523
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   401
			(item.message == false and item.iq == false and item["presence-in"] == false and item["presence-out"] == false)
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   402
		) then
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   403
			apply = true;
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   404
		end
2523
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   405
		if apply then
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   406
			local evilJid = {};
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   407
			apply = false;
2579
4e0caff152d6 mod_privacy: Rename from_user/to_user flags to is_from_user/is_to_user for clarity
Matthew Wild <mwild1@gmail.com>
parents: 2524
diff changeset
   408
			if is_to_user then
2523
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   409
				module:log("debug", "evil jid is (from): %s", from);
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   410
				evilJid.node, evilJid.host, evilJid.resource = jid_split(from);
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   411
			else
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   412
				module:log("debug", "evil jid is (to): %s", to);
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   413
				evilJid.node, evilJid.host, evilJid.resource = jid_split(to);
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   414
			end
2523
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   415
			if	item.type == "jid" and
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   416
				(evilJid.node and evilJid.host and evilJid.resource and item.value == evilJid.node.."@"..evilJid.host.."/"..evilJid.resource) or
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   417
				(evilJid.node and evilJid.host and item.value == evilJid.node.."@"..evilJid.host) or
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   418
				(evilJid.host and evilJid.resource and item.value == evilJid.host.."/"..evilJid.resource) or
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   419
				(evilJid.host and item.value == evilJid.host) then
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   420
				apply = true;
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   421
				block = (item.action == "deny");
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   422
			elseif item.type == "group" then
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   423
				local roster = load_roster(session.username, session.host);
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   424
				local groups = roster[evilJid.node .. "@" .. evilJid.host].groups;
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   425
				for group in pairs(groups) do
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   426
					if group == item.value then
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   427
						apply = true;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   428
						block = (item.action == "deny");
2523
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   429
						break;
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   430
					end
2523
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   431
				end
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   432
			elseif item.type == "subscription" and evilJid.node ~= nil and evilJid.host ~= nil then -- we need a valid bare evil jid
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   433
				local roster = load_roster(session.username, session.host);
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   434
				if roster[evilJid.node .. "@" .. evilJid.host].subscription == item.value then
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   435
					apply = true;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   436
					block = (item.action == "deny");
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   437
				end
2523
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   438
			elseif item.type == nil then
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   439
				apply = true;
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   440
				block = (item.action == "deny");
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   441
			end
2523
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   442
		end
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   443
		if apply then
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   444
			if block then
2524
b427f5401ce7 mod_privacy: A handful of logging fixes
Matthew Wild <mwild1@gmail.com>
parents: 2523
diff changeset
   445
				module:log("debug", "stanza blocked: %s, to: %s, from: %s", tostring(stanza.name), tostring(to), tostring(from));
2523
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   446
				if stanza.name == "message" then
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   447
					origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   448
				elseif stanza.name == "iq" and (stanza.attr.type == "get" or stanza.attr.type == "set") then
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   449
					origin.send(st.error_reply(stanza, "cancel", "service-unavailable"));
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   450
				end
2523
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   451
				return true; -- stanza blocked !
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   452
			else
2524
b427f5401ce7 mod_privacy: A handful of logging fixes
Matthew Wild <mwild1@gmail.com>
parents: 2523
diff changeset
   453
				module:log("debug", "stanza explicitly allowed!")
2523
0c816b271208 mod_privacy: Remove the giant if/end block that was really causing problems - skipping stanzas with no to/from (like presence broadcast). Also optimised the code a *lot*, these changes untested at the moment though.
Matthew Wild <mwild1@gmail.com>
parents: 2522
diff changeset
   454
				return;
1293
13dde33d5b87 mod_privacy: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
   455
			end
13dde33d5b87 mod_privacy: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
   456
		end
13dde33d5b87 mod_privacy: Initial commit
Waqas Hussain <waqas20@gmail.com>
parents:
diff changeset
   457
	end
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   458
end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   459
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   460
function preCheckIncoming(e)
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   461
	local session;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   462
	if e.stanza.attr.to ~= nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   463
		local node, host, resource = jid_split(e.stanza.attr.to);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   464
		if node == nil or host == nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   465
			return;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   466
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   467
		if resource == nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   468
			local prio = 0;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   469
			local session_;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   470
			if bare_sessions[node.."@"..host] ~= nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   471
				for resource, session_ in pairs(bare_sessions[node.."@"..host].sessions) do
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   472
					if session_.priority ~= nil and session_.priority > prio then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   473
						session = session_;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   474
						prio = session_.priority;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   475
					end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   476
				end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   477
			end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   478
		else
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   479
			session = full_sessions[node.."@"..host.."/"..resource];
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   480
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   481
		if session ~= nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   482
			return checkIfNeedToBeBlocked(e, session);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   483
		else
2500
bffdaeb7ab5e mod_privacy: Cleaned up code.
Waqas Hussain <waqas20@gmail.com>
parents: 2499
diff changeset
   484
			module:log("debug", "preCheckIncoming: Couldn't get session for jid: %s@%s/%s", tostring(node), tostring(host), tostring(resource));
2496
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   485
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   486
	end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   487
end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   488
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   489
function preCheckOutgoing(e)
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   490
	local session = e.origin;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   491
	if e.stanza.attr.from == nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   492
		e.stanza.attr.from = session.username .. "@" .. session.host;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   493
		if session.resource ~= nil then
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   494
		 	e.stanza.attr.from = e.stanza.attr.from .. "/" .. session.resource;
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   495
		end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   496
	end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   497
	return checkIfNeedToBeBlocked(e, session);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   498
end
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   499
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   500
module:hook("pre-message/full", preCheckOutgoing, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   501
module:hook("pre-message/bare", preCheckOutgoing, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   502
module:hook("pre-message/host", preCheckOutgoing, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   503
module:hook("pre-iq/full", preCheckOutgoing, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   504
module:hook("pre-iq/bare", preCheckOutgoing, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   505
module:hook("pre-iq/host", preCheckOutgoing, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   506
module:hook("pre-presence/full", preCheckOutgoing, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   507
module:hook("pre-presence/bare", preCheckOutgoing, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   508
module:hook("pre-presence/host", preCheckOutgoing, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   509
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   510
module:hook("message/full", preCheckIncoming, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   511
module:hook("message/bare", preCheckIncoming, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   512
module:hook("message/host", preCheckIncoming, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   513
module:hook("iq/full", preCheckIncoming, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   514
module:hook("iq/bare", preCheckIncoming, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   515
module:hook("iq/host", preCheckIncoming, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   516
module:hook("presence/full", preCheckIncoming, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   517
module:hook("presence/bare", preCheckIncoming, 500);
f18b882af1d1 mod_privacy: Imported from prosody-modules.
Waqas Hussain <waqas20@gmail.com>
parents: 1522
diff changeset
   518
module:hook("presence/host", preCheckIncoming, 500);