plugins/mod_mam/mamprefs.lib.lua
author Kim Alvefur <zash@zash.se>
Sat, 23 Mar 2024 20:48:19 +0100
changeset 13465 c673ff1075bd
parent 13206 173038306750
permissions -rw-r--r--
mod_posix: Move everything to util.startup This allows greater control over the order of events. Notably, the internal ordering between daemonization, initialization of libunbound and setup of signal handling is sensitive. libunbound starts a separate thread for processing DNS requests. If this thread is started before signal handling has been set up, it will not inherit the signal handlers and instead behave as it would have before signal handlers were set up, i.e. cause the whole process to immediately exit. libunbound is usually initialized on the first DNS request, usually triggered by an outgoing s2s connection attempt. If daemonization happens before signals have been set up, signals may not be processed at all.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7854
80ee0d9cd56f mod_mam: Normalize copyright headers
Kim Alvefur <zash@zash.se>
parents: 7853
diff changeset
     1
-- Prosody IM
80ee0d9cd56f mod_mam: Normalize copyright headers
Kim Alvefur <zash@zash.se>
parents: 7853
diff changeset
     2
-- Copyright (C) 2008-2017 Matthew Wild
80ee0d9cd56f mod_mam: Normalize copyright headers
Kim Alvefur <zash@zash.se>
parents: 7853
diff changeset
     3
-- Copyright (C) 2008-2017 Waqas Hussain
80ee0d9cd56f mod_mam: Normalize copyright headers
Kim Alvefur <zash@zash.se>
parents: 7853
diff changeset
     4
-- Copyright (C) 2011-2017 Kim Alvefur
80ee0d9cd56f mod_mam: Normalize copyright headers
Kim Alvefur <zash@zash.se>
parents: 7853
diff changeset
     5
--
80ee0d9cd56f mod_mam: Normalize copyright headers
Kim Alvefur <zash@zash.se>
parents: 7853
diff changeset
     6
-- This project is MIT/X11 licensed. Please see the
80ee0d9cd56f mod_mam: Normalize copyright headers
Kim Alvefur <zash@zash.se>
parents: 7853
diff changeset
     7
-- COPYING file in the source package for more information.
80ee0d9cd56f mod_mam: Normalize copyright headers
Kim Alvefur <zash@zash.se>
parents: 7853
diff changeset
     8
