changeset 5542:048284447643

mod_firewall: Add console commands to mark/unmark users
author Matthew Wild <mwild1@gmail.com>
date Thu, 08 Jun 2023 19:47:35 +0100
parents 3804ee5117ca
children fed5995180c5
files mod_firewall/marks.lib.lua mod_firewall/mod_firewall.lua
diffstat 2 files changed, 44 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mod_firewall/marks.lib.lua	Thu Jun 08 19:19:46 2023 +0100
+++ b/mod_firewall/marks.lib.lua	Thu Jun 08 19:47:35 2023 +0100
@@ -18,7 +18,8 @@
 	if not ok then
 		module:log("error", "Failed to mark user %q with %q: %s", event.username, event.mark, err);
 	end
-end, 1);
+	return true;
+end, -1);
 
 module:hook("firewall/unmarked/user", function (event)
 	local user = user_sessions[event.username];
@@ -30,4 +31,5 @@
 	if not ok then
 		module:log("error", "Failed to unmark user %q with %q: %s", event.username, event.mark, err);
 	end
-end, 1);
+	return true;
+end, -1);
--- a/mod_firewall/mod_firewall.lua	Thu Jun 08 19:19:46 2023 +0100
+++ b/mod_firewall/mod_firewall.lua	Thu Jun 08 19:47:35 2023 +0100
@@ -742,3 +742,43 @@
 		print("end -- End of file "..filename);
 	end
 end
+
+
+-- Console
+
+local console_env = module:shared("/*/admin_shell/env");
+
+console_env.firewall = {};
+
+function console_env.firewall:mark(user_jid, mark_name)
+	local username, host = jid.split(user_jid);
+	if not username or not hosts[host] then
+		return nil, "Invalid JID supplied";
+	elseif not idsafe(mark_name) then
+		return nil, "Invalid characters in mark name";
+	end
+	if not module:context(host):fire_event("firewall/marked/user", {
+		username = session.username;
+		mark = mark_name;
+		timestamp = os.time();
+	}) then
+		return nil, "Mark not set - is mod_firewall loaded on that host?";
+	end
+	return true, "User marked";
+end
+
+function console_env.firewall:unmark(jid, mark_name)
+	local username, host = jid.split(user_jid);
+	if not username or not hosts[host] then
+		return nil, "Invalid JID supplied";
+	elseif not idsafe(mark_name) then
+		return nil, "Invalid characters in mark name";
+	end
+	if not module:context(host):fire_event("firewall/unmarked/user", {
+		username = session.username;
+		mark = mark_name;
+	}) then
+		return nil, "Mark not removed - is mod_firewall loaded on that host?";
+	end
+	return true, "User unmarked";
+end