WebBrowser/SafeBrowsing/SafeBrowsingCache.py

Fri, 04 Aug 2017 18:38:45 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 04 Aug 2017 18:38:45 +0200
branch
safe_browsing
changeset 5829
d3448873ced3
parent 5820
b610cb5b501a
child 5847
fd1262c3fa79
permissions
-rw-r--r--

Finished coding the safe browsing module of the new web browser.

5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2017 Detlev Offenbach <detlev@die-offenbachs.de>
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a cache for Google Safe Browsing.
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 #
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 # Some part of this code were ported from gglsbl.storage and adapted
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 # to QtSql.
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 #
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 # https://github.com/afilipovich/gglsbl
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 #
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16
5820
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
17 from __future__ import unicode_literals, division
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 import os
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
5829
d3448873ced3 Finished coding the safe browsing module of the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5820
diff changeset
21 from PyQt5.QtCore import QObject, QByteArray, QCryptographicHash, \
d3448873ced3 Finished coding the safe browsing module of the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5820
diff changeset
22 QCoreApplication, QEventLoop
5818
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
23 from PyQt5.QtSql import QSql, QSqlDatabase, QSqlQuery
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
25 from .SafeBrowsingUtilities import toHex
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
26
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 class ThreatList(object):
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 Class implementing the threat list info.
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 def __init__(self, threatType, platformType, threatEntryType):
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 Constructor
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 @param threatType threat type
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 @type str
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 @param platformType platform type
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 @type str
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 @param threatEntryType threat entry type
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 @type str
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 """
5818
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
43 self.threatType = threatType
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
44 self.platformType = platformType
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
45 self.threatEntryType = threatEntryType
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 @classmethod
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 def fromApiEntry(cls, entry):
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 Class method to instantiate a threat list given a threat list entry
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 dictionary.
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 @param entry threat list entry dictionary
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 @type dict
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 @return instantiated object
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 @rtype ThreatList
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 return cls(entry['threatType'], entry['platformType'],
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 entry['threatEntryType'])
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 def asTuple(self):
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 Public method to convert the object to a tuple.
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 @return tuple containing the threat list info
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 @rtype tuple of (str, str, str)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 """
5818
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
68 return (self.threatType, self.platformType, self.threatEntryType)
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 def __repr__(self):
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 Special method to generate a printable representation.
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 @return printable representation
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 @rtype str
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 return '/'.join(self.asTuple())
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79
5820
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
80 class HashPrefixList(object):
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
81 """
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
82 Class implementing a container for threat list data.
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
83 """
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
84 def __init__(self, prefixLength, rawHashes):
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
85 """
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
86 Constructor
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
87
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
88 @param prefixLength length of each hash prefix
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
89 @type int
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
90 @param rawHashes raw hash prefixes of given length concatenated and
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
91 sorted in lexicographical order
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
92 @type str
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
93 """
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
94 self.__prefixLength = prefixLength
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
95 self.__rawHashes = rawHashes
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
96
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
97 def __len__(self):
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
98 """
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
99 Special method to calculate the number of entries.
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
100
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
101 @return length
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
102 @rtype int
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
103 """
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
104 return len(self.__rawHashes) // self.__prefixLength
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
105
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
106 def __iter__(self):
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
107 """
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
108 Special method to iterate over the raw hashes.
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
109
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
110 @return iterator object
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
111 @rtype iterator
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
112 """
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
113 n = self.__prefixLength
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
114 return (self.__rawHashes[index:index + n]
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
115 for index in range(0, len(self.__rawHashes), n)
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
116 )
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
117
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
118
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 class SafeBrowsingCache(QObject):
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 Class implementing a cache for Google Safe Browsing.
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 create_threat_list_stmt = """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 CREATE TABLE threat_list
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 (threat_type character varying(128) NOT NULL,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 platform_type character varying(128) NOT NULL,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 threat_entry_type character varying(128) NOT NULL,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 client_state character varying(42),
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 timestamp timestamp without time zone DEFAULT current_timestamp,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 PRIMARY KEY (threat_type, platform_type, threat_entry_type)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 )
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 drop_threat_list_stmt = """DROP TABLE IF EXISTS threat_list"""
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 create_full_hashes_stmt = """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 CREATE TABLE full_hash
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 (value BLOB NOT NULL,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 threat_type character varying(128) NOT NULL,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 platform_type character varying(128) NOT NULL,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 threat_entry_type character varying(128) NOT NULL,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 downloaded_at timestamp without time zone DEFAULT current_timestamp,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 expires_at timestamp without time zone
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 NOT NULL DEFAULT current_timestamp,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 malware_threat_type varchar(32),
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 PRIMARY KEY (value, threat_type, platform_type, threat_entry_type)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 )
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 drop_full_hashes_stmt = """DROP TABLE IF EXISTS full_hash"""
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 create_hash_prefix_stmt = """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 CREATE TABLE hash_prefix
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 (value BLOB NOT NULL,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 cue character varying(4) NOT NULL,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 threat_type character varying(128) NOT NULL,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 platform_type character varying(128) NOT NULL,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 threat_entry_type character varying(128) NOT NULL,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 timestamp timestamp without time zone DEFAULT current_timestamp,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 negative_expires_at timestamp without time zone
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 NOT NULL DEFAULT current_timestamp,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 PRIMARY KEY (value, threat_type, platform_type, threat_entry_type),
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 FOREIGN KEY(threat_type, platform_type, threat_entry_type)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 REFERENCES threat_list(threat_type, platform_type, threat_entry_type)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 ON DELETE CASCADE
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 )
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 drop_hash_prefix_stmt = """DROP TABLE IF EXISTS hash_prefix"""
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 create_full_hash_cue_idx = """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 CREATE INDEX idx_hash_prefix_cue ON hash_prefix (cue)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 drop_full_hash_cue_idx = """DROP INDEX IF EXISTS idx_hash_prefix_cue"""
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 create_full_hash_expires_idx = """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 CREATE INDEX idx_full_hash_expires_at ON full_hash (expires_at)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 drop_full_hash_expires_idx = """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 DROP INDEX IF EXISTS idx_full_hash_expires_at
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 create_full_hash_value_idx = """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 CREATE INDEX idx_full_hash_value ON full_hash (value)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 drop_full_hash_value_idx = """DROP INDEX IF EXISTS idx_full_hash_value"""
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 def __init__(self, dbPath, parent=None):
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 Constructor
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 @param dbPath path to store the cache DB into
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 @type str
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 @param parent reference to the parent object
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 @type QObject
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194 super(SafeBrowsingCache, self).__init__(parent)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 self.__connectionName = "SafeBrowsingCache"
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 if not os.path.exists(dbPath):
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 os.makedirs(dbPath)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 self.__dbFileName = os.path.join(dbPath, "SafeBrowsingCache.db")
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202 preparationNeeded = not os.path.exists(self.__dbFileName)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 self.__openCacheDb()
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 if preparationNeeded:
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
206 self.prepareCacheDb()
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207
5818
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
208 def close(self):
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
209 """
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
210 Public method to close the database.
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
211 """
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
212 if QSqlDatabase.database(self.__connectionName).isOpen():
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
213 QSqlDatabase.database(self.__connectionName).close()
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
214 QSqlDatabase.removeDatabase(self.__language)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
215
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 def __openCacheDb(self):
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 Private method to open the cache database.
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 @return flag indicating the open state
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 @rtype bool
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223 db = QSqlDatabase.database(self.__connectionName, False)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 if not db.isValid():
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 # the database connection is a new one
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 db = QSqlDatabase.addDatabase("QSQLITE", self.__connectionName)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 db.setDatabaseName(self.__dbFileName)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 opened = db.open()
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 if not opened:
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 QSqlDatabase.removeDatabase(self.__connectionName)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 else:
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232 opened = True
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 return opened
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
235 def prepareCacheDb(self):
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 """
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
237 Public method to prepare the cache database.
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 db = QSqlDatabase.database(self.__connectionName)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 db.transaction()
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 try:
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 query = QSqlQuery(db)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 # step 1: drop old tables
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 query.exec_(self.drop_threat_list_stmt)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 query.exec_(self.drop_full_hashes_stmt)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 query.exec_(self.drop_hash_prefix_stmt)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 # step 2: drop old indices
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 query.exec_(self.drop_full_hash_cue_idx)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 query.exec_(self.drop_full_hash_expires_idx)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 query.exec_(self.drop_full_hash_value_idx)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 # step 3: create tables
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 query.exec_(self.create_threat_list_stmt)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 query.exec_(self.create_full_hashes_stmt)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 query.exec_(self.create_hash_prefix_stmt)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 # step 4: create indices
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256 query.exec_(self.create_full_hash_cue_idx)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 query.exec_(self.create_full_hash_expires_idx)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 query.exec_(self.create_full_hash_value_idx)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 finally:
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 del query
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 db.commit()
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 def lookupFullHashes(self, hashValues):
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 Public method to get a list of threat lists and expiration flag
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 for the given hashes if a hash is blacklisted.
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
267
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 @param hashValues list of hash values to look up
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 @type list of bytes
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270 @return list of tuples containing the threat list info and the
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 expiration flag
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 @rtype list of tuple of (ThreatList, bool)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 queryStr = """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 SELECT threat_type, platform_type, threat_entry_type,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 expires_at < current_timestamp AS has_expired
5818
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
277 FROM full_hash WHERE value IN ({0})
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 output = []
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 db = QSqlDatabase.database(self.__connectionName)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 if db.isOpen():
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 db.transaction()
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 try:
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 query = QSqlQuery(db)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 query.prepare(
5829
d3448873ced3 Finished coding the safe browsing module of the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5820
diff changeset
287 queryStr.format(",".join(["?"] * len(hashValues))))
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 for hashValue in hashValues:
5820
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
289 query.addBindValue(QByteArray(hashValue),
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
290 QSql.In | QSql.Binary)
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 query.exec_()
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 while query.next():
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 threatType = query.value(0)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 platformType = query.value(1)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 threatEntryType = query.value(2)
5829
d3448873ced3 Finished coding the safe browsing module of the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5820
diff changeset
298 hasExpired = bool(query.value(3))
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 threatList = ThreatList(threatType, platformType,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 threatEntryType)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 output.append((threatList, hasExpired))
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 del query
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 finally:
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 db.commit()
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306 return output
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 def lookupHashPrefix(self, prefixes):
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 Public method to look up hash prefixes in the local cache.
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311
5818
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
312 @param prefixes list of hash prefixes to look up
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
313 @type list of bytes
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
314 @return list of tuples containing the threat list, full hash and
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
315 negative cache expiration flag
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
316 @rtype list of tuple of (ThreatList, bytes, bool)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 queryStr = """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 SELECT value,threat_type,platform_type,threat_entry_type,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 negative_expires_at < current_timestamp AS negative_cache_expired
5818
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
321 FROM hash_prefix WHERE cue IN ({0})
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 """
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
323 output = []
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
325 db = QSqlDatabase.database(self.__connectionName)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 if db.isOpen():
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 db.transaction()
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 try:
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329 query = QSqlQuery(db)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 query.prepare(
5829
d3448873ced3 Finished coding the safe browsing module of the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5820
diff changeset
331 queryStr.format(",".join(["?"] * len(prefixes))))
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332 for prefix in prefixes:
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
333 query.addBindValue(prefix)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
335 query.exec_()
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
336
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
337 while query.next():
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
338 fullHash = bytes(query.value(0))
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
339 threatType = query.value(1)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
340 platformType = query.value(2)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 threatEntryType = query.value(3)
5829
d3448873ced3 Finished coding the safe browsing module of the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5820
diff changeset
342 negativeCacheExpired = bool(query.value(4))
5817
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 threatList = ThreatList(threatType, platformType,
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
344 threatEntryType)
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
345 output.append((threatList, fullHash, negativeCacheExpired))
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 del query
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
347 finally:
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 db.commit()
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
349
a5f6c9128500 Started implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
350 return output
5818
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
351
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
352 def storeFullHash(self, threatList, hashValue, cacheDuration,
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
353 malwareThreatType):
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
354 """
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
355 Public method to store full hash data in the cache database.
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
356
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
357 @param threatList threat list info object
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
358 @type ThreatList
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
359 @param hashValue hash to be stored
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
360 @type bytes
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
361 @param cacheDuration duration the data should remain in the cache
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
362 @type int or float
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
363 @param malwareThreatType threat type of the malware
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
364 @type str
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
365 """
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
366 insertQueryStr = """
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
367 INSERT OR IGNORE INTO full_hash
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
368 (value, threat_type, platform_type, threat_entry_type,
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
369 malware_threat_type, downloaded_at)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
370 VALUES
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
371 (?, ?, ?, ?, ?, current_timestamp)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
372 """
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
373 updateQueryStr = """
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
374 UPDATE full_hash SET
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
375 expires_at=datetime(current_timestamp, '+{0} SECONDS')
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
376 WHERE value=? AND threat_type=? AND platform_type=? AND
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
377 threat_entry_type=?
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
378 """.format(int(cacheDuration))
5818
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
379
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
380 db = QSqlDatabase.database(self.__connectionName)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
381 if db.isOpen():
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
382 db.transaction()
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
383 try:
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
384 query = QSqlQuery(db)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
385 query.prepare(insertQueryStr)
5820
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
386 query.addBindValue(QByteArray(hashValue),
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
387 QSql.In | QSql.Binary)
5818
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
388 query.addBindValue(threatList.threatType)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
389 query.addBindValue(threatList.platformType)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
390 query.addBindValue(threatList.threatEntryType)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
391 query.addBindValue(malwareThreatType)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
392 query.exec_()
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
393 del query
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
394
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
395 query = QSqlQuery(db)
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
396 query.prepare(updateQueryStr)
5820
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
397 query.addBindValue(QByteArray(hashValue),
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
398 QSql.In | QSql.Binary)
5818
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
399 query.addBindValue(threatList.threatType)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
400 query.addBindValue(threatList.platformType)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
401 query.addBindValue(threatList.threatEntryType)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
402 query.exec_()
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
403 del query
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
404 finally:
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
405 db.commit()
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
406
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
407 def deleteHashPrefixList(self, threatList):
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
408 """
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
409 Public method to delete hash prefixes for a given threat list.
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
410
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
411 @param threatList threat list info object
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
412 @type ThreatList
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
413 """
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
414 queryStr = """
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
415 DELETE FROM hash_prefix
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
416 WHERE threat_type=? AND platform_type=? AND threat_entry_type=?
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
417 """
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
418
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
419 db = QSqlDatabase.database(self.__connectionName)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
420 if db.isOpen():
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
421 db.transaction()
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
422 try:
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
423 query = QSqlQuery(db)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
424 query.prepare(queryStr)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
425 query.addBindValue(threatList.threatType)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
426 query.addBindValue(threatList.platformType)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
427 query.addBindValue(threatList.threatEntryType)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
428 query.exec_()
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
429 del query
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
430 finally:
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
431 db.commit()
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
432
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
433 def cleanupFullHashes(self, keepExpiredFor=43200):
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
434 """
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
435 Public method to clean up full hash entries expired more than the
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
436 given time.
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
437
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
438 @param keepExpiredFor time period in seconds of entries to be expired
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
439 @type int or float
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
440 """
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
441 queryStr = """
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
442 DELETE FROM full_hash
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
443 WHERE expires_at=datetime(current_timestamp, '{0} SECONDS')
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
444 """.format(int(keepExpiredFor))
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
445
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
446 db = QSqlDatabase.database(self.__connectionName)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
447 if db.isOpen():
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
448 db.transaction()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
449 try:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
450 query = QSqlQuery(db)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
451 query.prepare(queryStr)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
452 query.exec_()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
453 del query
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
454 finally:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
455 db.commit()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
456
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
457 def updateHashPrefixExpiration(self, threatList, hashPrefix,
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
458 negativeCacheDuration):
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
459 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
460 Public method to update the hash prefix expiration time.
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
461
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
462 @param threatList threat list info object
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
463 @type ThreatList
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
464 @param hashPrefix hash prefix
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
465 @type bytes
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
466 @param negativeCacheDuration time in seconds the entry should remain
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
467 in the cache
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
468 @type int or float
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
469 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
470 queryStr = """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
471 UPDATE hash_prefix
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
472 SET negative_expires_at=datetime(current_timestamp, '+{0} SECONDS')
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
473 WHERE value=? AND threat_type=? AND platform_type=? AND
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
474 threat_entry_type=?
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
475 """.format(int(negativeCacheDuration))
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
476
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
477 db = QSqlDatabase.database(self.__connectionName)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
478 if db.isOpen():
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
479 db.transaction()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
480 try:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
481 query = QSqlQuery(db)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
482 query.prepare(queryStr)
5820
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
483 query.addBindValue(QByteArray(hashPrefix),
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
484 QSql.In | QSql.Binary)
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
485 query.addBindValue(threatList.threatType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
486 query.addBindValue(threatList.platformType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
487 query.addBindValue(threatList.threatEntryType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
488 query.exec_()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
489 del query
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
490 finally:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
491 db.commit()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
492
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
493 def getThreatLists(self):
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
494 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
495 Public method to get the available threat lists.
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
496
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
497 @return list of available threat lists
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
498 @rtype list of tuples of (ThreatList, str)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
499 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
500 queryStr = """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
501 SELECT threat_type,platform_type,threat_entry_type,client_state
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
502 FROM threat_list
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
503 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
504 output = []
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
505
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
506 db = QSqlDatabase.database(self.__connectionName)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
507 if db.isOpen():
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
508 db.transaction()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
509 try:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
510 query = QSqlQuery(db)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
511 query.prepare(queryStr)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
512
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
513 query.exec_()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
514
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
515 while query.next():
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
516 threatType = query.value(0)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
517 platformType = query.value(1)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
518 threatEntryType = query.value(2)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
519 clientState = query.value(3)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
520 threatList = ThreatList(threatType, platformType,
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
521 threatEntryType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
522 output.append((threatList, clientState))
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
523 del query
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
524 finally:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
525 db.commit()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
526
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
527 return output
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
528
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
529 def addThreatList(self, threatList):
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
530 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
531 Public method to add a threat list to the cache.
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
532
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
533 @param threatList threat list to be added
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
534 @type ThreatList
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
535 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
536 queryStr = """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
537 INSERT OR IGNORE INTO threat_list
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
538 (threat_type, platform_type, threat_entry_type, timestamp)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
539 VALUES (?, ?, ?, current_timestamp)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
540 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
541
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
542 db = QSqlDatabase.database(self.__connectionName)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
543 if db.isOpen():
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
544 db.transaction()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
545 try:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
546 query = QSqlQuery(db)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
547 query.prepare(queryStr)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
548 query.addBindValue(threatList.threatType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
549 query.addBindValue(threatList.platformType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
550 query.addBindValue(threatList.threatEntryType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
551 query.exec_()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
552 del query
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
553 finally:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
554 db.commit()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
555
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
556 def deleteThreatList(self, threatList):
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
557 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
558 Public method to delete a threat list from the cache.
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
559
5820
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
560 @param threatList threat list to be deleted
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
561 @type ThreatList
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
562 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
563 queryStr = """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
564 DELETE FROM threat_list
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
565 WHERE threat_type=? AND platform_type=? AND threat_entry_type=?
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
566 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
567
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
568 db = QSqlDatabase.database(self.__connectionName)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
569 if db.isOpen():
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
570 db.transaction()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
571 try:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
572 query = QSqlQuery(db)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
573 query.prepare(queryStr)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
574 query.addBindValue(threatList.threatType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
575 query.addBindValue(threatList.platformType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
576 query.addBindValue(threatList.threatEntryType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
577 query.exec_()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
578 del query
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
579 finally:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
580 db.commit()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
581
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
582 def updateThreatListClientState(self, threatList, clientState):
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
583 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
584 Public method to update the client state of a threat list.
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
585
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
586 @param threatList threat list to update the client state for
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
587 @type ThreatList
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
588 @param clientState new client state
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
589 @type str
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
590 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
591 queryStr = """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
592 UPDATE threat_list SET timestamp=current_timestamp, client_state=?
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
593 WHERE threat_type=? AND platform_type=? AND threat_entry_type=?
5818
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
594 """
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
595
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
596 db = QSqlDatabase.database(self.__connectionName)
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
597 if db.isOpen():
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
598 db.transaction()
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
599 try:
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
600 query = QSqlQuery(db)
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
601 query.prepare(queryStr)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
602 query.addBindValue(clientState)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
603 query.addBindValue(threatList.threatType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
604 query.addBindValue(threatList.platformType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
605 query.addBindValue(threatList.threatEntryType)
5818
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
606 query.exec_()
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
607 del query
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
608 finally:
cae9956be67e Continued implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5817
diff changeset
609 db.commit()
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
610
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
611 def hashPrefixListChecksum(self, threatList):
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
612 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
613 Public method to calculate the SHA256 checksum for an alphabetically
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
614 sorted concatenated list of hash prefixes.
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
615
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
616 @param threatList threat list to calculate checksum for
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
617 @type ThreatList
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
618 @return SHA256 checksum
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
619 @rtype bytes
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
620 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
621 queryStr = """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
622 SELECT value FROM hash_prefix
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
623 WHERE threat_type=? AND platform_type=? AND threat_entry_type=?
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
624 ORDER BY value
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
625 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
626 checksum = None
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
627
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
628 db = QSqlDatabase.database(self.__connectionName)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
629 if db.isOpen():
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
630 db.transaction()
5829
d3448873ced3 Finished coding the safe browsing module of the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5820
diff changeset
631 sha256Hash = QCryptographicHash(QCryptographicHash.Sha256)
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
632 try:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
633 query = QSqlQuery(db)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
634 query.prepare(queryStr)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
635 query.addBindValue(threatList.threatType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
636 query.addBindValue(threatList.platformType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
637 query.addBindValue(threatList.threatEntryType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
638
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
639 query.exec_()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
640
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
641 while query.next():
5829
d3448873ced3 Finished coding the safe browsing module of the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5820
diff changeset
642 sha256Hash.addData(query.value(0))
d3448873ced3 Finished coding the safe browsing module of the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5820
diff changeset
643 QCoreApplication.processEvents(QEventLoop.AllEvents, 200)
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
644 del query
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
645 finally:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
646 db.commit()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
647
5829
d3448873ced3 Finished coding the safe browsing module of the new web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5820
diff changeset
648 checksum = bytes(sha256Hash.result())
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
649
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
650 return checksum
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
651
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
652 def populateHashPrefixList(self, threatList, prefixes):
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
653 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
654 Public method to populate the hash prefixes for a threat list.
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
655
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
656 @param threatList threat list of the hash prefixes
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
657 @type ThreatList
5820
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
658 @param prefixes list of hash prefixes to be inserted
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
659 @type HashPrefixList
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
660 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
661 queryStr = """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
662 INSERT INTO hash_prefix
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
663 (value, cue, threat_type, platform_type, threat_entry_type,
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
664 timestamp)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
665 VALUES (?, ?, ?, ?, ?, current_timestamp)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
666 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
667
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
668 db = QSqlDatabase.database(self.__connectionName)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
669 if db.isOpen():
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
670 db.transaction()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
671 try:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
672 for prefix in prefixes:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
673 query = QSqlQuery(db)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
674 query.prepare(queryStr)
5820
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
675 query.addBindValue(QByteArray(prefix),
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
676 QSql.In | QSql.Binary)
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
677 query.addBindValue(toHex(prefix[:4]))
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
678 query.addBindValue(threatList.threatType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
679 query.addBindValue(threatList.platformType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
680 query.addBindValue(threatList.threatEntryType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
681 query.exec_()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
682 del query
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
683 finally:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
684 db.commit()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
685
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
686 def getHashPrefixValuesToRemove(self, threatList, indexes):
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
687 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
688 Public method to get the hash prefix values to be removed from the
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
689 cache.
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
690
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
691 @param threatList threat list to remove prefixes from
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
692 @type ThreatList
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
693 @param indexes list of indexes of prefixes to be removed
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
694 @type list of int
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
695 @return list of hash prefixes to be removed
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
696 @rtype list of bytes
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
697 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
698 queryStr = """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
699 SELECT value FROM hash_prefix
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
700 WHERE threat_type=? AND platform_type=? AND threat_entry_type=?
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
701 ORDER BY value
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
702 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
703 indexes = set(indexes)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
704 output = []
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
705
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
706 db = QSqlDatabase.database(self.__connectionName)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
707 if db.isOpen():
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
708 db.transaction()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
709 try:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
710 query = QSqlQuery(db)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
711 query.prepare(queryStr)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
712 query.addBindValue(threatList.threatType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
713 query.addBindValue(threatList.platformType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
714 query.addBindValue(threatList.threatEntryType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
715
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
716 query.exec_()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
717
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
718 index = 0
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
719 while query.next():
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
720 if index in indexes:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
721 prefix = bytes(query.value(0))
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
722 output.append(prefix)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
723 index += 1
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
724 del query
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
725 finally:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
726 db.commit()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
727
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
728 return output
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
729
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
730 def removeHashPrefixIndices(self, threatList, indexes):
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
731 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
732 Public method to remove hash prefixes from the cache.
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
733
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
734 @param threatList threat list to delete hash prefixes of
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
735 @type ThreatList
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
736 @param indexes list of indexes of prefixes to be removed
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
737 @type list of int
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
738 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
739 queryStr = """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
740 DELETE FROM hash_prefix
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
741 WHERE threat_type=? AND platform_type=? AND
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
742 threat_entry_type=? AND value IN ({0})
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
743 """
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
744 batchSize = 40
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
745
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
746 prefixesToRemove = self.getHashPrefixValuesToRemove(
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
747 threatList, indexes)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
748 if prefixesToRemove:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
749 db = QSqlDatabase.database(self.__connectionName)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
750 if db.isOpen():
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
751 db.transaction()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
752 try:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
753 for index in range(0, len(prefixesToRemove), batchSize):
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
754 removeBatch = \
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
755 prefixesToRemove[index:(index + batchSize)]
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
756
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
757 query = QSqlQuery(db)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
758 query.prepare(
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
759 queryStr.format(",".join(["?"] * len(removeBatch)))
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
760 )
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
761 query.addBindValue(threatList.threatType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
762 query.addBindValue(threatList.platformType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
763 query.addBindValue(threatList.threatEntryType)
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
764 for prefix in removeBatch:
5820
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
765 query.addBindValue(QByteArray(prefix),
b610cb5b501a Started implementing the safe browsing manager and management dialog.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5819
diff changeset
766 QSql.In | QSql.Binary)
5819
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
767 query.exec_()
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
768 del query
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
769 finally:
69fa45e95673 Finished implementing the SafeBrowsingCache class.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5818
diff changeset
770 db.commit()

eric ide

mercurial