Fri, 31 May 2013 16:55:50 +0200
Changed the name of the cache directory of the web browser to reflect the Qt and Webkit version number in order to avoid cahe trouble.
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
1 | # -*- coding: utf-8 -*- |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
2 | |
2302
f29e9405c851
Updated copyright for 2013.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
1509
diff
changeset
|
3 | # Copyright (c) 2011 - 2013 Detlev Offenbach <detlev@die-offenbachs.de> |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
4 | # |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
5 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
6 | """ |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
7 | Module implementing the <a href="http://www.virustotal.com">VirusTotal</a> API class. |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
8 | """ |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
9 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
10 | import json |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
11 | |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
12 | from PyQt4.QtCore import QObject, QUrl, QByteArray, pyqtSignal |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | from PyQt4.QtNetwork import QNetworkRequest, QNetworkReply, QNetworkAccessManager |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
15 | import Helpviewer.HelpWindow |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | import Preferences |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | |
992
566e87428fc8
Fixed a few PEP-8 issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
979
diff
changeset
|
19 | |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | class VirusTotalAPI(QObject): |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
21 | """ |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
22 | Class implementing the <a href="http://www.virustotal.com">VirusTotal</a> API. |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
23 | |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
24 | @signal checkServiceKeyFinished(bool, str) emitted after the service key check |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
25 | has been performed. It gives a flag indicating validity (boolean) and |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
26 | an error message in case of a network error (string). |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
27 | @signal submitUrlError(str) emitted with the error string, if the URL scan |
992
566e87428fc8
Fixed a few PEP-8 issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
979
diff
changeset
|
28 | submission returned an error. |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
29 | @signal urlScanReport(str) emitted with the URL of the URL scan report page |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
30 | @signal fileScanReport(str) emitted with the URL of the file scan report page |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
31 | """ |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
32 | checkServiceKeyFinished = pyqtSignal(bool, str) |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
33 | submitUrlError = pyqtSignal(str) |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
34 | urlScanReport = pyqtSignal(str) |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
35 | fileScanReport = pyqtSignal(str) |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
36 | |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | TestServiceKeyScanID = \ |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
38 | "4feed2c2e352f105f6188efd1d5a558f24aee6971bdf96d5fdb19c197d6d3fad" |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
39 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
40 | ServiceResult_RequestLimitReached = -2 |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
41 | ServiceResult_InvalidServiceKey = -1 |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
42 | ServiceResult_ItemNotPresent = 0 |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
43 | ServiceResult_ItemPresent = 1 |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
44 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
45 | GetFileReportPattern = "{0}://www.virustotal.com/api/get_file_report.json" |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
46 | ScanUrlPattern = "{0}://www.virustotal.com/api/scan_url.json" |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
47 | GetUrlReportPattern = "{0}://www.virustotal.com/api/get_url_report.json" |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
48 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | ReportUrlScanPagePattern = "http://www.virustotal.com/url-scan/report.html?id={0}" |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
50 | ReportFileScanPagePattern = "http://www.virustotal.com/file-scan/report.html?id={0}" |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
51 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
52 | SearchUrl = "http://www.virustotal.com/search.html" |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
53 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
54 | def __init__(self, parent=None): |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
55 | """ |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | Constructor |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
57 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
58 | @param parent reference to the parent object (QObject) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
59 | """ |
1131
7781e396c903
Changed the code to use super() to access the superclass.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
992
diff
changeset
|
60 | super().__init__(parent) |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
61 | |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
62 | self.__replies = [] |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
63 | |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
64 | self.__loadSettings() |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
65 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
66 | def __loadSettings(self): |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
67 | """ |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | Private method to load the settings. |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
69 | """ |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
70 | if Preferences.getHelp("VirusTotalSecure"): |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
71 | protocol = "https" |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
72 | else: |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
73 | protocol = "http" |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
74 | self.GetFileReportUrl = self.GetFileReportPattern.format(protocol) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | self.ScanUrlUrl = self.ScanUrlPattern.format(protocol) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
76 | self.GetUrlReportUrl = self.GetUrlReportPattern.format(protocol) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
78 | self.errorMessages = { |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
79 | -2: self.trUtf8("Request limit has been reached."), |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
80 | -1: self.trUtf8("Invalid key given."), |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
81 | 0: self.trUtf8("Requested item is not present.") |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | } |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
83 | |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
84 | def preferencesChanged(self): |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
85 | """ |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
86 | Public slot to handle a change of preferences. |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
87 | """ |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
88 | self.__loadSettings() |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
89 | |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | def checkServiceKeyValidity(self, key, protocol=""): |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | """ |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | Public method to check the validity of the given service key. |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | @param key service key (string) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
95 | @param protocol protocol used to access VirusTotal (string) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | @return flag indicating validity (boolean) and an error message in |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | case of a network error (string) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
98 | """ |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
99 | if protocol == "": |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
100 | urlStr = self.GetFileReportUrl |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
101 | else: |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
102 | urlStr = self.GetFileReportPattern.format(protocol) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
103 | request = QNetworkRequest(QUrl(urlStr)) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
104 | request.setHeader(QNetworkRequest.ContentTypeHeader, |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105 | "application/x-www-form-urlencoded") |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
106 | params = QByteArray("key={0}&resource={1}".format( |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107 | key, self.TestServiceKeyScanID)) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
108 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109 | nam = Helpviewer.HelpWindow.HelpWindow.networkAccessManager() |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
110 | reply = nam.post(request, params) |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
111 | reply.finished.connect(self.__checkServiceKeyValidityFinished) |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
112 | self.__replies.append(reply) |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
113 | |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
114 | def __checkServiceKeyValidityFinished(self): |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
115 | """ |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
116 | Private slot to determine the result of the service key validity check. |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
117 | """ |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
118 | res = False |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
119 | msg = "" |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
120 | |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
121 | reply = self.sender() |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
122 | if reply.error() == QNetworkReply.NoError: |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
123 | result = json.loads(str(reply.readAll(), "utf-8")) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124 | if result["result"] != self.ServiceResult_InvalidServiceKey: |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
125 | res = True |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
126 | else: |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
127 | msg = reply.errorString() |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
128 | self.__replies.remove(reply) |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
129 | |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
130 | self.checkServiceKeyFinished.emit(res, msg) |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
131 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
132 | def submitUrl(self, url): |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
133 | """ |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
134 | Public method to submit an URL to be scanned. |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
135 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
136 | @param url url to be scanned (QUrl) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
137 | @return flag indicating success (boolean) and the scan ID (string) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
138 | """ |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
139 | request = QNetworkRequest(QUrl(self.ScanUrlUrl)) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
140 | request.setHeader(QNetworkRequest.ContentTypeHeader, |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
141 | "application/x-www-form-urlencoded") |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
142 | params = QByteArray( |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
143 | "key={0}&url=".format(Preferences.getHelp("VirusTotalServiceKey")))\ |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
144 | .append(QUrl.toPercentEncoding(url.toString())) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
145 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
146 | nam = Helpviewer.HelpWindow.HelpWindow.networkAccessManager() |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
147 | reply = nam.post(request, params) |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
148 | reply.finished.connect(self.__submitUrlFinished) |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
149 | self.__replies.append(reply) |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
150 | |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
151 | def __submitUrlFinished(self): |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
152 | """ |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
153 | Private slot to determine the result of the URL scan submission. |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
154 | """ |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
155 | reply = self.sender() |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
156 | if reply.error() == QNetworkReply.NoError: |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
157 | result = json.loads(str(reply.readAll(), "utf-8")) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
158 | if result["result"] == self.ServiceResult_ItemPresent: |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
159 | self.urlScanReport.emit( |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
160 | self.ReportUrlScanPagePattern.format(result["scan_id"])) |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
161 | self.__getFileScanReportUrl(result["scan_id"]) |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
162 | else: |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
163 | self.submitUrlError.emit(self.errorMessages[result["result"]]) |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
164 | else: |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
165 | self.submitUrlError.emit(reply.errorString()) |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
166 | self.__replies.remove(reply) |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
167 | |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
168 | def __getFileScanReportUrl(self, scanId): |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
169 | """ |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
170 | Private method to get the report URL for a file scan. |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
171 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
172 | @param scanId ID of the scan to get the report URL for (string) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
173 | @return file scan report URL (string) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
174 | """ |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
175 | request = QNetworkRequest(QUrl(self.GetUrlReportUrl)) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
176 | request.setHeader(QNetworkRequest.ContentTypeHeader, |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
177 | "application/x-www-form-urlencoded") |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
178 | params = QByteArray("key={0}&resource={1}".format( |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
179 | Preferences.getHelp("VirusTotalServiceKey"), scanId)) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
180 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
181 | nam = Helpviewer.HelpWindow.HelpWindow.networkAccessManager() |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
182 | reply = nam.post(request, params) |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
183 | reply.finished.connect(self.__getFileScanReportUrlFinished) |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
184 | self.__replies.append(reply) |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
185 | |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
186 | def __getFileScanReportUrlFinished(self): |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
187 | """ |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
188 | Private slot to determine the result of the file scan report URL request. |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
189 | """ |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
190 | reply = self.sender() |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
191 | if reply.error() == QNetworkReply.NoError: |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
192 | result = json.loads(str(reply.readAll(), "utf-8")) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
193 | if "file-report" in result: |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
194 | self.fileScanReport.emit( |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
195 | self.ReportFileScanPagePattern.format(result["file-report"])) |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
196 | self.__replies.remove(reply) |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
197 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
198 | @classmethod |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
199 | def getSearchRequestData(cls, term): |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
200 | """ |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
201 | Class method to assemble the search request data structure. |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
202 | |
979
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
203 | @param term search term (string) |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
204 | @return tuple of network request object, operation and parameters |
0ae0c8852d31
Refined the VirusTotal code.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
978
diff
changeset
|
205 | (QNetworkRequest, QNetworkAccessManager.Operation, QByteArray) |
978
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
206 | """ |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
207 | request = QNetworkRequest(QUrl(cls.SearchUrl)) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
208 | request.setHeader(QNetworkRequest.ContentTypeHeader, |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
209 | "application/x-www-form-urlencoded") |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
210 | op = QNetworkAccessManager.PostOperation |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
211 | params = QByteArray("chain=").append(QUrl.toPercentEncoding(term)) |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
212 | |
11f8adbcac97
Added an interface to VirusTotal to the web browser.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
213 | return (request, op, params) |