[PATCH 2/2] mod_http_upload: add expire-after command

3 views
Skip to first unread message

Andriy Utkin

unread,
Jan 28, 2024, 5:54:20 AMJan 28
to proso...@googlegroups.com, Andriy Utkin
Takes specific max age parameter instead of using centrally configured value.

Enables implementing per-user data retention policy.
---
mod_http_upload/mod_http_upload.lua | 52 +++++++++++++++++++++--------
1 file changed, 38 insertions(+), 14 deletions(-)

diff --git a/mod_http_upload/mod_http_upload.lua b/mod_http_upload/mod_http_upload.lua
index cbffafca..1b9947ae 100644
--- a/mod_http_upload/mod_http_upload.lua
+++ b/mod_http_upload/mod_http_upload.lua
@@ -117,7 +117,7 @@ local pending_slots = module:shared("upload_slots");
local storage_path = module:get_option_string(module.name .. "_path", join_path(prosody.paths.data, module.name));
lfs.mkdir(storage_path);

-local function expire(username, host)
+local function expire(username, host, max_age)
if not max_age then return true; end
local uploads, err = datamanager.list_load(username, host, module.name);
if err then return false, err; end
@@ -429,22 +429,46 @@ module:log("info", "Storage path: '%s'", storage_path);
function module.command(args)
datamanager = require "core.storagemanager".olddm;
-- luacheck: ignore 421/user
- if args[1] == "expire" and args[2] then
- local split = require "util.jid".prepped_split;
- for i = 2, #args do
- local user, host = split(args[i]);
- if user then
- assert(expire(user, host));
- else
- for user in assert(datamanager.users(host, module.name, "list")) do
- expire(user, host);
+ if args[1] == "expire" then
+ if #args >= 2 then
+ local split = require "util.jid".prepped_split;
+ for i = 2, #args do
+ local user, host = split(args[i]);
+ if user then
+ assert(expire(user, host, max_age));
+ else
+ for user in assert(datamanager.users(host, module.name, "list")) do
+ expire(user, host, max_age);
+ end
end
end
+ else
+ print("prosodyctl mod_http_upload expire [host or user@host]+")
+ print("\tProcess upload expiry for the given list of hosts and/or users");
+ return 1;
end
- else
- print("prosodyctl mod_http_upload expire [host or user@host]+")
- print("\tProcess upload expiry for the given list of hosts and/or users");
- return 1;
end
+
+ if args[1] == "expire-after" then
+ if #args >= 3 then
+ local max_age = args[2]
+ local split = require "util.jid".prepped_split;
+ for i = 3, #args do
+ local user, host = split(args[i]);
+ if user then
+ assert(expire(user, host, max_age));
+ else
+ for user in assert(datamanager.users(host, module.name, "list")) do
+ expire(user, host, max_age);
+ end
+ end
+ end
+ else
+ print("prosodyctl mod_http_upload expire-after <max-age> [host or user@host]+")
+ print("\tProcess upload expiry with custom max age for the given list of hosts and/or users");
+ return 1;
+ end
+ end
+
end

--
2.43.0

Reply all
Reply to author
Forward
0 new messages