owasp-depscan 5.0.3__tar.gz → 5.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. {owasp-depscan-5.0.3/owasp_depscan.egg-info → owasp-depscan-5.1.0}/PKG-INFO +22 -5
  2. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/README.md +20 -3
  3. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/depscan/cli.py +2 -1
  4. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/depscan/lib/normalize.py +6 -4
  5. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/depscan/lib/utils.py +16 -5
  6. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0/owasp_depscan.egg-info}/PKG-INFO +22 -5
  7. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/owasp_depscan.egg-info/requires.txt +1 -1
  8. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/pyproject.toml +2 -2
  9. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/test/test_utils.py +49 -21
  10. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/LICENSE +0 -0
  11. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/MANIFEST.in +0 -0
  12. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/depscan/__init__.py +0 -0
  13. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/depscan/lib/__init__.py +0 -0
  14. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/depscan/lib/analysis.py +0 -0
  15. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/depscan/lib/audit.py +0 -0
  16. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/depscan/lib/bom.py +0 -0
  17. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/depscan/lib/config.py +0 -0
  18. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/depscan/lib/csaf.py +0 -0
  19. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/depscan/lib/explainer.py +0 -0
  20. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/depscan/lib/github.py +0 -0
  21. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/depscan/lib/license.py +0 -0
  22. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/depscan/lib/logger.py +0 -0
  23. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/depscan/lib/pkg_query.py +0 -0
  24. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/owasp_depscan.egg-info/SOURCES.txt +0 -0
  25. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/owasp_depscan.egg-info/dependency_links.txt +0 -0
  26. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/owasp_depscan.egg-info/entry_points.txt +0 -0
  27. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/owasp_depscan.egg-info/top_level.txt +0 -0
  28. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/setup.cfg +0 -0
  29. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/test/test_analysis.py +0 -0
  30. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/test/test_bom.py +0 -0
  31. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/test/test_csaf.py +0 -0
  32. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/test/test_explainer.py +0 -0
  33. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/test/test_github.py +0 -0
  34. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/test/test_license.py +0 -0
  35. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/test/test_norm.py +0 -0
  36. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/test/test_pkg_query.py +0 -0
  37. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/__init__.py +0 -0
  38. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_data/fields.yml +0 -0
  39. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_data/meta.yml +0 -0
  40. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_data/rules.yml +0 -0
  41. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/0bsd.txt +0 -0
  42. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/afl-3.0.txt +0 -0
  43. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/agpl-3.0.txt +0 -0
  44. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/apache-2.0.txt +0 -0
  45. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/artistic-2.0.txt +0 -0
  46. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/bsd-2-clause.txt +0 -0
  47. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/bsd-3-clause-clear.txt +0 -0
  48. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/bsd-3-clause.txt +0 -0
  49. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/bsd-4-clause.txt +0 -0
  50. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/bsl-1.0.txt +0 -0
  51. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/cc-by-4.0.txt +0 -0
  52. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/cc-by-sa-4.0.txt +0 -0
  53. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/cc0-1.0.txt +0 -0
  54. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/cecill-2.1.txt +0 -0
  55. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/cern-ohl-p-2.0.txt +0 -0
  56. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/cern-ohl-s-2.0.txt +0 -0
  57. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/cern-ohl-w-2.0.txt +0 -0
  58. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/ecl-2.0.txt +0 -0
  59. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/epl-1.0.txt +0 -0
  60. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/epl-2.0.txt +0 -0
  61. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/eupl-1.1.txt +0 -0
  62. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/eupl-1.2.txt +0 -0
  63. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/gfdl-1.3.txt +0 -0
  64. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/gpl-2.0.txt +0 -0
  65. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/gpl-3.0.txt +0 -0
  66. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/isc.txt +0 -0
  67. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/lgpl-2.1.txt +0 -0
  68. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/lgpl-3.0.txt +0 -0
  69. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/lppl-1.3c.txt +0 -0
  70. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/mit-0.txt +0 -0
  71. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/mit.txt +0 -0
  72. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/mpl-2.0.txt +0 -0
  73. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/ms-pl.txt +0 -0
  74. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/ms-rl.txt +0 -0
  75. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/mulanpsl-2.0.txt +0 -0
  76. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/ncsa.txt +0 -0
  77. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/odbl-1.0.txt +0 -0
  78. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/ofl-1.1.txt +0 -0
  79. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/osl-3.0.txt +0 -0
  80. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/postgresql.txt +0 -0
  81. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/unlicense.txt +0 -0
  82. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/upl-1.0.txt +0 -0
  83. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/vim.txt +0 -0
  84. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/wtfpl.txt +0 -0
  85. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/choosealicense.com/_licenses/zlib.txt +0 -0
  86. {owasp-depscan-5.0.3 → owasp-depscan-5.1.0}/vendor/spdx/json/licenses.json +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: owasp-depscan
