util/sasl.lua

changeset 1725
fb3137652ea6
parent 1657
1fe566011e2b
parent 1724
7682a34c13d0
child 2078
a5f154548154
equal deleted inserted replaced
1719:cf103398e643 1725:fb3137652ea6
36 local function new_plain(realm, credentials_handler) 36 local function new_plain(realm, credentials_handler)
37 local object = { mechanism = "PLAIN", realm = realm, credentials_handler = credentials_handler} 37 local object = { mechanism = "PLAIN", realm = realm, credentials_handler = credentials_handler}
38 function object.feed(self, message) 38 function object.feed(self, message)
39 if message == "" or message == nil then return "failure", "malformed-request" end 39 if message == "" or message == nil then return "failure", "malformed-request" end
40 local response = message 40 local response = message
41 local authorization = s_match(response, "([^&%z]+)") 41 local authorization = s_match(response, "([^%z]+)")
42 local authentication = s_match(response, "%z([^&%z]+)%z") 42 local authentication = s_match(response, "%z([^%z]+)%z")
43 local password = s_match(response, "%z[^&%z]+%z([^&%z]+)") 43 local password = s_match(response, "%z[^%z]+%z([^%z]+)")
44 44
45 if authentication == nil or password == nil then return "failure", "malformed-request" end 45 if authentication == nil or password == nil then return "failure", "malformed-request" end
46 self.username = authentication 46 self.username = authentication
47 local auth_success = self.credentials_handler("PLAIN", self.username, self.realm, password) 47 local auth_success = self.credentials_handler("PLAIN", self.username, self.realm, password)
48 48
126 end 126 end
127 end 127 end
128 return t_concat(p); 128 return t_concat(p);
129 end 129 end
130 local function parse(data) 130 local function parse(data)
131 message = {} 131 local message = {}
132 for k, v in gmatch(data, [[([%w%-]+)="?([^",]*)"?,?]]) do -- FIXME The hacky regex makes me shudder 132 for k, v in gmatch(data, [[([%w%-]+)="?([^",]*)"?,?]]) do -- FIXME The hacky regex makes me shudder
133 message[k] = v; 133 message[k] = v;
134 end 134 end
135 return message; 135 return message;
136 end 136 end

mercurial