Comparison

plugins/mod_pep.lua @ 11631:6641ca266d94

mod_pubsub,mod_pep: Support "max" as 'pubsub#max_items' Fixes #1643 API change: The argument to archive_itemstore() changes type to integer
author Kim Alvefur <zash@zash.se>
date Wed, 09 Jun 2021 15:58:49 +0200
parent 11567:c471e19a238e
child 11722:bc2d3f110a39
comparison
equal deleted inserted replaced
11630:855b065d5fd6 11631:6641ca266d94
33 local node_config = module:open_store("pep", "map"); 33 local node_config = module:open_store("pep", "map");
34 local known_nodes = module:open_store("pep"); 34 local known_nodes = module:open_store("pep");
35 35
36 local max_max_items = module:get_option_number("pep_max_items", 256); 36 local max_max_items = module:get_option_number("pep_max_items", 256);
37 37
38 local function tonumber_max_items(n)
39 if n == "max" then
40 return max_max_items;
41 end
42 return tonumber(n);
43 end
44
38 function module.save() 45 function module.save()
39 return { 46 return {
40 services = services; 47 services = services;
41 recipients = recipients; 48 recipients = recipients;
42 }; 49 };
54 function is_item_stanza(item) 61 function is_item_stanza(item)
55 return st.is_stanza(item) and item.attr.xmlns == xmlns_pubsub and item.name == "item" and #item.tags == 1; 62 return st.is_stanza(item) and item.attr.xmlns == xmlns_pubsub and item.name == "item" and #item.tags == 1;
56 end 63 end
57 64
58 function check_node_config(node, actor, new_config) -- luacheck: ignore 212/node 212/actor 65 function check_node_config(node, actor, new_config) -- luacheck: ignore 212/node 212/actor
59 if (new_config["max_items"] or 1) > max_max_items then 66 if (tonumber_max_items(new_config["max_items"]) or 1) > max_max_items then
60 return false; 67 return false;
61 end 68 end
62 if new_config["access_model"] ~= "presence" 69 if new_config["access_model"] ~= "presence"
63 and new_config["access_model"] ~= "whitelist" 70 and new_config["access_model"] ~= "whitelist"
64 and new_config["access_model"] ~= "open" then 71 and new_config["access_model"] ~= "open" then
100 end 107 end
101 108
102 local function simple_itemstore(username) 109 local function simple_itemstore(username)
103 local driver = storagemanager.get_driver(module.host, "pep_data"); 110 local driver = storagemanager.get_driver(module.host, "pep_data");
104 return function (config, node) 111 return function (config, node)
112 local max_items = tonumber_max_items(config["max_items"]);
105 if config["persist_items"] then 113 if config["persist_items"] then
106 module:log("debug", "Creating new persistent item store for user %s, node %q", username, node); 114 module:log("debug", "Creating new persistent item store for user %s, node %q", username, node);
107 local archive = driver:open("pep_"..node, "archive"); 115 local archive = driver:open("pep_"..node, "archive");
108 return lib_pubsub.archive_itemstore(archive, config, username, node, false); 116 return lib_pubsub.archive_itemstore(archive, max_items, username, node, false);
109 else 117 else
110 module:log("debug", "Creating new ephemeral item store for user %s, node %q", username, node); 118 module:log("debug", "Creating new ephemeral item store for user %s, node %q", username, node);
111 return cache.new(tonumber(config["max_items"])); 119 return cache.new(max_items);
112 end 120 end
113 end 121 end
114 end 122 end
115 123
116 local function get_broadcaster(username) 124 local function get_broadcaster(username)