Software /
code /
prosody
File
util/jid.lua @ 5915:e6fed1d80116
Back out 1b0ac7950129, as SSLv3 appears to still be in moderate use on the network. Also, although obsolete, SSLv3 isn't documented to have any weaknesses that TLS 1.0 (the most common version used today) doesn't also have. Get your act together clients!
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Tue, 12 Nov 2013 02:13:01 +0000 |
parent | 4407:f78c6f5fa090 |
child | 5776:bd0ff8ae98a8 |
child | 5944:f3817912e8b2 |
line wrap: on
line source
-- Prosody IM -- Copyright (C) 2008-2010 Matthew Wild -- Copyright (C) 2008-2010 Waqas Hussain -- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. -- local match = string.match; local nodeprep = require "util.encodings".stringprep.nodeprep; local nameprep = require "util.encodings".stringprep.nameprep; local resourceprep = require "util.encodings".stringprep.resourceprep; local escapes = { [" "] = "\\20"; ['"'] = "\\22"; ["&"] = "\\26"; ["'"] = "\\27"; ["/"] = "\\2f"; [":"] = "\\3a"; ["<"] = "\\3c"; [">"] = "\\3e"; ["@"] = "\\40"; ["\\"] = "\\5c"; }; local unescapes = {}; for k,v in pairs(escapes) do unescapes[v] = k; end module "jid" local function _split(jid) if not jid then return; end 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); if node and host then return node.."@"..host; end return host; end local function _prepped_split(jid) local node, host, resource = _split(jid); if host then host = nameprep(host); if not host then return; end if node then node = nodeprep(node); if not node then return; end end if resource then resource = resourceprep(resource); if not resource then return; 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 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 function escape(s) return s and (s:gsub(".", escapes)); end function unescape(s) return s and (s:gsub("\\%x%x", unescapes)); end return _M;