Diff

mod_audit_auth/mod_audit_auth.lua @ 5856:75dee6127829

Merge upstream
author Trần H. Trung <xmpp:trần.h.trung@trung.fun>
date Tue, 06 Feb 2024 18:32:01 +0700
parent 5803:f199bff16f1f
child 5930:cc30c4b5f006
line wrap: on
line diff
--- a/mod_audit_auth/mod_audit_auth.lua	Tue Aug 29 23:51:17 2023 +0700
+++ b/mod_audit_auth/mod_audit_auth.lua	Tue Feb 06 18:32:01 2024 +0700
@@ -1,16 +1,54 @@
+local jid = require"util.jid";
+local st = require "util.stanza";
+
 module:depends("audit");
 -- luacheck: read globals module.audit
 
+local only_passwords = module:get_option_boolean("audit_auth_passwords_only", true);
+
 module:hook("authentication-failure", function(event)
 	local session = event.session;
-	module:audit(session.sasl_handler.username, "authentication-failure", {
+	module:audit(jid.join(session.sasl_handler.username, module.host), "authentication-failure", {
 		session = session,
 	});
 end)
 
 module:hook("authentication-success", function(event)
 	local session = event.session;
-	module:audit(session.sasl_handler.username, "authentication-success", {
+	if only_passwords and session.sasl_handler.fast then
+		return;
+	end
+	module:audit(jid.join(session.sasl_handler.username, module.host), "authentication-success", {
 		session = session,
 	});
 end)
+
+module:hook("client_management/new-client", function (event)
+	local session, client = event.session, event.client;
+
+	local client_info = st.stanza("client", { id = client.id });
+
+	if client.user_agent then
+		local user_agent = st.stanza("user-agent", { xmlns = "urn:xmpp:sasl:2" })
+		if client.user_agent.software then
+			user_agent:text_tag("software", client.user_agent.software, { id = client.user_agent.software_id; version = client.user_agent.software_version });
+		end
+		if client.user_agent.device then
+			user_agent:text_tag("device", client.user_agent.device);
+		end
+		if client.user_agent.uri then
+			user_agent:text_tag("uri", client.user_agent.uri);
+		end
+		client_info:add_child(user_agent);
+	end
+
+	if client.legacy then
+		client_info:text_tag("legacy");
+	end
+
+	module:audit(jid.join(session.username, module.host), "new-client", {
+		session = session;
+		custom = {
+		};
+	});
+end);