X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=util%2Fjid.lua;h=069817c6167c46d0fffbe2a4e98bb71f604474b2;hb=e2615fb00f14ddcb436afd00c7729e1135667d42;hp=52fd0f44cd5d24b96ccdc9a2b36f7083328fbb73;hpb=4f19b56f6269d56ab4b26ba49d73ef76ba53a3f3;p=prosody.git diff --git a/util/jid.lua b/util/jid.lua index 52fd0f44..069817c6 100644 --- a/util/jid.lua +++ b/util/jid.lua @@ -1,20 +1,9 @@ --- Prosody IM v0.2 --- Copyright (C) 2008 Matthew Wild --- Copyright (C) 2008 Waqas Hussain +-- Prosody IM +-- Copyright (C) 2008-2010 Matthew Wild +-- Copyright (C) 2008-2010 Waqas Hussain -- --- This program is free software; you can redistribute it and/or --- modify it under the terms of the GNU General Public License --- as published by the Free Software Foundation; either version 2 --- of the License, or (at your option) any later version. --- --- This program is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. --- --- You should have received a copy of the GNU General Public License --- along with this program; if not, write to the Free Software --- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +-- This project is MIT/X11 licensed. Please see the +-- COPYING file in the source package for more information. -- @@ -26,26 +15,27 @@ local resourceprep = require "util.encodings".stringprep.resourceprep; module "jid" -function split(jid) +local function _split(jid) if not jid then return; end - local node, nodepos = match(jid, "^([^@]+)@()"); + local node, nodepos = match(jid, "^([^@/]+)@()"); local host, hostpos = match(jid, "^([^@/]+)()", nodepos) if node and not host then return nil, nil, nil; end local resource = match(jid, "^/(.+)$", hostpos); 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 node, host = _split(jid); if node and host then return node.."@"..host; end return host; end -function prepped_split(jid) - local node, host, resource = split(jid); +local function _prepped_split(jid) + local node, host, resource = _split(jid); if host then host = nameprep(host); if not host then return; end @@ -60,9 +50,10 @@ function prepped_split(jid) return node, host, resource; end end +prepped_split = _prepped_split; function prep(jid) - local node, host, resource = prepped_split(jid); + local node, host, resource = _prepped_split(jid); if host then if node then host = node .. "@" .. host; @@ -74,4 +65,30 @@ function prep(jid) return host; end +function join(node, host, resource) + if node and host and resource then + return node.."@"..host.."/"..resource; + elseif node and host then + return node.."@"..host; + elseif host and resource then + return host.."/"..resource; + elseif host then + return host; + end + return nil; -- Invalid JID +end + +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); + 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 + return true + end + return false +end + return _M;