From 794180ac5fbdb21fade2ab734a3c262ef430d753 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Wed, 25 Oct 2023 07:45:51 +0200
Subject: [PATCH] update project

---
 README.md                                |   2 +-
 bin/ciscoapi/cisco-bug.py                |   2 +-
 bin/ciscoapi/cisco-eox.py                |   3 +-
 bin/ciscoapi/cisco-psirt.py              |   2 +-
 bin/ciscoapi/cisco-sn2info.py            |   2 +-
 bin/ciscoapi/cisco_live_cycle_utils.py   |  70 +------------------
 bin/ciscoapi/ciscoapi.py                 |  84 +----------------------
 gui/views/inv_cisco_livecycle.py         |   7 +-
 mkp/inv_cisco_support-0.2.1-20231024.mkp | Bin 0 -> 25071 bytes
 packages/inv_cisco_support               |   2 +-
 10 files changed, 15 insertions(+), 159 deletions(-)
 create mode 100644 mkp/inv_cisco_support-0.2.1-20231024.mkp

diff --git a/README.md b/README.md
index 2d3c1a1..82734ca 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[PACKAGE]: ../../raw/master/mkp/inv_cisco_support-0.2.1-20231008.mkp "inv_cisco_support-0.2.1-20231008.mkp"
+[PACKAGE]: ../../raw/master/mkp/inv_cisco_support-0.2.1-20231024.mkp "inv_cisco_support-0.2.1-20231024.mkp"
 # Cisco support APIs inventory plugin
 
 Adds live cycle information for Cisco devices to the inventory.
