From e21c59154e07a8c2fca2a03f57b92e16718006fa Mon Sep 17 00:00:00 2001
From: Kim Alvefur <zash@zash.se>
Date: Fri, 16 Jul 2010 00:36:02 +0200
Subject: util.jid: compare() added, with some tests.

---
 tests/test_util_jid.lua | 11 +++++++++++
 util/jid.lua            | 13 +++++++++++++
 2 files changed, 24 insertions(+)

diff --git a/tests/test_util_jid.lua b/tests/test_util_jid.lua
index 5cc1390b..e91585bd 100644
--- a/tests/test_util_jid.lua
+++ b/tests/test_util_jid.lua
@@ -54,3 +54,14 @@ function bare(bare)
 	assert_equal(bare("user@host/"), nil, "invalid JID is nil");
 end
 
+function compare(compare)
+	assert_equal(compare("host", "host"), true, "host should match");
+	assert_equal(compare("host", "other-host"), false, "host should not match");
+	assert_equal(compare("other-user@host/resource", "host"), true, "host should match");
+	assert_equal(compare("other-user@host", "user@host"), false, "user should not match");
+	assert_equal(compare("user@host", "host"), true, "host should match");
+	assert_equal(compare("user@host/resource", "host"), true, "host should match");
+	assert_equal(compare("user@host/resource", "user@host"), true, "user and host should match");
+	assert_equal(compare("user@other-host", "host"), false, "host should not match");
+	assert_equal(compare("user@other-host", "user@host"), false, "host should not match");
+end
diff --git a/util/jid.lua b/util/jid.lua
index ba9730fa..9128ce4e 100644
--- a/util/jid.lua
+++ b/util/jid.lua
@@ -78,4 +78,17 @@ function join(node, host, resource)
 	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;
-- 
cgit v1.2.3