projects
/
prosody.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge 0.9->0.10
[prosody.git]
/
util
/
jid.lua
diff --git
a/util/jid.lua
b/util/jid.lua
index 0d9a864fa3b1d8a4faa5e747a96c30a1c47e20a9..76155ac70f81d7118693ab6f8bfe8d7116196b20 100644
(file)
--- a/
util/jid.lua
+++ b/
util/jid.lua
@@
-8,7
+8,7
@@
-local match
= string.match
;
+local match
, sub = string.match, string.sub
;
local nodeprep = require "util.encodings".stringprep.nodeprep;
local nameprep = require "util.encodings".stringprep.nameprep;
local resourceprep = require "util.encodings".stringprep.resourceprep;
local nodeprep = require "util.encodings".stringprep.nodeprep;
local nameprep = require "util.encodings".stringprep.nameprep;
local resourceprep = require "util.encodings".stringprep.resourceprep;
@@
-23,9
+23,9
@@
local escapes = {
local unescapes = {};
for k,v in pairs(escapes) do unescapes[v] = k; end
local unescapes = {};
for k,v in pairs(escapes) do unescapes[v] = k; end
-module "jid"
+local _ENV = nil;
-local function
_
split(jid)
+local function split(jid)
if not jid then return; end
local node, nodepos = match(jid, "^([^@/]+)@()");
local host, hostpos = match(jid, "^([^@/]+)()", nodepos)
if not jid then return; end
local node, nodepos = match(jid, "^([^@/]+)@()");
local host, hostpos = match(jid, "^([^@/]+)()", nodepos)
@@
-34,19
+34,21
@@
local function _split(jid)
if (not host) or ((not resource) and #jid >= hostpos) then return nil, nil, nil; end
return node, host, resource;
end
if (not host) or ((not resource) and #jid >= hostpos) then return nil, nil, nil; end
return node, host, resource;
end
-split = _split;
-function bare(jid)
- local node, host =
_
split(jid);
+
local
function bare(jid)
+ local node, host = split(jid);
if node and host then
return node.."@"..host;
end
return host;
end
if node and host then
return node.."@"..host;
end
return host;
end
-local function
_
prepped_split(jid)
- local node, host, resource =
_
split(jid);
+local function prepped_split(jid)
+ local node, host, resource = split(jid);
if host then
if host then
+ if sub(host, -1, -1) == "." then -- Strip empty root label
+ host = sub(host, 1, -2);
+ end
host = nameprep(host);
if not host then return; end
if node then
host = nameprep(host);
if not host then return; end
if node then
@@
-60,39
+62,29
@@
local function _prepped_split(jid)
return node, host, resource;
end
end
return node, host, resource;
end
end
-prepped_split = _prepped_split;
-
-function prep(jid)
- local node, host, resource = _prepped_split(jid);
- if host then
- if node then
- host = node .. "@" .. host;
- end
- if resource then
- host = host .. "/" .. resource;
- end
- end
- return host;
-end
-function join(node, host, resource)
- if node and host and resource then
+local function join(node, host, resource)
+ if not host then return end
+ if node and resource then
return node.."@"..host.."/"..resource;
return node.."@"..host.."/"..resource;
- elseif node
and host
then
+ elseif node then
return node.."@"..host;
return node.."@"..host;
- elseif
host and
resource then
+ elseif resource then
return host.."/"..resource;
return host.."/"..resource;
- elseif host then
- return host;
end
end
- return
nil; -- Invalid JID
+ return
host;
end
end
-function compare(jid, acl)
+local function prep(jid)
+ local node, host, resource = prepped_split(jid);
+ return join(node, host, resource);
+end
+
+local function compare(jid, acl)
-- compare jid to single acl rule
-- TODO compare to table of rules?
-- compare jid to single acl rule
-- TODO compare to table of rules?
- local jid_node, jid_host, jid_resource =
_
split(jid);
- local acl_node, acl_host, acl_resource =
_
split(acl);
+ local jid_node, jid_host, jid_resource = split(jid);
+ local acl_node, acl_host, acl_resource = split(acl);
if ((acl_node ~= nil and acl_node == jid_node) or acl_node == nil) and
((acl_host ~= nil and acl_host == jid_host) or acl_host == nil) and
((acl_resource ~= nil and acl_resource == jid_resource) or acl_resource == nil) then
if ((acl_node ~= nil and acl_node == jid_node) or acl_node == nil) and
((acl_host ~= nil and acl_host == jid_host) or acl_host == nil) and
((acl_resource ~= nil and acl_resource == jid_resource) or acl_resource == nil) then
@@
-101,7
+93,16
@@
function compare(jid, acl)
return false
end
return false
end
-function escape(s) return s and (s:gsub(".", escapes)); end
-function unescape(s) return s and (s:gsub("\\%x%x", unescapes)); end
+
local
function escape(s) return s and (s:gsub(".", escapes)); end
+
local
function unescape(s) return s and (s:gsub("\\%x%x", unescapes)); end
-return _M;
+return {
+ split = split;
+ bare = bare;
+ prepped_split = prepped_split;
+ join = join;
+ prep = prep;
+ compare = compare;
+ escape = escape;
+ unescape = unescape;
+};