diff --git a/bin/ciscoapi/cisco-bug.py b/bin/ciscoapi/cisco-bug.py
index e766bef..fc312c4 100755
--- a/bin/ciscoapi/cisco-bug.py
+++ b/bin/ciscoapi/cisco-bug.py
@@ -32,7 +32,7 @@ from ciscoapi import (
 
 def main():
     settings = Settings()
-    access_token = AccessToken(settings.client_id, settings.client_secret)
+    access_token = AccessToken(settings.client_id, settings.client_secret, settings.proxies)
     configure_logger(log_level=settings.log_level)
 
     bug_path = settings.base_path + '/bug'
diff --git a/bin/ciscoapi/cisco-eox.py b/bin/ciscoapi/cisco-eox.py
index 630ca3c..e5b8f7c 100755
--- a/bin/ciscoapi/cisco-eox.py
+++ b/bin/ciscoapi/cisco-eox.py
@@ -115,7 +115,8 @@ def save_serials(eox, path):
 
 def main():
     settings = Settings()
-    access_token = AccessToken(settings.client_id, settings.client_secret)
+    print(settings.proxies)
+    access_token = AccessToken(settings.client_id, settings.client_secret, settings.proxies)
     configure_logger(log_level=settings.log_level)
 
     eox_path = settings.base_path + '/EoX'
diff --git a/bin/ciscoapi/cisco-psirt.py b/bin/ciscoapi/cisco-psirt.py
index 3b0db9b..876d50c 100755
--- a/bin/ciscoapi/cisco-psirt.py
+++ b/bin/ciscoapi/cisco-psirt.py
@@ -144,7 +144,7 @@ def _update_psirt_id(psirt_records: list, family_name: str, paths: Paths):
 
 def main():
     settings = Settings()
-    access_token = AccessToken(settings.client_id, settings.client_secret)
+    access_token = AccessToken(settings.client_id, settings.client_secret, settings.proxies)
     configure_logger(log_level=settings.log_level)
 
     refresh = Refresh(
diff --git a/bin/ciscoapi/cisco-sn2info.py b/bin/ciscoapi/cisco-sn2info.py
index 1a45b2b..f7c6945 100755
--- a/bin/ciscoapi/cisco-sn2info.py
+++ b/bin/ciscoapi/cisco-sn2info.py
@@ -69,7 +69,7 @@ def sn2info_save_serials(sn2infos, path):
 
 def main():
     settings = Settings()
-    access_token = AccessToken(settings.client_id, settings.client_secret)
+    access_token = AccessToken(settings.client_id, settings.client_secret, settings.proxies)
     configure_logger(log_level=settings.log_level)
 
     sn2info_dir = settings.base_path + '/sn2info'
diff --git a/bin/ciscoapi/cisco_live_cycle_utils.py b/bin/ciscoapi/cisco_live_cycle_utils.py
index a32ddf9..17dc773 100755
--- a/bin/ciscoapi/cisco_live_cycle_utils.py
+++ b/bin/ciscoapi/cisco_live_cycle_utils.py
@@ -12,12 +12,6 @@ import os
 import time
 import random
 import sys
-# import json
-# import copy
-# from ciscoapi import (
-#     Settings,
-#     get_product_mdf_information_by_pid,
-# )
 
 
 def configure_logger(_path: str = '', _log_to_console: bool = True, log_level: str = 'INFO'):
@@ -30,21 +24,6 @@ def configure_logger(_path: str = '', _log_to_console: bool = True, log_level: s
     else:
         logging.getLogger().setLevel(logging.WARNING)
 
-    # log_file = path
-    # # create a new file > 5 mb size
-    # log_handler_file = logging.handlers.RotatingFileHandler(
-    #     log_file,
-    #     mode='a',
-    #     maxBytes=5 * 1024 * 1024,
-    #     backupCount=10,
-    #     # encoding=None,
-    #     # delay=0
-    # )
-
-    # log_handler_file.setFormatter(log_formatter)
-    # log_handler_file.setLevel(logging.INFO)
-    # log.addHandler(log_handler_file)
-
     log_handler_console = logging.StreamHandler(sys.stdout)
     log_handler_console.setFormatter(log_formatter)
     log_handler_console.setLevel(logging.INFO)
@@ -90,7 +69,7 @@ def get_ids_from_dir(directory, refresh_time: int = 0):
     return ids
 
 
-# read list of sub directories from directory (PIDs) (don't anything)
+# read list of subdirectories from directory (PIDs) (don't anything)
 def get_subdirs_from_dir(base_dir):
     sub_dirs = []
     for (dir_path, sub_dirs, filenames) in os.walk(base_dir):
@@ -186,53 +165,6 @@ def expand_path(path):
 
     return path
 
-# needs to be moved out of cisco_live_cycle_utils
-#  get cisco product series by pid
-# def get_cisco_product_series_by_pid(pids, access_token, settings: Settings):
-#
-#     conf_file = '~/etc/ciscoapi/ciscoapi.json'
-#     conf_file = os.path.expanduser(conf_file)
-#
-#     productseriesfile = '~/var/ciscoapi/productinfo'
-#     product_series = {}
-#
-#     if os.path.isfile(conf_file):
-#         with open(conf_file) as f:
-#             try:
-#                 config = json.load(f)
-#                 productseriesfile = config['productinfo'].get('productseriesfile', productseriesfile)
-#             except ValueError as e:
-#                 log_message(f'snmp_cisco_eox:status:JSON load error: {e}', level='WARNING')
-#
-#     productseriesfile = expand_path(productseriesfile) + 'productseries.json'
-#
-#     if os.path.isfile(productseriesfile):
-#         with open(productseriesfile) as f:
-#             product_series = json.load(f)
-#
-#     requestpids = copy.deepcopy(pids)
-#     if product_series != {}:
-#         keys = product_series.keys()
-#         for pid in requestpids:
-#             if pid in keys:
-#                 requestpids.remove(pid)
-#
-#     if requestpids is not []:
-#         product_infos = get_product_mdf_information_by_pid(pids, access_token, settings=settings)
-#
-#         for entry in product_infos:
-#             product_series.update({entry.get('product_id'): entry.get('product_series')})
-#
-#     with open(productseriesfile, 'w') as f:
-#         json.dump(product_series, f)
-#
-#     return_product_series = {}
-#     for pid in pids:
-#         return_product_series.update({pid: product_series.get(pid, 'not found')})
-#
-#     return return_product_series
-
-
 # remove empty directories
 def remove_empty_sub_dirs(base_dir):
     subdirs = get_subdirs_from_dir(base_dir)
diff --git a/bin/ciscoapi/ciscoapi.py b/bin/ciscoapi/ciscoapi.py
index 133c77e..2ec1e74 100755
--- a/bin/ciscoapi/ciscoapi.py
+++ b/bin/ciscoapi/ciscoapi.py
@@ -38,7 +38,7 @@ class Settings:
             try:
                 self.__settings = json.load(f)
             except ValueError as e:
-                log_message(f'snmp_cisco_eox:status:JSON load error: {e}', level='WARNING')
+                log_message(f'ciscoapi:settings:JSON load error: {e}', level='WARNING')
                 exit()
             except FileNotFoundError as e:
                 log_message(f'Config file not found {e}.', level='CRITICAL')
@@ -160,10 +160,11 @@ class AccessToken:
             self,
             client_id: str,
             client_secret: str,
+            proxies: Dict,
     ):
         self.__client_id = client_id
         self.__client_secret = client_secret
-        self.__proxies = {}
+        self.__proxies = proxies
         self.__use_auth_proxy = None
         self.__client_fqdn = ''
         self.__root_cert = True
@@ -186,7 +187,6 @@ class AccessToken:
 
     @property
     def token(self) -> str:
-
         if self.__access_token and time.time() < self.__lifetime:
             return self.__access_token
         else:
@@ -385,43 +385,6 @@ def get_psirt_by_product_family(families: List[str], access_token: AccessToken,
     return info
 
 
-def get_suggested_release_by_pid(pids: List[str], access_token: AccessToken, settings: Settings):
-    max_pid_length = 240
-    max_pids = 10
-    optimisedpids = []
-    pidstr = ''
-    count = 1
-    info = []
-
-    # split list of PIDs in chunks of max 240 bytes length
-    for pid in pids:
-        if (len(pidstr) + len(pid)) < max_pid_length:
-            pidstr += pid + ","
-            count += 1
-        if (count == max_pids) or ((len(pidstr) + len(pid)) >= max_pid_length):
-            optimisedpids.append(pidstr[:-1])
-            pidstr = ''
-            count = 1
-    optimisedpids.append(pidstr[:-1])
-
-    headers = {'accept': 'application/json', 'Authorization': 'Bearer ' + access_token.token}
-    req_url = 'https://apix.cisco.com/software/suggestion/v2/suggestions/releases/productIds/'
-
-    # requests.packages.urllib3.disable_warnings()
-    if optimisedpids is not []:
-        for productids in optimisedpids:
-            suggestion_response = requests.get(req_url + productids, headers=headers, proxies=settings.proxies)
-            log_message('cisco-api:get_sugessted_release_by_pid:response:response.text %s' % suggestion_response.text)
-            if suggestion_response.ok:
-                suggestion_response.encoding = 'UTF-8'
-                response = (json.loads(suggestion_response.text))
-                log_message('cisco-api:get_suggested_release_by_pid:response: %s' % response)
-                info.append(response.get('productList', 'notfound'))
-                log_message('ciscoapi:info-found: %s' % info)
-
-    return info
-
-
 # get_clean_sn_for_bug_api('ASA5510', '9.1(7)15,8.4(7)30,9.1(6)1')
 # return {'9.1(7)15': '9.1(7.15)', '9.1(6)1': '9.1(6.1)', '8.4(7)30': '8.4(7.30)'}
 def get_clean_sn_for_bug_api(pid, software_releases):
@@ -556,44 +519,3 @@ def get_bug_by_pid_and_release(pid, release, access_token: AccessToken, reqoptio
                          'reason': reason,
                          'missing': missing})
     return info
-
-
-def get_product_mdf_information_by_pid(pids, access_token: AccessToken, settings: Settings):
-    max_pid_length = 40
-    max_pids = 5
-    optimisedpids = []
-    pidstr = ''
-    count = 1
-    info = []
-
-    # split list of PIDs in chunks of max 240 bytes length
-    for pid in pids:
-        if (len(pidstr) + len(pid)) < max_pid_length:
-            pidstr += pid + ","
-            count += 1
-        if (count == max_pids) or ((len(pidstr) + len(pid)) >= max_pid_length):
-            optimisedpids.append(pidstr[:-1])
-            pidstr = ''
-            count = 1
-    optimisedpids.append(pidstr[:-1])
-
-    headers = {'accept': 'application/json', 'Authorization': 'Bearer ' + access_token.token}
-    req_url = 'https://apix.cisco.com/product/v1/information/product_ids_mdf/'
-#    req_url = 'https://apix.cisco.com/product/v1/information/product_ids/'
-
-    # requests.packages.urllib3.disable_warnings()
-    if optimisedpids is not []:
-        for productids in optimisedpids:
-            productinfo_response = requests.get(req_url + productids, headers=headers, proxies=settings.proxies)
-            log_message(
-                f'cisco-api:get_product_mdf_information_by_pid:response:response.text {productinfo_response.text}'
-            )
-            if productinfo_response.ok:
-                productinfo_response.encoding = 'UTF-8'
-                response = (json.loads(productinfo_response.text))
-                log_message('cisco-api:get_product_mdf_information_by_pid:response: %s' % response)
-                # info.append(response)
-                info.extend(response.get('product_list', 'notfound'))
-                log_message('ciscoapi:info-found: %s' % info)
-
-    return info
diff --git a/gui/views/inv_cisco_livecycle.py b/gui/views/inv_cisco_livecycle.py
index c7e8f2c..9be8672 100644
--- a/gui/views/inv_cisco_livecycle.py
+++ b/gui/views/inv_cisco_livecycle.py
@@ -138,9 +138,9 @@ def inv_paint_psirt_bugid(bugids) -> PaintResult:
 
 # EoX display hints
 inventory_displayhints.update({
-    '.hardware.support': {'title': _('Cisco Live Cycle')},
+    '.hardware.support:': {'title': _('Support')},
     '.hardware.support.cisco_eox:': {
-        'title': _('EoX'),
+        'title': _('Cisco EoX'),
         'keyorder':
             [
                 'pid', 'serial_number', 'ProductIDDescription', 'Last_checked', 'ProductBulletinNumber',
@@ -163,7 +163,7 @@ inventory_displayhints.update({
 # SN2Info (contract) display hints
 inventory_displayhints.update({
     '.hardware.support.cisco_contract:': {
-        'title': _('Contract'),
+        'title': _('Cisco Contract'),
         'keyorder': [
             'pid', 'serial_number', 'ProductIDDescription', 'Last_checked', 'is_covered', 'service_contract_number',
             'covered_product_line_end_date',
@@ -189,6 +189,7 @@ inventory_displayhints.update({
 
 # BUG display hints
 inventory_displayhints.update({
+    '.software.support:': {'title': _('Support')},
     '.software.support.cisco_bug.Total_records': {'title': _('Records total'), },
     '.software.support.cisco_bug.duplicate_records': {'title': _('Records duplicate'), },
     '.software.support.cisco_bug.missing_records': {'title': _('Records missing'), },
diff --git a/mkp/inv_cisco_support-0.2.1-20231024.mkp b/mkp/inv_cisco_support-0.2.1-20231024.mkp
new file mode 100644
index 0000000000000000000000000000000000000000..8a6f3e2ba5803a1b0ade1e4bd07bc4656ca67e82
GIT binary patch
literal 25071
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

literal 0
HcmV?d00001

diff --git a/packages/inv_cisco_support b/packages/inv_cisco_support
index b4cb1c8..8478c2d 100644
--- a/packages/inv_cisco_support
+++ b/packages/inv_cisco_support
@@ -38,7 +38,7 @@
  'name': 'inv_cisco_support',
  'title': 'Inventory for Cisco Bug, EoX, contract status, PSIRT advisories and '
           'suggested software',
- 'version': '0.2.1-20231008',
+ 'version': '0.2.1-20231024',
  'version.min_required': '2.2.0b1',
  'version.packaged': '2.2.0p11',
  'version.usable_until': '2.3.0b1'}
-- 
GitLab