142 module:add_handler("c2s_unauthed", "response", xmlns_sasl, sasl_handler); |
142 module:add_handler("c2s_unauthed", "response", xmlns_sasl, sasl_handler); |
143 |
143 |
144 local mechanisms_attr = { xmlns='urn:ietf:params:xml:ns:xmpp-sasl' }; |
144 local mechanisms_attr = { xmlns='urn:ietf:params:xml:ns:xmpp-sasl' }; |
145 local bind_attr = { xmlns='urn:ietf:params:xml:ns:xmpp-bind' }; |
145 local bind_attr = { xmlns='urn:ietf:params:xml:ns:xmpp-bind' }; |
146 local xmpp_session_attr = { xmlns='urn:ietf:params:xml:ns:xmpp-session' }; |
146 local xmpp_session_attr = { xmlns='urn:ietf:params:xml:ns:xmpp-session' }; |
147 module:add_event_hook("stream-features", function(session, features) |
147 module:hook("stream-features", function(event) |
148 if not session.username then |
148 local origin, features = event.origin, event.features; |
149 if secure_auth_only and not session.secure then |
149 if not origin.username then |
|
150 if secure_auth_only and not origin.secure then |
150 return; |
151 return; |
151 end |
152 end |
152 if module:get_option("anonymous_login") then |
153 if module:get_option("anonymous_login") then |
153 session.sasl_handler = new_sasl(session.host, anonymous_authentication_profile); |
154 origin.sasl_handler = new_sasl(origin.host, anonymous_authentication_profile); |
154 else |
155 else |
155 session.sasl_handler = new_sasl(session.host, default_authentication_profile); |
156 origin.sasl_handler = new_sasl(origin.host, default_authentication_profile); |
156 if not (module:get_option("allow_unencrypted_plain_auth")) and not session.secure then |
157 if not (module:get_option("allow_unencrypted_plain_auth")) and not origin.secure then |
157 session.sasl_handler:forbidden({"PLAIN"}); |
158 origin.sasl_handler:forbidden({"PLAIN"}); |
158 end |
159 end |
159 end |
160 end |
160 features:tag("mechanisms", mechanisms_attr); |
161 features:tag("mechanisms", mechanisms_attr); |
161 for k, v in pairs(session.sasl_handler:mechanisms()) do |
162 for k, v in pairs(origin.sasl_handler:mechanisms()) do |
162 features:tag("mechanism"):text(v):up(); |
163 features:tag("mechanism"):text(v):up(); |
163 end |
164 end |
164 features:up(); |
165 features:up(); |
165 else |
166 else |
166 features:tag("bind", bind_attr):tag("required"):up():up(); |
167 features:tag("bind", bind_attr):tag("required"):up():up(); |