3
- Version: 5.0.3
3
+ Version: 5.1.0
4
4
  Summary: Fully open-source security audit for project dependencies based on known vulnerabilities and advisories.
5
5
  Author-email: Team AppThreat <cloud@appthreat.com>
6
6
  License: MIT
@@ -20,7 +20,7 @@ Classifier: Topic :: Utilities
20
20
  Requires-Python: >=3.8
21
21
  Description-Content-Type: text/markdown
22
22
  License-File: LICENSE
23
- Requires-Dist: appthreat-vulnerability-db>=5.5.5
23
+ Requires-Dist: appthreat-vulnerability-db>=5.5.6
24
24
  Requires-Dist: defusedxml
25
25
  Requires-Dist: oras
26
26
  Requires-Dist: PyYAML
@@ -461,11 +461,19 @@ Giving it will pass the vulnerability report into your template for rendering th
461
461
  Please find a basic example here:
462
462
 
463
463
  ```jinja
464
+ {% if metadata -%}
465
+ Report for {{ metadata.component.group }}:{{ metadata.component.name }}:{{ metadata.component.version }}
466
+ {% endif -%}
467
+
468
+ {% if vulnerabilities -%}
464
469
  There were {{ vulnerabilities | length }} issues identified:
465
470
 
466
471
  {% for vuln in vulnerabilities -%}
467
- * {{ vuln.id }} - {{ vuln.package }}
468
- {% endfor %}
472
+ * {{ vuln['bom-ref'] }} - {{ vuln.recommendation }}
473
+ {% endfor -%}
474
+ {% else -%}
475
+ 🏆 _No vulnerabilities found_
476
+ {% endif -%}
469
477
 
470
478
  Severity counts:
471
479
  * Low: {{ summary.LOW }}
@@ -475,10 +483,19 @@ Severity counts:
475
483
  * Unspecified: {{ summary.UNSPECIFIED }}
476
484
  ```
477
485
 
478
- The `vulnerabilities` object is the same list that can be found in the `depscan-bom.json` report file,
486
+ The objects available are taken from the CycloneDX *.vdr.json BOM file generated, just have a look to the file for its full structure:
487
+
488
+ * `metadata`
489
+ * `vulnerabilities`
490
+ * `components`
491
+ * `dependencies`
492
+ * `services`
493
+
479
494
  `summary` is a dictionary type with vulnerability severity quantities as shown in the example above.
480
495
  Furthermore insights are imaginably to be made available to the template, please reach out or contribute on demand.
481
496
 
497
+ We appreciate if you like to contribute your report templates as examples, please add/find them [here](contrib/report-templates/).
498
+
482
499
  ## Discord support
483
500
 
