[nanny] Check domains and urls with the new checker sys
- From: Roberto Majadas <telemaco src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [nanny] Check domains and urls with the new checker sys
- Date: Wed, 3 Feb 2010 18:20:00 +0000 (UTC)
commit 5f259a075884bd06097b45eb0c4682eec2cb66a4
Author: Roberto Majadas <roberto majadas openshine com>
Date: Wed Feb 3 19:19:20 2010 +0100
Check domains and urls with the new checker sys
daemon/src/FilterManager.py | 46 ++++++++++++----
daemon/src/LinuxWebContentFiltering.py | 2 +-
daemon/src/proxy/TwistedProxy.py | 89 ++++----------------------------
3 files changed, 45 insertions(+), 92 deletions(-)
---
diff --git a/daemon/src/FilterManager.py b/daemon/src/FilterManager.py
index 826983a..d1c950d 100644
--- a/daemon/src/FilterManager.py
+++ b/daemon/src/FilterManager.py
@@ -32,7 +32,7 @@ import tempfile
import tarfile
from glob import glob
-from twisted.internet import reactor, threads
+from twisted.internet import reactor, threads, defer
from twisted.enterprise import adbapi
import nanny.gregex
@@ -426,6 +426,16 @@ class FilterManager (gobject.GObject) :
#Check methods
#------------------------------------
+ def check_domain_defer (self, uid, domain):
+ d = defer.Deferred()
+ reactor.callLater(0.05, d.callback, self.check_domain(uid, domain))
+ return d
+
+ def check_url_defer(self, uid, host, port, request, rest, pre_check):
+ d = defer.Deferred()
+ reactor.callLater(0.05, d.callback, self.check_url(uid, host, port, request, rest, pre_check))
+ return d
+
def check_domain(self, uid, domain):
print "Check Domain"
@@ -457,7 +467,7 @@ class FilterManager (gobject.GObject) :
except:
print "Something goes wrong checking Custom Filters"
- return [False, False, []]
+ return [[False, False], []]
#Search in whitelists
@@ -471,15 +481,15 @@ class FilterManager (gobject.GObject) :
try:
qr = block_d.blockOn()
if len(qr) > 0:
- return [False, False, []]
+ return [[False, False], []]
except:
print "Something goes wrong checking domains"
- return [False, False, []]
+ return [[False, False], []]
if custom_black == True :
print "Custom BlackListed"
- return [True, False, []]
+ return [[True, False], []]
#Search in blacklists
for db in self.pkg_filters_conf.keys():
@@ -506,20 +516,32 @@ class FilterManager (gobject.GObject) :
blacklisted_categories.append(cat[0])
except:
print "Something goes wrong checking domains"
- return [False, False, []]
+ return [[False, False], []]
if len (blacklisted_categories) > 0 :
if "may_url_blocked" in blacklisted_categories :
blacklisted_categories.pop(blacklisted_categories.index("may_url_blocked"))
if len (blacklisted_categories) > 0 :
- return [True, True, blacklisted_categories]
+ return [[True, True], blacklisted_categories]
else:
- return [False, True, blacklisted_categories]
+ return [[False, True], blacklisted_categories]
else:
- return [True, False, blacklisted_categories]
+ return [[True, False], blacklisted_categories]
- return [False, False, []]
+ return [[False, False], []]
- def check_url(self, uid, url):
- pass
+ def check_url(self, uid, host, port, request, rest, pre_check):
+ if pre_check[0] == True :
+ print 'Uri Validation stopped because domain is blocked, %s' % (host + request.uri)
+ return False, request, rest, host, port
+
+ if pre_check[1] == False :
+ print 'Uri validation verified in pre-check %s' % (host + request.uri)
+ return True, request, rest, host, port
+
+ uri = host + request.uri
+ is_ok = True
+
+ print 'Uri validation passed by default %s' % (host + request.uri)
+ return True, request, rest, host, port
diff --git a/daemon/src/LinuxWebContentFiltering.py b/daemon/src/LinuxWebContentFiltering.py
index 8b4a38d..519fa47 100644
--- a/daemon/src/LinuxWebContentFiltering.py
+++ b/daemon/src/LinuxWebContentFiltering.py
@@ -76,7 +76,7 @@ class LinuxWebContentFiltering(gobject.GObject) :
def __start_proxy(self, quarterback, uid):
if not self.services.has_key(uid) :
- root = ProxyService(uid, self.dbpool)
+ root = ProxyService(uid, quarterback.filter_manager)
sc = service.IServiceCollection(self.app)
site = server.Site(root)
diff --git a/daemon/src/proxy/TwistedProxy.py b/daemon/src/proxy/TwistedProxy.py
index 3cb585d..2aea209 100644
--- a/daemon/src/proxy/TwistedProxy.py
+++ b/daemon/src/proxy/TwistedProxy.py
@@ -198,12 +198,12 @@ class ReverseProxyResource(resource.Resource) :
proxyClientFactoryClass = ProxyClientFactory
- def __init__(self, uid, dbpool, reactor=reactor, domain_level=0, pre_check=[False, False]):
+ def __init__(self, uid, filter_manager, reactor=reactor, domain_level=0, pre_check=[False, False]):
resource.Resource.__init__(self)
self.reactor = reactor
self.uid = uid
self.url = ''
- self.dbpool = dbpool
+ self.filter_manager = filter_manager
self.domain_level = domain_level
self.pre_check = pre_check
self.domains_blocked_cache = {}
@@ -214,32 +214,32 @@ class ReverseProxyResource(resource.Resource) :
if self.domain_level ==0 :
ts = reactor.seconds()
- if self.domains_blocked_cache.has_key(host) and ( ts - self.domains_blocked_cache[host][0] ) <= 120 :
+ if self.domains_blocked_cache.has_key(host) and ( ts - self.domains_blocked_cache[host][0] ) <= 10 :
print self.domains_blocked_cache[host][1]
block_d = BlockingDeferred(self.domains_blocked_cache[host][1])
try:
- pre_check = block_d.blockOn()
+ pre_check, categories = block_d.blockOn()
print "Host %s , verified [cached] (pre_check=%s)" % (host, pre_check)
except:
print "Something wrong validating domain %s" % host
pre_check = [False, False]
else:
- query = self.dbpool.runInteraction(self.__validate_site, host)
+ query = self.filter_manager.check_domain_defer(self.uid, host)
self.domains_blocked_cache[host]=[reactor.seconds(), query]
block_d = BlockingDeferred(query)
try:
- pre_check = block_d.blockOn()
+ pre_check, categories = block_d.blockOn()
print "Host %s , verified (pre_check=%s)" % (host, pre_check)
except:
print "Something wrong validating domain %s" % host
pre_check = [False, False]
- return ReverseProxyResource(self.uid, self.dbpool, reactor=reactor,
+ return ReverseProxyResource(self.uid, self.filter_manager, reactor=reactor,
domain_level=self.domain_level + 1,
pre_check=pre_check)
else:
- return ReverseProxyResource(self.uid, self.dbpool, reactor=reactor,
+ return ReverseProxyResource(self.uid, self.filter_manager, reactor=reactor,
domain_level=self.domain_level + 1,
pre_check=self.pre_check)
@@ -258,70 +258,11 @@ class ReverseProxyResource(resource.Resource) :
self.request = request
- query = self.dbpool.runInteraction(self.__validate_uri, host, port, request, rest, self.pre_check)
- query.addCallback(self.__validate_request_cb)
+ d = self.filter_manager.check_url_defer (self.uid, host, port, request, rest, self.pre_check)
+ d.addCallback(self.__validate_request_cb)
return server.NOT_DONE_YET
-
- def __validate_site(self, txn, host):
- found = False
- block_domain = False
- may_block_url = False
-
- sql="SELECT * FROM Website WHERE uid = '%s' AND ((type = 'domain' AND '%s' GLOB body) OR (type = 'domain' AND '%s' GLOB '*.' || body) OR (type = 'url' AND body GLOB '%s'))" % (self.uid, host, host, "*" + host + "*")
- txn.execute(sql)
- select = txn.fetchall()
-
- if len(select) > 0 :
- for web in select:
- if web[1] == True and web[5] == "domain" :
- block_domain = True
- break
-
- for web in select:
- if web[1] == True and web[5] == "url" :
- may_block_url = True
- break
-
- for web in select:
- if web[1] == False and web[5] == "domain" :
- print "Domain WhiteListed : %s" % host
- block_domain = False
- break
-
- return block_domain, may_block_url
- def __validate_uri(self, txn, host, port, request, rest, pre_check):
- if pre_check[0] == True :
- print 'Uri Validation stopped because domain is blocked, %s' % (host + request.uri)
- return False, request, rest, host, port
-
- if pre_check[1] == False :
- print 'Uri validation verified in pre-check %s' % (host + request.uri)
- return True, request, rest, host, port
-
- uri = host + request.uri
- is_ok = True
-
- sql="SELECT * FROM Website WHERE uid = '%s' AND type = 'url' AND '%s' GLOB '*' || body || '*' " % (self.uid, uri)
- txn.execute(sql)
- select = txn.fetchall()
-
- if len(select) > 0 :
- for web in select:
- if web[1] == True :
- print 'Uri blocked : %s ' % (web[6])
- is_ok = False
- break
-
- for web in select:
- if web[1] == False :
- print 'Uri WhiteListed : %s ' % (web[6])
- is_ok = False
- break
-
- return is_ok, request, rest, host, port
-
def __validate_request_cb(self, data):
is_ok = data[0]
request = data[1]
@@ -353,13 +294,3 @@ class ReverseProxyResource(resource.Resource) :
return host, port
-if __name__ == "__main__" :
- import sys
- from twisted.python import log
- log.startLogging(sys.stdout)
-
- dbpool = adbapi.ConnectionPool('sqlite3', '/var/lib/nanny/webs.db', check_same_thread=False)
- root = ReverseProxyResource("1001", dbpool)
- site = server.Site(root)
- reactor.listenTCP(8080, site)
- reactor.run()
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]