comparison mod_audit/mod_audit.lua @ 5326:dc058fcc3fe3

mod_audit: Improve filtering options and add documentation to README
author Matthew Wild <mwild1@gmail.com>
date Fri, 07 Apr 2023 13:44:18 +0100
parents 11b37063d80a
children 7e3862a26e55
comparison
equal deleted inserted replaced
5325:11b37063d80a 5326:dc058fcc3fe3
123 function moduleapi.audit(module, user, event_type, extra) 123 function moduleapi.audit(module, user, event_type, extra)
124 audit(module.host, user, "mod_" .. module:get_name(), event_type, extra); 124 audit(module.host, user, "mod_" .. module:get_name(), event_type, extra);
125 end 125 end
126 126
127 function module.command(_arg) 127 function module.command(_arg)
128 local arg = require "util.argparse".parse(_arg, { value_params = { "limit", "user" } }); 128 local jid = require "util.jid";
129 local host = arg[1]; 129 local arg = require "util.argparse".parse(_arg, { value_params = { "limit" } });
130 local query_user, host = jid.prepped_split(arg[1]);
130 if not host then 131 if not host then
131 print("EE: Please supply the host for which you want to show events"); 132 print("EE: Please supply the host for which you want to show events");
132 return 1; 133 return 1;
133 elseif not prosody.hosts[host] then 134 elseif not prosody.hosts[host] then
134 print("EE: Unknown host: "..host); 135 print("EE: Unknown host: "..host);
137 138
138 require "core.storagemanager".initialize_host(host); 139 require "core.storagemanager".initialize_host(host);
139 local store = stores[host]; 140 local store = stores[host];
140 local c = 0; 141 local c = 0;
141 142
143 if arg.global then
144 if query_user then
145 print("WW: Specifying a user account is incompatible with --global. Showing only global events.");
146 end
147 query_user = "@";
148 end
149
142 local results, err = store:find(nil, { 150 local results, err = store:find(nil, {
143 with = arg.user; 151 with = query_user;
144 limit = arg.limit and tonumber(arg.limit) or nil; 152 limit = arg.limit and tonumber(arg.limit) or nil;
145 reverse = true; 153 reverse = true;
146 }) 154 })
147 if not results then 155 if not results then
148 print("EE: Failed to query audit log: "..tostring(err)); 156 print("EE: Failed to query audit log: "..tostring(err));
153 { title = "Date", key = "when", width = 19, mapper = function (when) return os.date("%Y-%m-%d %R:%S", when); end }; 161 { title = "Date", key = "when", width = 19, mapper = function (when) return os.date("%Y-%m-%d %R:%S", when); end };
154 { title = "Source", key = "source", width = "2p" }; 162 { title = "Source", key = "source", width = "2p" };
155 { title = "Event", key = "event_type", width = "2p" }; 163 { title = "Event", key = "event_type", width = "2p" };
156 }; 164 };
157 165
158 if arg.show_user ~= false and (not arg.global or arg.show_user) then 166 if arg.show_user ~= false and (not arg.global and not query_user) or arg.show_user then
159 table.insert(colspec, { 167 table.insert(colspec, {
160 title = "User", key = "username", width = "2p", 168 title = "User", key = "username", width = "2p",
161 mapper = function (user) 169 mapper = function (user)
162 if user == "@" then return ""; end 170 if user == "@" then return ""; end
163 if user:sub(-#host-1, -1) == ("@"..host) then 171 if user:sub(-#host-1, -1) == ("@"..host) then
164 return (user:gsub("@.+$", "")); 172 return (user:gsub("@.+$", ""));
165 end 173 end
166 end; 174 end;
167 }); 175 });
168 end 176 end
169 if arg.show_ip ~= false and (not arg.global and attach_ips or arg.show_ip) then 177 if arg.show_ip ~= false and (not arg.global and attach_ips) or arg.show_ip then
170 table.insert(colspec, { 178 table.insert(colspec, {
171 title = "IP", key = "ip", width = "2p"; 179 title = "IP", key = "ip", width = "2p";
172 }); 180 });
173 end 181 end
174 if arg.show_location ~= false and (not arg.global and attach_location or arg.show_location) then 182 if arg.show_location ~= false and (not arg.global and attach_location) or arg.show_location then
175 table.insert(colspec, { 183 table.insert(colspec, {
176 title = "Location", key = "country", width = 2; 184 title = "Location", key = "country", width = 2;
177 }); 185 });
178 end 186 end
179 187
181 189
182 print(string.rep("-", width)); 190 print(string.rep("-", width));
183 print(row()); 191 print(row());
184 print(string.rep("-", width)); 192 print(string.rep("-", width));
185 for _, entry, when, user in results do 193 for _, entry, when, user in results do
186 c = c + 1; 194 if arg.global ~= false or user ~= "@" then
187 print(row({ 195 c = c + 1;
188 when = when; 196 print(row({
189 source = entry.attr.source; 197 when = when;
190 event_type = entry.attr.type:gsub("%-", " "); 198 source = entry.attr.source;
191 username = user; 199 event_type = entry.attr.type:gsub("%-", " ");
192 ip = entry:get_child_text("remote-ip"); 200 username = user;
193 location = entry:find("location@country"); 201 ip = entry:get_child_text("remote-ip");
194 })); 202 location = entry:find("location@country");
203 }));
204 end
195 end 205 end
196 print(string.rep("-", width)); 206 print(string.rep("-", width));
197 print(("%d records displayed"):format(c)); 207 print(("%d records displayed"):format(c));
198 end 208 end