plugins/mod_mam/mamprefs.lib.lua
author Kim Alvefur <zash@zash.se>
Thu, 28 Mar 2024 15:26:57 +0100
changeset 13472 98806cac64c3
parent 13206 173038306750
permissions -rw-r--r--
MUC: Switch to official XEP-0317 namespace for Hats (including compat) (thanks nicoco)
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
}