[nanny] Add CheckDomain method



commit d5f79fa00d787a563078154ffde8ba17fd2d574a
Author: Roberto Majadas <roberto majadas openshine com>
Date:   Mon Feb 1 22:15:48 2010 +0100

    Add CheckDomain method

 daemon/src/DansGuardianImporter.py |    2 +-
 daemon/src/FilterManager.py        |  100 +++++++++++++++++++++++++++++++++---
 daemon/src/NannyDBus.py            |    5 ++
 3 files changed, 99 insertions(+), 8 deletions(-)
---
diff --git a/daemon/src/DansGuardianImporter.py b/daemon/src/DansGuardianImporter.py
index 3786044..bd70c8f 100644
--- a/daemon/src/DansGuardianImporter.py
+++ b/daemon/src/DansGuardianImporter.py
@@ -276,7 +276,7 @@ class DansGuardianImporter (gobject.GObject):
             if is_black == True :
                 c.execute('insert into black_urls values ("%s", "%s")' % (category, regexp))
             else:
-                c.execute('insert into white_urlss values ("%s", "%s")' % (category, regexp))
+                c.execute('insert into white_urls values ("%s", "%s")' % (category, regexp))
         
             self.conn.commit()
             self.emit("progress-status",
diff --git a/daemon/src/FilterManager.py b/daemon/src/FilterManager.py
index 5837085..b023d62 100644
--- a/daemon/src/FilterManager.py
+++ b/daemon/src/FilterManager.py
@@ -41,7 +41,7 @@ def regexp(expr, item):
     return bool(nanny.gregex.regexp(expr, item))
 
 def on_db_connect(conn):
-    conn.create_function("regexp", 2, regexp)
+    conn.create_function("gregexp", 2, regexp)
 
 class FilterManager (gobject.GObject) :
     def __init__(self, quarterback):
@@ -63,12 +63,6 @@ class FilterManager (gobject.GObject) :
     def stop(self):
         print "Stop Filter Manager"
 
-    def check_domain(self, user_id, domain):
-        pass
-
-    def check_url(self, user_id, url):
-        pass
-
 
     #Custom Filters methods
     #------------------------------------
@@ -414,3 +408,95 @@ class FilterManager (gobject.GObject) :
         self.__save_pkg_filters_conf()
         return True
 
+    #Check methods
+    #------------------------------------
+
+    def check_domain(self, uid, domain):
+        print "Check Domain"
+        
+        idomain = ''
+        domain_list = domain.split(".")
+        domain_list.reverse()
+        for x in domain_list:
+            idomain = idomain + x + "."
+        idomain = idomain[:-1]
+
+        print "Idomain : %s" % idomain
+
+        blacklisted_categories = []
+        custom_black=False
+        
+        #Search in customfilters
+        sql_query = 'select distinct is_black from customfilters where uid="%s" and gregexp( "(.+\.|)" || regexp || ".*" , "%s")' % (uid, domain)
+        query = self.custom_filters_db.runQuery(sql_query)
+        block_d = BlockingDeferred(query)
+        try:
+            qr = block_d.blockOn()
+            if len(qr) > 0 :
+                for x in qr :
+                    if x[0] == 0:
+                        print "Custom WhiteListed"
+                        return [False, False, []]
+                    if x[0] == 1:
+                        custom_black = True
+                
+        except:
+            print "Something goes wrong checking Custom Filters"
+            return [False, False, []]
+        
+
+        #Search in whitelists
+        for db in self.pkg_filters_conf.keys():
+            if self.pkg_filters_conf[db]["users_info"].has_key(uid) :
+                if len(self.pkg_filters_conf[db]["users_info"][uid]) > 0 :
+                    sql_query = 'select distinct category from white_domains where gregexp(regexp || "(|\..+)" , "%s")' % idomain
+                    query = self.db_pools[db].runQuery(sql_query)
+                    block_d = BlockingDeferred(query)
+                    
+                    try:
+                        qr = block_d.blockOn()
+                        if len(qr) > 0:
+                            return [False, False, []]
+                        
+                    except:
+                        print "Something goes wrong checking domains"
+                        return [False, False, []]
+
+        if custom_black == True :
+            print "Custom BlackListed"
+            return [True, True, []]
+
+        #Search in blacklists
+        for db in self.pkg_filters_conf.keys():
+            if self.pkg_filters_conf[db]["users_info"].has_key(uid) :
+                if len(self.pkg_filters_conf[db]["users_info"][uid]) > 0 :
+                    
+                    category_c = ''
+                    for cat in self.pkg_filters_conf[db]["users_info"][uid] :
+                        if category_c != '' :
+                            category_c = category_c + " OR " + "category='%s' " % cat
+                        else:
+                            category_c = "category='%s' " % cat
+                    #category_c = category_c + "OR category='may_url_blocked'"
+                            
+                    regexp_c = 'gregexp(regexp || "(|\..+)" , "%s")' % idomain
+                    sql_query = 'select distinct category from black_domains where (%s) AND (%s)' % (category_c, regexp_c)
+                    query = self.db_pools[db].runQuery(sql_query)
+                    block_d = BlockingDeferred(query)
+                    
+                    try:
+                        qr = block_d.blockOn()
+                        for cat in qr :
+                            blacklisted_categories.append(cat[0])
+                    except:
+                        print "Something goes wrong checking domains"
+                        return [False, False, []]
+
+        if len (blacklisted_categories) > 0 :
+            return [True, True, blacklisted_categories]
+
+        return [False, False, []]
+                
+
+    def check_url(self, uid, url):
+        pass
diff --git a/daemon/src/NannyDBus.py b/daemon/src/NannyDBus.py
index 3d8e7a3..deb6752 100644
--- a/daemon/src/NannyDBus.py
+++ b/daemon/src/NannyDBus.py
@@ -178,6 +178,11 @@ class NannyDBus(dbus.service.Object):
         return self.quarterback.filter_manager.set_pkg_filter_user_categories(unicode(pkg_id),
                                                                               str(uid),
                                                                               list_c)
+
+    @dbus.service.method("org.gnome.Nanny.WebDatabase",
+                         in_signature='ss', out_signature='bbas')
+    def CheckDomain(self, uid, domain):
+        return self.quarterback.filter_manager.check_domain(uid, domain)
                                                                               
     @dbus.service.method("org.gnome.Nanny.WebDatabase",
                          in_signature='ssss', out_signature='b')



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]