mirror of
https://github.com/bjc/prosody.git
synced 2025-04-04 21:57:45 +03:00
Improve jid.split() and jid.bare() to pass new test cases with invalid JIDs
This commit is contained in:
parent
c36a8743fe
commit
48e7f5ea64
2 changed files with 35 additions and 7 deletions
|
@ -11,4 +11,24 @@ function split(split)
|
|||
test("server", nil, "server", nil );
|
||||
test("server/resource", nil, "server", "resource" );
|
||||
test(nil, nil, nil , nil );
|
||||
|
||||
test("node@/server", nil, nil, nil , nil );
|
||||
end
|
||||
|
||||
function bare(bare)
|
||||
assert_equal(bare("user@host"), "user@host", "bare JID remains bare");
|
||||
assert_equal(bare("host"), "host", "Host JID remains host");
|
||||
assert_equal(bare("host/resource"), "host", "Host JID with resource becomes host");
|
||||
assert_equal(bare("user@host/resource"), "user@host", "user@host JID with resource becomes user@host");
|
||||
assert_equal(bare("user@/resource"), nil, "invalid JID is nil");
|
||||
assert_equal(bare("@/resource"), nil, "invalid JID is nil");
|
||||
assert_equal(bare("@/"), nil, "invalid JID is nil");
|
||||
assert_equal(bare("/"), nil, "invalid JID is nil");
|
||||
assert_equal(bare(""), nil, "invalid JID is nil");
|
||||
assert_equal(bare("@"), nil, "invalid JID is nil");
|
||||
assert_equal(bare("user@"), nil, "invalid JID is nil");
|
||||
assert_equal(bare("user@@"), nil, "invalid JID is nil");
|
||||
assert_equal(bare("user@@host"), nil, "invalid JID is nil");
|
||||
assert_equal(bare("user@@host/resource"), nil, "invalid JID is nil");
|
||||
assert_equal(bare("user@host/"), nil, "invalid JID is nil");
|
||||
end
|
||||
|
|
18
util/jid.lua
18
util/jid.lua
|
@ -1,20 +1,28 @@
|
|||
|
||||
local match = string.match;
|
||||
|
||||
local tostring = tostring;
|
||||
local print = print
|
||||
module "jid"
|
||||
|
||||
function split(jid)
|
||||
if not jid then return; end
|
||||
-- TODO verify JID, and return; if invalid
|
||||
local node = match(jid, "^([^@]+)@");
|
||||
local server = (node and match(jid, ".-@([^@/]+)")) or match(jid, "^([^@/]+)");
|
||||
local resource = match(jid, "/(.+)$");
|
||||
return node, server, resource;
|
||||
local node, nodelen = match(jid, "^([^@]+)@()");
|
||||
local host, hostlen = match(jid, "^([^@/]+)()", nodelen)
|
||||
if node and not host then return nil, nil, nil; end
|
||||
local resource = match(jid, "^/(.+)$", hostlen);
|
||||
if (not host) or ((not resource) and #jid >= hostlen) then return nil, nil, nil; end
|
||||
return node, host, resource;
|
||||
end
|
||||
|
||||
function bare(jid)
|
||||
local node, host = split(jid);
|
||||
if node and host then
|
||||
return node.."@"..host;
|
||||
elseif host then
|
||||
return host;
|
||||
end
|
||||
return nil;
|
||||
end
|
||||
|
||||
return _M;
|
Loading…
Add table
Add a link
Reference in a new issue