--
7839
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
-- XEP-0313: Message Archive Management for Prosody
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
--
7887
60d3b53a36f7 mod_mam: Ignore "indirectly mutating read-only global variable prosody" warning [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7886
diff changeset
    11
-- luacheck: ignore 122/prosody
7839
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
13206
173038306750 plugins: Use get_option_enum where appropriate
Kim Alvefur <zash@zash.se>
parents: 8541
diff changeset
    13
local global_default_policy = module:get_option_enum("default_archive_policy", "always", "roster", "never", true, false);
173038306750 plugins: Use get_option_enum where appropriate
Kim Alvefur <zash@zash.se>
parents: 8541
diff changeset
    14
local smart_enable = module:get_option_boolean("mam_smart_enable", false);
173038306750 plugins: Use get_option_enum where appropriate
Kim Alvefur <zash@zash.se>
parents: 8541
diff changeset
    15
173038306750 plugins: Use get_option_enum where appropriate
Kim Alvefur <zash@zash.se>
parents: 8541
diff changeset
    16
if global_default_policy == "always" then
173038306750 plugins: Use get_option_enum where appropriate
Kim Alvefur <zash@zash.se>
parents: 8541
diff changeset
    17
	global_default_policy = true;
173038306750 plugins: Use get_option_enum where appropriate
Kim Alvefur <zash@zash.se>
parents: 8541
diff changeset
    18
elseif global_default_policy == "never" then
173038306750 plugins: Use get_option_enum where appropriate
Kim Alvefur <zash@zash.se>
parents: 8541
diff changeset
    19
	global_default_policy = false;
7982
a1e88642411d mod_mam: Handle default_archive_policy option consistently
Kim Alvefur <zash@zash.se>
parents: 7887
diff changeset
    20
end
7839
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
do
7858
e429982940fc mod_mam: Silence warning about unused table used to describe data format [luacheck]
Kim Alvefur <zash@zash.se>
parents: 7854
diff changeset
    23
	-- luacheck: ignore 211/prefs_format
7839
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
	local prefs_format = {
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
		[false] = "roster",
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
		-- default ::= true | false | "roster"
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
		-- true = always, false = never, nil = global default
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
		["romeo@montague.net"] = true, -- always
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
		["montague@montague.net"] = false, -- newer
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
	};
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
end
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
7886
9ff791c9f069 mod_mam/mamprefs: Use 'prosody.hosts' instead of '_G.hosts' in case we ever deprecate the later
Kim Alvefur <zash@zash.se>
parents: 7858
diff changeset
    33
local sessions = prosody.hosts[module.host].sessions;
7853
10d91860172f mod_mam: Change store name to "archive" but make it configurable for people who have data in "archive2"
Kim Alvefur <zash@zash.se>
parents: 7839
diff changeset
    34
local archive_store = module:get_option_string("archive_store", "archive");
10d91860172f mod_mam: Change store name to "archive" but make it configurable for people who have data in "archive2"
Kim Alvefur <zash@zash.se>
parents: 7839
diff changeset
    35
local prefs = module:open_store(archive_store .. "_prefs");
7839
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    36
8541
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    37
local function get_prefs(user, explicit)
7839
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    38
	local user_sessions = sessions[user];
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    39
	local user_prefs = user_sessions and user_sessions.archive_prefs
8356
aa6497031924 mod_mam: Load archiving preferes for offline users (fixes #1024)
Kim Alvefur <zash@zash.se>
parents: 7982
diff changeset
    40
	if not user_prefs then
8541
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    41
		-- prefs not cached
7839
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    42
		user_prefs = prefs:get(user);
8541
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    43
		if not user_prefs then
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    44
			-- prefs not set
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    45
			if smart_enable and explicit then
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    46
				-- a mam-capable client was involved in this action, set defaults
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    47
				user_prefs = { [false] = global_default_policy };
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    48
				prefs:set(user, user_prefs);
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    49
			end
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    50
		end
8356
aa6497031924 mod_mam: Load archiving preferes for offline users (fixes #1024)
Kim Alvefur <zash@zash.se>
parents: 7982
diff changeset
    51
		if user_sessions then
8541
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    52
			-- cache settings if they originate from user action
8356
aa6497031924 mod_mam: Load archiving preferes for offline users (fixes #1024)
Kim Alvefur <zash@zash.se>
parents: 7982
diff changeset
    53
			user_sessions.archive_prefs = user_prefs;
aa6497031924 mod_mam: Load archiving preferes for offline users (fixes #1024)
Kim Alvefur <zash@zash.se>
parents: 7982
diff changeset
    54
		end
8541
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    55
		if not user_prefs then
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    56
			if smart_enable then
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    57
				-- not yet enabled, either explicitly or "smart"
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    58
				user_prefs = { [false] = false };
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    59
			else
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    60
				-- no explicit settings, return defaults
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    61
				user_prefs = { [false] = global_default_policy };
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    62
			end
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    63
		end
7839
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    64
	end
8541
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    65
	return user_prefs;
7839
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    66
end
8541
3eb4cafb3b64 mod_mam: Implement option to enable MAM implicitly when client support is detected (#867)
Kim Alvefur <zash@zash.se>
parents: 8356
diff changeset
    67
7839
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    68
local function set_prefs(user, user_prefs)
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    69
	local user_sessions = sessions[user];
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    70
	if user_sessions then
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    71
		user_sessions.archive_prefs = user_prefs;
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    72
	end
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    73
	return prefs:set(user, user_prefs);
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    74
end
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    75
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    76
return {
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    77
	get = get_prefs,
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    78
	set = set_prefs,
30fac9154fd4 mod_mam: Import from prosody-modules
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    79
}