484
501
  The developers could be reached via the [discord](https://discord.gg/DCNxzaeUpd) channel for enterprise support.
@@ -422,11 +422,19 @@ Giving it will pass the vulnerability report into your template for rendering th
422
422
  Please find a basic example here:
423
423
 
424
424
  ```jinja
425
+ {% if metadata -%}
426
+ Report for {{ metadata.component.group }}:{{ metadata.component.name }}:{{ metadata.component.version }}
427
+ {% endif -%}
428
+
429
+ {% if vulnerabilities -%}
425
430
  There were {{ vulnerabilities | length }} issues identified:
426
431
 
427
432
  {% for vuln in vulnerabilities -%}
428
- * {{ vuln.id }} - {{ vuln.package }}
429
- {% endfor %}
433
+ * {{ vuln['bom-ref'] }} - {{ vuln.recommendation }}
434
+ {% endfor -%}
435
+ {% else -%}
436
+ 🏆 _No vulnerabilities found_
437
+ {% endif -%}
430
438
 
431
439
  Severity counts:
432
440
  * Low: {{ summary.LOW }}
@@ -436,10 +444,19 @@ Severity counts:
436
444
  * Unspecified: {{ summary.UNSPECIFIED }}
437
445
  ```
438
446
 
439
- The `vulnerabilities` object is the same list that can be found in the `depscan-bom.json` report file,
447
+ The objects available are taken from the CycloneDX *.vdr.json BOM file generated, just have a look to the file for its full structure:
448
+
449
+ * `metadata`
450
+ * `vulnerabilities`
451
+ * `components`
452
+ * `dependencies`
453
+ * `services`
454
+
440
455
  `summary` is a dictionary type with vulnerability severity quantities as shown in the example above.
441
456
  Furthermore insights are imaginably to be made available to the template, please reach out or contribute on demand.
442
457
 
458
+ We appreciate if you like to contribute your report templates as examples, please add/find them [here](contrib/report-templates/).
459
+
443
460
  ## Discord support
444
461
 
445
462
  The developers could be reached via the [discord](https://discord.gg/DCNxzaeUpd) channel for enterprise support.
@@ -1115,7 +1115,8 @@ def main():
1115
1115
  # render report into template if wished
1116
1116
  if args.report_template and os.path.isfile(args.report_template):
1117
1117
  utils.render_template_report(
1118
- jsonl_report_file=report_file,
1118
+ vdr_file=vdr_file,
1119
+ bom_file=bom_file,
1119
1120
  summary=summary,
1120
1121
  template_file=args.report_template,
1121
1122
  result_file=os.path.join(reports_dir, args.report_name),
@@ -155,10 +155,12 @@ def create_pkg_variations(pkg_dict):
155
155
  for suffix in COMMON_SUFFIXES:
156
156
  if name.endswith(suffix):
157
157
  name_aliases.add(name.replace(suffix, ""))
158
- for k, v in config.package_alias.items():
159
- if name.startswith(k) or k.startswith(name) or v.startswith(name):
160
- name_aliases.add(k)
161
- name_aliases.add(v)
158
+ # The below aliasing is resulting in several false positives for npm
159
+ if pkg_type not in ("npm",):
160
+ for k, v in config.package_alias.items():
161
+ if name.startswith(k) or k.startswith(name) or v.startswith(name):
162
+ name_aliases.add(k)
163
+ name_aliases.add(v)
162
164
  if pkg_type in config.OS_PKG_TYPES:
163
165
  if "lib" in name:
164
166
  name_aliases.add(name.replace("lib", ""))
@@ -413,22 +413,33 @@ def export_pdf(
413
413
 
414
414
 
415
415
  def render_template_report(
416
- jsonl_report_file,
416
+ vdr_file,
417
+ bom_file,
417
418
  summary,
418
419
  template_file,
419
420
  result_file,
420
421
  ):
421
422
  """
422
- Render the given json_report_file and summary dict using the template_file with Jinja
423
+ Render the given vdr_file (falling back to bom_file if no vdr was written)
424
+ and summary dict using the template_file with Jinja, rendered output is written
425
+ to named result_file in reports directory.
423
426
  """
424
- with open(jsonl_report_file, "r", encoding="utf-8") as jsonl_file:
425
- json_report = [json.loads(jline) for jline in jsonl_file.readlines()]
427
+ if vdr_file and os.path.isfile(vdr_file):
428
+ with open(vdr_file, "r", encoding="utf-8") as f:
429
+ bom = json.load(f)
430
+ else:
431
+ with open(bom_file, "r", encoding="utf-8") as f:
432
+ bom = json.load(f)
426
433
  with open(template_file, "r", encoding="utf-8") as tmpl_file:
427
434
  template = tmpl_file.read()
428
435
  jinja_env = Environment(autoescape=False)
429
436
  jinja_tmpl = jinja_env.from_string(template)
430
437
  report_result = jinja_tmpl.render(
431
- vulnerabilities=json_report,
438
+ metadata=bom.get('metadata', None),
439
+ vulnerabilities=bom.get('vulnerabilities', None),
440
+ components=bom.get('components', None),
441
+ dependencies=bom.get('dependencies', None),
442
+ services=bom.get('services', None),
432
443
  summary=summary,
433
444
  )
434
445
  with open(result_file, "w", encoding="utf-8") as outfile:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: owasp-depscan
3
- Version: 5.0.3
3
+ Version: 5.1.0
4
4
  Summary: Fully open-source security audit for project dependencies based on known vulnerabilities and advisories.
5
5
  Author-email: Team AppThreat <cloud@appthreat.com>
6
6
  License: MIT
@@ -20,7 +20,7 @@ Classifier: Topic :: Utilities
20
20
  Requires-Python: >=3.8
21
21
  Description-Content-Type: text/markdown
22
22
  License-File: LICENSE
23
- Requires-Dist: appthreat-vulnerability-db>=5.5.5
23
+ Requires-Dist: appthreat-vulnerability-db>=5.5.6
24
24
  Requires-Dist: defusedxml
25
25
  Requires-Dist: oras
26
26
  Requires-Dist: PyYAML
@@ -461,11 +461,19 @@ Giving it will pass the vulnerability report into your template for rendering th
461
461
  Please find a basic example here:
462
462
 
463
463
  ```jinja
464
+ {% if metadata -%}
465
+ Report for {{ metadata.component.group }}:{{ metadata.component.name }}:{{ metadata.component.version }}
466
+ {% endif -%}
467
+
468
+ {% if vulnerabilities -%}
464
469
  There were {{ vulnerabilities | length }} issues identified:
465
470
 
466
471
  {% for vuln in vulnerabilities -%}
467
- * {{ vuln.id }} - {{ vuln.package }}
468
- {% endfor %}
472
+ * {{ vuln['bom-ref'] }} - {{ vuln.recommendation }}
473
+ {% endfor -%}
474
+ {% else -%}
475
+ 🏆 _No vulnerabilities found_
476
+ {% endif -%}
469
477
 
470
478
  Severity counts:
471
479
  * Low: {{ summary.LOW }}
@@ -475,10 +483,19 @@ Severity counts:
475
483
  * Unspecified: {{ summary.UNSPECIFIED }}
476
484
  ```
477
485
 
478
- The `vulnerabilities` object is the same list that can be found in the `depscan-bom.json` report file,
486
+ The objects available are taken from the CycloneDX *.vdr.json BOM file generated, just have a look to the file for its full structure:
487
+
488
+ * `metadata`
489
+ * `vulnerabilities`
490
+ * `components`
491
+ * `dependencies`
492
+ * `services`
493
+
479
494
  `summary` is a dictionary type with vulnerability severity quantities as shown in the example above.
480
495
  Furthermore insights are imaginably to be made available to the template, please reach out or contribute on demand.
481
496
 
497
+ We appreciate if you like to contribute your report templates as examples, please add/find them [here](contrib/report-templates/).
498
+
482
499
  ## Discord support
483
500
 
484
501
  The developers could be reached via the [discord](https://discord.gg/DCNxzaeUpd) channel for enterprise support.
@@ -1,4 +1,4 @@
1
- appthreat-vulnerability-db>=5.5.5
1
+ appthreat-vulnerability-db>=5.5.6
2
2
  defusedxml
3
3
  oras
4
4
  PyYAML
@@ -1,12 +1,12 @@
1
1
  [project]
2
2
  name = "owasp-depscan"
3
- version = "5.0.3"
3
+ version = "5.1.0"
4
4
  description = "Fully open-source security audit for project dependencies based on known vulnerabilities and advisories."
5
5
  authors = [
6
6
  {name = "Team AppThreat", email = "cloud@appthreat.com"},
7
7
  ]
8
8
  dependencies = [
9
- "appthreat-vulnerability-db>=5.5.5",
9
+ "appthreat-vulnerability-db>=5.5.6",
10
10
  "defusedxml",
11
11
  "oras",
12
12
  "PyYAML",
@@ -87,12 +87,17 @@ def test_is_exe():
87
87
  if os.path.exists("/bin/ls"):
88
88
  assert utils.is_exe("/bin/ls")
89
89
 
90
- def test_template_report():
90
+ def test_template_report_from_vdr():
91
91
  utils.render_template_report(
92
- jsonl_report_file=os.path.join(
92
+ vdr_file=os.path.join(
93
93
  os.path.dirname(os.path.realpath(__file__)),
94
94
  "data",
95
- "depscan-java.json",
95
+ "jinja-report.vdr.json",
96
+ ),
97
+ bom_file=os.path.join(
98
+ os.path.dirname(os.path.realpath(__file__)),
99
+ "data",
100
+ "jinja-report.bom.json",
96
101
  ),
97
102
  summary={
98
103
  "UNSPECIFIED": 0,
@@ -112,22 +117,45 @@ def test_template_report():
112
117
  rendered_report = report_file.read()
113
118
 
114
119
  assert rendered_report == """\
115
- there are 13 vulns in here:
116
-
117
- * CVE-2018-5968 - com.fasterxml.jackson.core:jackson-databind
118
- * CVE-2018-12022 - com.fasterxml.jackson.core:jackson-databind
119
- * CVE-2018-12023 - com.fasterxml.jackson.core:jackson-databind
120
- * CVE-2019-17267 - com.fasterxml.jackson.core:jackson-databind
121
- * CVE-2020-9547 - com.fasterxml.jackson.core:jackson-databind
122
- * CVE-2020-10673 - com.fasterxml.jackson.core:jackson-databind
123
- * CVE-2020-9548 - com.fasterxml.jackson.core:jackson-databind
124
- * CVE-2019-14892 - com.fasterxml.jackson.core:jackson-databind
125
- * CVE-2020-8840 - com.fasterxml.jackson.core:jackson-databind
126
- * CVE-2019-20330 - com.fasterxml.jackson.core:jackson-databind
127
- * CVE-2019-10172 - org.codehaus.jackson:jackson-mapper-asl
128
- * CVE-2019-17531 - com.fasterxml.jackson.core:jackson-databind
129
- * CVE-2019-16943 - com.fasterxml.jackson.core:jackson-databind
130
- That's 3 of low severity,
131
- 5 medium, 2 high,
132
- 1 critical and 0 unspecified ones."""
120
+ Report for io.github.heubeck:examiner:1.11.26
121
+ Component count: 228
122
+ * BIT-apisix-2023-44487/pkg:maven/io.netty/netty-codec-http2@4.1.94.Final?type=jar - Update to 4.1.100.Final or later
123
+ * CVE-2023-4043/pkg:maven/org.eclipse.parsson/parsson@1.1.2?type=jar - Update to 1.1.4 or later
124
+ """
125
+ os.remove("rendered.report")
126
+
127
+ def test_template_report_from_bom():
128
+ utils.render_template_report(
129
+ vdr_file=os.path.join(
130
+ os.path.dirname(os.path.realpath(__file__)),
131
+ "data",
132
+ "no-vdr-here",
133
+ ),
134
+ bom_file=os.path.join(
135
+ os.path.dirname(os.path.realpath(__file__)),
136
+ "data",
137
+ "jinja-report.bom.json",
138
+ ),
139
+ summary={
140
+ "UNSPECIFIED": 0,
141
+ "LOW": 0,
142
+ "MEDIUM": 0,
143
+ "HIGH": 0,
144
+ "CRITICAL": 0,
145
+ },
146
+ template_file=os.path.join(
147
+ os.path.dirname(os.path.realpath(__file__)),
148
+ "data",
149
+ "report-template.j2",
150
+ ),
151
+ result_file="rendered.report"
152
+ )
153
+ with open("rendered.report", "r", encoding="utf-8") as report_file:
154
+ rendered_report = report_file.read()
155
+
156
+ assert rendered_report == """\
157
+ Report for io.github.heubeck:examiner:1.11.27
158
+ Component count: 230
159
+ 🏆 No vulnerabilities found 🎉
160
+ """
133
161
  os.remove("rendered.report")
File without changes
File without changes
File without changes