eric7/WebBrowser/VirusTotal/VirusTotalApi.py

branch
eric7
changeset 8561
641304b46f08
parent 8358
144a6b854f70
child 8563
3c6547443fb2
diff -r 396fc1508450 -r 641304b46f08 eric7/WebBrowser/VirusTotal/VirusTotalApi.py
--- a/eric7/WebBrowser/VirusTotal/VirusTotalApi.py	Sun Aug 29 20:21:41 2021 +0200
+++ b/eric7/WebBrowser/VirusTotal/VirusTotalApi.py	Mon Aug 30 20:02:39 2021 +0200
@@ -8,6 +8,7 @@
 API class.
 """
 
+import contextlib
 import json
 
 from PyQt6.QtCore import pyqtSignal, QObject, QUrl, QUrlQuery, QByteArray
@@ -169,7 +170,7 @@
             WebBrowser.WebBrowserWindow.WebBrowserWindow.networkManager()
         )
         reply = nam.post(request, params)
-        reply.finished.connect(self.__submitUrlFinished)
+        reply.finished.connect(lambda: self.__submitUrlFinished(reply))
         self.__replies.append(reply)
     
     def __submitUrlFinished(self, reply):
@@ -216,7 +217,8 @@
             WebBrowser.WebBrowserWindow.WebBrowserWindow.networkManager()
         )
         reply = nam.post(request, params)
-        reply.finished.connect(self.__getUrlScanReportUrlFinished)
+        reply.finished.connect(
+            lambda: self.__getUrlScanReportUrlFinished(reply))
         self.__replies.append(reply)
     
     def __getUrlScanReportUrlFinished(self, reply):
@@ -252,7 +254,8 @@
             WebBrowser.WebBrowserWindow.WebBrowserWindow.networkManager()
         )
         reply = nam.post(request, params)
-        reply.finished.connect(self.__getFileScanReportUrlFinished)
+        reply.finished.connect(
+            lambda: self.__getFileScanReportUrlFinished(reply))
         self.__replies.append(reply)
     
     def __getFileScanReportUrlFinished(self, reply):
@@ -293,7 +296,8 @@
             WebBrowser.WebBrowserWindow.WebBrowserWindow.networkManager()
         )
         reply = nam.get(request)
-        reply.finished.connect(self.__getIpAddressReportFinished)
+        reply.finished.connect(
+            lambda: self.__getIpAddressReportFinished(reply))
         self.__replies.append(reply)
     
     def __getIpAddressReportFinished(self, reply):
@@ -365,6 +369,13 @@
         @param reply reference to the network reply
         @type QNetworkReply
         """
+        categoriesMapping = {
+            "bitdefender": ("BitDefender category",),
+            "sophos": ("sophos category", "Sophos category"),
+            "valkyrie": ("Comodo Valkyrie Verdict category",),
+            "alpha": ("alphaMountain.ai category",),
+            "forcepoint": ("Forcepoint ThreatSeeker category",),
+        }
         if reply.error() == QNetworkReply.NetworkError.NoError:
             result = json.loads(str(reply.readAll(), "utf-8"))
             if result["response_code"] == 0:
@@ -388,29 +399,29 @@
                     subdomains = result["subdomains"]
                 except KeyError:
                     subdomains = []
-                try:
-                    bdCategory = result["BitDefender category"]
-                except KeyError:
-                    bdCategory = self.tr("not available")
-                try:
-                    tmCategory = result["TrendMicro category"]
-                except KeyError:
-                    tmCategory = self.tr("not available")
-                try:
-                    wtsCategory = result["Websense ThreatSeeker category"]
-                except KeyError:
-                    wtsCategory = self.tr("not available")
+                categories = {}
+                for key, vtCategories in categoriesMapping.items():
+                    for vtCategory in vtCategories:
+                        with contextlib.suppress(KeyError):
+                            categories[key] = result[vtCategory]
+                            break
+                    else:
+                        categories[key] = "--"
                 try:
                     whois = result["whois"]
                 except KeyError:
                     whois = ""
+                # TODO: add "Webutation domain info" with subdict
+                #   "Adult content" (yes/no)
+                #   "Safety score"  (0-100, integer)
+                #   "Verdict"       (string)
                 
                 from .VirusTotalDomainReportDialog import (
                     VirusTotalDomainReportDialog
                 )
                 self.__domainReportDlg = VirusTotalDomainReportDialog(
                     self.__lastDomain, resolutions, urls, subdomains,
-                    bdCategory, tmCategory, wtsCategory, whois)
+                    categories, whois)
                 self.__domainReportDlg.show()
         self.__replies.remove(reply)
         reply.deleteLater()

eric ide

mercurial