X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=util%2Fjid.lua;h=522fb126747439aea5add0853db74f35643fc014;hb=77921187498c8eba6ca32f9b3d3a71ace5909e24;hp=27afab3e275e2de573e8b18f6211a7fbebfb5476;hpb=41977f3e683e553a2a96b23b467e2ac6b8c3cec3;p=prosody.git diff --git a/util/jid.lua b/util/jid.lua index 27afab3e..522fb126 100644 --- a/util/jid.lua +++ b/util/jid.lua @@ -8,6 +8,7 @@ +local select = select; local match, sub = string.match, string.sub; local nodeprep = require "util.encodings".stringprep.nodeprep; local nameprep = require "util.encodings".stringprep.nameprep; @@ -23,9 +24,9 @@ local escapes = { 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) @@ -34,14 +35,17 @@ local function _split(jid) 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) - return jid and match(jid, "^[^/]+"); +local function bare(jid) + local node, host = split(jid); + 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 sub(host, -1, -1) == "." then -- Strip empty root label host = sub(host, 1, -2); @@ -59,9 +63,8 @@ local function _prepped_split(jid) return node, host, resource; end end -prepped_split = _prepped_split; -local function _join(node, host, resource) +local function join(node, host, resource) if not host then return end if node and resource then return node.."@"..host.."/"..resource; @@ -72,18 +75,17 @@ local function _join(node, host, resource) end return host; end -join = _join; -function prep(jid) - local node, host, resource = _prepped_split(jid); - return _join(node, host, resource); +local function prep(jid) + local node, host, resource = prepped_split(jid); + return join(node, host, resource); end -function compare(jid, acl) +local function compare(jid, acl) -- 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 @@ -92,7 +94,31 @@ function compare(jid, acl) 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 node(jid) + return (select(1, split(jid))); +end + +local function host(jid) + return (select(2, split(jid))); +end + +local function resource(jid) + return (select(3, split(jid))); +end -return _M; +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 { + split = split; + bare = bare; + prepped_split = prepped_split; + join = join; + prep = prep; + compare = compare; + node = node; + host = host; + resource = resource; + escape = escape; + unescape = unescape; +};