-add_event_hook("stream-features",
- function (session, features)
- if not session.username then
- t_insert(features, "<mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>");
- -- TODO: Provide PLAIN only if TLS is active, this is a SHOULD from the introduction of RFC 4616. This behavior could be overridden via configuration but will issuing a warning or so.
- t_insert(features, "<mechanism>PLAIN</mechanism>");
- t_insert(features, "<mechanism>DIGEST-MD5</mechanism>");
- t_insert(features, "</mechanisms>");
- else
- t_insert(features, "<bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><required/></bind>");
- t_insert(features, "<session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>");
- end
- --send [[<register xmlns="http://jabber.org/features/iq-register"/> ]]
- end);
+local mechanisms_attr = { xmlns='urn:ietf:params:xml:ns:xmpp-sasl' };
+local bind_attr = { xmlns='urn:ietf:params:xml:ns:xmpp-bind' };
+local xmpp_session_attr = { xmlns='urn:ietf:params:xml:ns:xmpp-session' };
+module:add_event_hook("stream-features",
+ function (session, features)
+ if not session.username then
+ if secure_auth_only and not session.secure then
+ return;
+ end
+ features:tag("mechanisms", mechanisms_attr);
+ -- TODO: Provide PLAIN only if TLS is active, this is a SHOULD from the introduction of RFC 4616. This behavior could be overridden via configuration but will issuing a warning or so.
+ if config.get(session.host or "*", "core", "anonymous_login") then
+ features:tag("mechanism"):text("ANONYMOUS"):up();
+ else
+ features:tag("mechanism"):text("DIGEST-MD5"):up();
+ features:tag("mechanism"):text("PLAIN"):up();
+ end
+ features:up();
+ else
+ features:tag("bind", bind_attr):tag("required"):up():up();
+ features:tag("session", xmpp_session_attr):up();
+ end
+ end);