17 local tostring = tostring; |
17 local tostring = tostring; |
18 local st = require "util.stanza"; |
18 local st = require "util.stanza"; |
19 local generate_uuid = require "util.uuid".generate; |
19 local generate_uuid = require "util.uuid".generate; |
20 local t_insert, t_concat = table.insert, table.concat; |
20 local t_insert, t_concat = table.insert, table.concat; |
21 local to_byte, to_char = string.byte, string.char; |
21 local to_byte, to_char = string.byte, string.char; |
|
22 local to_unicode = require "util.encodings".idna.to_unicode; |
22 local s_match = string.match; |
23 local s_match = string.match; |
23 local gmatch = string.gmatch |
24 local gmatch = string.gmatch |
24 local string = string |
25 local string = string |
25 local math = require "math" |
26 local math = require "math" |
26 local type = type |
27 local type = type |
197 return "failure", "malformed-request", "Missing entry for digest-uri in SASL message." |
198 return "failure", "malformed-request", "Missing entry for digest-uri in SASL message." |
198 end |
199 end |
199 |
200 |
200 --TODO maybe realm support |
201 --TODO maybe realm support |
201 self.username = response["username"]; |
202 self.username = response["username"]; |
202 local password_encoding, Y = self.password_handler(response["username"], domain, response["realm"], "DIGEST-MD5", decoder); |
203 local password_encoding, Y = self.password_handler(response["username"], to_unicode(domain), response["realm"], "DIGEST-MD5", decoder); |
203 if Y == nil then return "failure", "not-authorized" |
204 if Y == nil then return "failure", "not-authorized" |
204 elseif Y == false then return "failure", "account-disabled" end |
205 elseif Y == false then return "failure", "account-disabled" end |
205 local A1 = ""; |
206 local A1 = ""; |
206 if response.authzid then |
207 if response.authzid then |
207 if response.authzid == self.username.."@"..self.realm then |
208 if response.authzid == self.username.."@"..self.realm then |