gvm-tools 25.2.0__tar.gz → 25.3.1__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.
Potentially problematic release.
This version of gvm-tools might be problematic. Click here for more details.
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/PKG-INFO +3 -3
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/gvmtools/__version__.py +1 -1
- gvm_tools-25.3.1/pyproject.toml +177 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/README.md +19 -18
- gvm_tools-25.3.1/scripts/export-certificates.gmp.py +160 -0
- gvm_tools-25.3.1/scripts/export-operatingsystems-csv.gmp.py +157 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/generate-random-reports.gmp.py +1 -1
- gvm_tools-25.2.0/pyproject.toml +0 -88
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/LICENSE +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/README.md +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/gvmtools/__init__.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/gvmtools/cli.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/gvmtools/config.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/gvmtools/helper.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/gvmtools/parser.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/gvmtools/pyshell.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/gvmtools/script.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/.pylintrc +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/application-detection.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/bulk-modify-schedules.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/certbund-report.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/cfg-gen-for-certs.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/check-gmp-gos22.04.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/check-gmp-gos24.10.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/clean-sensor.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/combine-reports.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/create-alerts-from-csv.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/create-consolidated-report.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/create-credentials-from-csv.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/create-cve-report-from-json.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/create-dummy-data.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/create-filters-from-csv.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/create-report-format-from-csv.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/create-schedules-from-csv.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/create-tags-from-csv.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/create-targets-from-csv.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/create-targets-from-host-list.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/create-tasks-from-csv.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/default_report_data.json +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/delete-overrides-by-filter.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/empty-trash.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/export-csv-report.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/export-hosts-csv.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/export-pdf-report.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/export-xml-report.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/generate-random-targets.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-alerts.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-credentials.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-feeds.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-filters.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-groups.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-hosts.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-policies.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-portlists.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-report-formats.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-reports.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-roles.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-scan-configs.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-scanners.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-schedules.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-tags.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-targets.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-tasks.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-tickets.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/list-users.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/monthly-report-gos24.10.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/monthly-report-gos3.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/monthly-report-gos4.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/nvt-scan.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/requirements.txt +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/ruff.toml +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/scan-new-system.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/send-delta-emails.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/send-schedules.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/send-targets.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/send-tasks.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/ssv_csv.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/start-alert-scan.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/start-multiple-alerts-scan.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/start-nvt-scan.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/start-scans-from-csv.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/stop-all-scans.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/stop-scans-from-csv.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/sync-hosts.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/update-task-target.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/scripts/verify-scanners.gmp.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/__init__.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/root_help.3.10.snap +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/root_help.snap +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/scripts/__init__.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/scripts/example_schedules.xml +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/scripts/example_target.xml +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/scripts/example_task.xml +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/scripts/get_alerts.xml +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/scripts/get_scan_configs.xml +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/scripts/invalid_xml.xml +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/scripts/test_combine_reports.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/scripts/test_create_consolidated_report.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/scripts/test_list_tasks.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/scripts/test_send_schedules.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/scripts/test_send_targets.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/scripts/test_send_tasks.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/scripts/test_start_alert_scan.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/socket_help.3.10.snap +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/socket_help.snap +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/ssh_help.3.10.snap +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/ssh_help.snap +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/test.cfg +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/test_auth.cfg +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/test_config.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/test_helper.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/test_parser.py +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/tls_help.3.10.snap +0 -0
- {gvm_tools-25.2.0 → gvm_tools-25.3.1}/tests/tls_help.snap +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: gvm-tools
|
|
3
|
-
Version: 25.
|
|
3
|
+
Version: 25.3.1
|
|
4
4
|
Summary: Tools to control a GSM/GVM over GMP or OSP
|
|
5
5
|
License: GPL-3.0-or-later
|
|
6
6
|
Author: Greenbone AG
|
|
7
7
|
Author-email: info@greenbone.net
|
|
8
|
-
Requires-Python: >=3.9,<4.0
|
|
8
|
+
Requires-Python: >=3.9.2,<4.0.0
|
|
9
9
|
Classifier: Development Status :: 5 - Production/Stable
|
|
10
10
|
Classifier: Environment :: Console
|
|
11
11
|
Classifier: Intended Audience :: Developers
|
|
@@ -14,11 +14,11 @@ Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
|
14
14
|
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
15
15
|
Classifier: Operating System :: OS Independent
|
|
16
16
|
Classifier: Programming Language :: Python :: 3
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
18
17
|
Classifier: Programming Language :: Python :: 3.10
|
|
19
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
20
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
21
20
|
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
22
22
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
23
23
|
Requires-Dist: python-gvm (>=23.4.2)
|
|
24
24
|
Project-URL: Documentation, https://greenbone.github.io/gvm-tools/
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["poetry-core>=1.0.0"]
|
|
3
|
+
build-backend = "poetry.core.masonry.api"
|
|
4
|
+
|
|
5
|
+
[tool.poetry]
|
|
6
|
+
name = "gvm-tools"
|
|
7
|
+
version = "25.3.1"
|
|
8
|
+
authors = ["Greenbone AG <info@greenbone.net>"]
|
|
9
|
+
description = "Tools to control a GSM/GVM over GMP or OSP"
|
|
10
|
+
license = "GPL-3.0-or-later"
|
|
11
|
+
readme = "README.md"
|
|
12
|
+
homepage = "https://github.com/greenbone/gvm-tools/"
|
|
13
|
+
repository = "https://github.com/greenbone/gvm-tools/"
|
|
14
|
+
documentation = "https://greenbone.github.io/gvm-tools/"
|
|
15
|
+
classifiers = [
|
|
16
|
+
# Full list: https://pypi.org/pypi?%3Aaction=list_classifiers
|
|
17
|
+
'Development Status :: 5 - Production/Stable',
|
|
18
|
+
'License :: OSI Approved :: GNU General Public License v3 (GPLv3)',
|
|
19
|
+
'Environment :: Console',
|
|
20
|
+
'Intended Audience :: Developers',
|
|
21
|
+
'Intended Audience :: System Administrators',
|
|
22
|
+
'Programming Language :: Python :: 3.9',
|
|
23
|
+
'Programming Language :: Python :: 3.10',
|
|
24
|
+
'Programming Language :: Python :: 3.11',
|
|
25
|
+
'Programming Language :: Python :: 3.12',
|
|
26
|
+
'Operating System :: OS Independent',
|
|
27
|
+
'Topic :: Software Development :: Libraries :: Python Modules',
|
|
28
|
+
]
|
|
29
|
+
packages = [
|
|
30
|
+
{ include = "gvmtools" },
|
|
31
|
+
{ include = "tests", format = "sdist" },
|
|
32
|
+
{ include = "scripts", format = "sdist" },
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
[tool.poetry.scripts]
|
|
36
|
+
gvm-pyshell = "gvmtools.pyshell:main"
|
|
37
|
+
gvm-cli = "gvmtools.cli:main"
|
|
38
|
+
gvm-script = "gvmtools.script:main"
|
|
39
|
+
|
|
40
|
+
[tool.poetry.dependencies]
|
|
41
|
+
python = "^3.9.2"
|
|
42
|
+
python-gvm = ">=23.4.2"
|
|
43
|
+
|
|
44
|
+
[tool.poetry.group.dev.dependencies]
|
|
45
|
+
autohooks = ">=22.8.0"
|
|
46
|
+
autohooks-plugin-ruff = ">=23.6.1"
|
|
47
|
+
autohooks-plugin-black = ">=22.8.1"
|
|
48
|
+
pontos = ">=22.8.1"
|
|
49
|
+
sphinx = ">=5.3.0"
|
|
50
|
+
coverage = ">=7.2"
|
|
51
|
+
rope = ">=1.9.0"
|
|
52
|
+
furo = ">=2023.3.27"
|
|
53
|
+
sphinx-autobuild = ">=2021.3.14"
|
|
54
|
+
myst-parser = ">=2.0.0"
|
|
55
|
+
git-cliff = "^2.8.0"
|
|
56
|
+
|
|
57
|
+
[tool.black]
|
|
58
|
+
line-length = 80
|
|
59
|
+
target-version = ['py39', 'py310', 'py311', 'py312']
|
|
60
|
+
exclude = '''
|
|
61
|
+
/(
|
|
62
|
+
\.git
|
|
63
|
+
| \.venv
|
|
64
|
+
| \.github
|
|
65
|
+
| \.vscode
|
|
66
|
+
| _build
|
|
67
|
+
| build
|
|
68
|
+
| dist
|
|
69
|
+
| docs
|
|
70
|
+
)/
|
|
71
|
+
'''
|
|
72
|
+
|
|
73
|
+
[tool.autohooks]
|
|
74
|
+
mode = "poetry"
|
|
75
|
+
pre-commit = ['autohooks.plugins.black', 'autohooks.plugins.ruff']
|
|
76
|
+
|
|
77
|
+
[tool.ruff]
|
|
78
|
+
line-length = 80
|
|
79
|
+
target-version = "py39"
|
|
80
|
+
|
|
81
|
+
[tool.ruff.lint]
|
|
82
|
+
extend-select = ["I", "PLE", "PLW"]
|
|
83
|
+
|
|
84
|
+
[tool.coverage.run]
|
|
85
|
+
omit = ["tests/*"]
|
|
86
|
+
source = ["gvmtools", "scripts"]
|
|
87
|
+
|
|
88
|
+
[tool.pontos.version]
|
|
89
|
+
version-module-file = "gvmtools/__version__.py"
|
|
90
|
+
|
|
91
|
+
[tool.git-cliff.changelog]
|
|
92
|
+
# template for the changelog header
|
|
93
|
+
header = """
|
|
94
|
+
# Changelog\n
|
|
95
|
+
All notable changes to this project will be documented in this file.
|
|
96
|
+
|
|
97
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
98
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n
|
|
99
|
+
"""
|
|
100
|
+
# template for the changelog body
|
|
101
|
+
# https://keats.github.io/tera/docs/#introduction
|
|
102
|
+
body = """
|
|
103
|
+
{%- macro remote_url() -%}
|
|
104
|
+
https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}
|
|
105
|
+
{%- endmacro -%}
|
|
106
|
+
|
|
107
|
+
{% if version -%}
|
|
108
|
+
## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
|
|
109
|
+
{% else -%}
|
|
110
|
+
## [Unreleased]
|
|
111
|
+
{% endif -%}
|
|
112
|
+
|
|
113
|
+
{% for group, commits in commits | group_by(attribute="group") %}
|
|
114
|
+
### {{ group | upper_first }}
|
|
115
|
+
{% for commit in commits %}
|
|
116
|
+
- {{ commit.message | split(pat="\n") | first | upper_first | trim }}\
|
|
117
|
+
{% if commit.remote.username %} by [@{{ commit.remote.username }}](https://github.com/{{ commit.remote.username }}){%- endif -%}
|
|
118
|
+
{% if commit.remote.pr_number %} in \
|
|
119
|
+
[#{{ commit.remote.pr_number }}]({{ self::remote_url() }}/pull/{{ commit.remote.pr_number }}) \
|
|
120
|
+
{% elif commit.id %} in \
|
|
121
|
+
[{{ commit.id | truncate(length=7, end="") }}]({{ self::remote_url() }}/commit/{{ commit.id }})\
|
|
122
|
+
{%- endif -%}
|
|
123
|
+
{% endfor %}
|
|
124
|
+
{% endfor -%}
|
|
125
|
+
"""
|
|
126
|
+
# template for the changelog footer
|
|
127
|
+
footer = """
|
|
128
|
+
{%- macro remote_url() -%}
|
|
129
|
+
https://github.com/{{ remote.github.owner }}/{{ remote.github.repo }}
|
|
130
|
+
{%- endmacro -%}
|
|
131
|
+
|
|
132
|
+
{% for release in releases %}
|
|
133
|
+
{% if release.version -%}
|
|
134
|
+
{% if release.previous.version -%}
|
|
135
|
+
[{{ release.version | trim_start_matches(pat="v") }}]: \
|
|
136
|
+
{{ self::remote_url() }}/compare/{{ release.previous.version }}..{{ release.version }}
|
|
137
|
+
{% endif -%}
|
|
138
|
+
{% else -%}
|
|
139
|
+
[unreleased]: {{ self::remote_url() }}/compare/{{ release.previous.version }}..HEAD
|
|
140
|
+
{% endif -%}
|
|
141
|
+
{%- endfor -%}
|
|
142
|
+
"""
|
|
143
|
+
# remove the leading and trailing whitespace from the templates
|
|
144
|
+
trim = true
|
|
145
|
+
|
|
146
|
+
[tool.git-cliff.git]
|
|
147
|
+
# parse the commits based on https://www.conventionalcommits.org
|
|
148
|
+
conventional_commits = true
|
|
149
|
+
# filter out the commits that are not following the conventional commits format
|
|
150
|
+
filter_unconventional = false
|
|
151
|
+
# process each line of a commit as an individual commit
|
|
152
|
+
split_commits = false
|
|
153
|
+
# regex for preprocessing the commit messages
|
|
154
|
+
commit_preprocessors = [
|
|
155
|
+
# remove issue numbers from commits
|
|
156
|
+
{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "" },
|
|
157
|
+
]
|
|
158
|
+
# regex for parsing and grouping commits
|
|
159
|
+
commit_parsers = [
|
|
160
|
+
{ message = "^[a|A]dd", group = "<!-- 1 -->:sparkles: Added" },
|
|
161
|
+
{ message = "^[c|C]hange", group = "<!-- 2 -->:construction_worker: Changed" },
|
|
162
|
+
{ message = "^[f|F]ix", group = "<!-- 3 -->:bug: Bug Fixes" },
|
|
163
|
+
{ message = "^[r|R]emove", group = "<!-- 4 -->:fire: Removed" },
|
|
164
|
+
{ message = "^[d|D]rop", group = "<!-- 4 -->:fire: Removed" },
|
|
165
|
+
{ message = "^[d|D]oc", group = "<!-- 5 -->:books: Documentation" },
|
|
166
|
+
{ message = "^[t|T]est", group = "<!-- 6 -->:white_check_mark: Testing" },
|
|
167
|
+
{ message = "^[c|C]hore", group = "<!-- 7 -->:wrench: Miscellaneous" },
|
|
168
|
+
{ message = "^[c|C]i", group = "<!-- 7 -->️:wrench: Miscellaneous" },
|
|
169
|
+
{ message = "^[m|M]isc", group = "<!-- 7 -->:wrench: Miscellaneous" },
|
|
170
|
+
{ message = "^[d|D]eps", group = "<!-- 8 -->:ship: Dependencies" },
|
|
171
|
+
]
|
|
172
|
+
# filter out the commits that are not matched by commit parsers
|
|
173
|
+
filter_commits = true
|
|
174
|
+
# sort the tags topologically
|
|
175
|
+
topo_order = false
|
|
176
|
+
# sort the commits inside sections by oldest/newest order
|
|
177
|
+
sort_commits = "oldest"
|
|
@@ -138,6 +138,25 @@ This script deletes overrides with a specific filter value.
|
|
|
138
138
|
|
|
139
139
|
---
|
|
140
140
|
|
|
141
|
+
## `generate-random-reports.gmp.py`
|
|
142
|
+
|
|
143
|
+
This script generates randomized report data.
|
|
144
|
+
|
|
145
|
+
### Arguments
|
|
146
|
+
|
|
147
|
+
* `-T <number of tasks>`: number of tasks to be generated
|
|
148
|
+
* `-r <number of reports>`: number of reports per task
|
|
149
|
+
* `-R <number of results>`: number of results per report
|
|
150
|
+
* `--hosts <number of hosts>`: number of randomized hosts to select from
|
|
151
|
+
* `'with-gauss'`: if you would like for the number of reports/task and results/report to be randomized along a Gaussian distribution
|
|
152
|
+
* `--task-type {container,scan}`: Type of Task(s) to store the generated Reports. Can either be 'container' or 'scan', default: 'container'.
|
|
153
|
+
|
|
154
|
+
### Example
|
|
155
|
+
|
|
156
|
+
`$ gvm-script --gmp-username name --gmp-password pass ssh --hostname <gsm> scripts/gen-random-reports.gmp.py -T 5 -r 4 -R 3 --hosts 10 --with-gauss`
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
141
160
|
## `gen-random-targets.gmp.py`
|
|
142
161
|
|
|
143
162
|
This script generates random task data and feeds it to a desired GSM database.
|
|
@@ -225,24 +244,6 @@ This script requests the given report and saves it as a pdf file locally.
|
|
|
225
244
|
|
|
226
245
|
---
|
|
227
246
|
|
|
228
|
-
## `random-report-gen.gmp.py`
|
|
229
|
-
|
|
230
|
-
This script generates randomized report data.
|
|
231
|
-
|
|
232
|
-
### Arguments
|
|
233
|
-
|
|
234
|
-
* `<number of tasks>`: number of tasks to be generated
|
|
235
|
-
* `<number of reports>`: number of reports per task
|
|
236
|
-
* `<number of results>`: number of results per report
|
|
237
|
-
* `<number of hosts>`: number of randomized hosts to select from
|
|
238
|
-
* `'with-gauss'`: if you would like for the number of reports/task and results/report to be randomized along a Gaussian distribution
|
|
239
|
-
|
|
240
|
-
### Example
|
|
241
|
-
|
|
242
|
-
`$ gvm-script --gmp-username name --gmp-password pass ssh --hostname <gsm> scripts/random-report-gen.gmp.py 10 50 2500 256 with-gauss`
|
|
243
|
-
|
|
244
|
-
---
|
|
245
|
-
|
|
246
247
|
## `scan-new-system.gmp.py`
|
|
247
248
|
|
|
248
249
|
This script starts a new scan on the given host.
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Martin Boller
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
4
|
+
#
|
|
5
|
+
# Loosely based on other greenbone scripts
|
|
6
|
+
#
|
|
7
|
+
# Run with: gvm-script --gmp-username admin-user --gmp-password password socket export-hosts-csv.gmp.py <csv file> days
|
|
8
|
+
# example: gvm-script --gmp-username admin --gmp-password top$ecret socket export-hosts-csv.gmp.py hosts.csv 2
|
|
9
|
+
|
|
10
|
+
import csv
|
|
11
|
+
from argparse import ArgumentParser, Namespace, RawTextHelpFormatter
|
|
12
|
+
from datetime import date, datetime, time, timedelta
|
|
13
|
+
|
|
14
|
+
# GVM Specific
|
|
15
|
+
from gvm.protocols.gmp import Gmp
|
|
16
|
+
from gvmtools.helper import error_and_exit
|
|
17
|
+
|
|
18
|
+
HELP_TEXT = (
|
|
19
|
+
"This script generates a csv file with certificates "
|
|
20
|
+
"from Greenbone Vulnerability Manager.\n"
|
|
21
|
+
"Optional: Specify csv filename and days in the past to get data from as positional arguments\n"
|
|
22
|
+
"or live with the defaults\n"
|
|
23
|
+
"csv file will contain:\n"
|
|
24
|
+
"Subject, Issuer, Serial, SHA256 Fingerprint, MD5 Fingerprint, last_seen, Valid From, Valid To"
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def parse_args(args: Namespace) -> Namespace: # pylint: disable=unused-argument
|
|
29
|
+
"""Parsing args ..."""
|
|
30
|
+
|
|
31
|
+
parser = ArgumentParser(
|
|
32
|
+
prefix_chars="+",
|
|
33
|
+
add_help=False,
|
|
34
|
+
formatter_class=RawTextHelpFormatter,
|
|
35
|
+
description=HELP_TEXT,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
parser.add_argument(
|
|
39
|
+
"+h",
|
|
40
|
+
"++help",
|
|
41
|
+
action="help",
|
|
42
|
+
help="Show this help message and exit.",
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
parser.add_argument(
|
|
46
|
+
"csv_filename",
|
|
47
|
+
nargs="?",
|
|
48
|
+
default="gvm_certificates.csv",
|
|
49
|
+
type=str,
|
|
50
|
+
help=(
|
|
51
|
+
"Optional: CSV File with certificate information - Default: gvm_certificates.csv"
|
|
52
|
+
),
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
parser.add_argument(
|
|
56
|
+
"delta_days",
|
|
57
|
+
nargs="?",
|
|
58
|
+
default="1",
|
|
59
|
+
type=int,
|
|
60
|
+
help=(
|
|
61
|
+
"Optional: Number of days in the past to pull information - Default: 1 day"
|
|
62
|
+
),
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
script_args, _ = parser.parse_known_args(args)
|
|
66
|
+
return script_args
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def list_tls_certificates(
|
|
70
|
+
gmp: Gmp, from_date: date, to_date: date, csvfilename: str
|
|
71
|
+
) -> None:
|
|
72
|
+
tls_cert_filter = (
|
|
73
|
+
f"rows=-1 and modified>{from_date.isoformat()} "
|
|
74
|
+
f"and modified<{to_date.isoformat()}"
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
cert_info = []
|
|
78
|
+
|
|
79
|
+
tls_cert_xml = gmp.get_tls_certificates(filter_string=tls_cert_filter)
|
|
80
|
+
# pretty_print(tls_cert_xml)
|
|
81
|
+
|
|
82
|
+
for tls_cert in tls_cert_xml.xpath("tls_certificate"):
|
|
83
|
+
|
|
84
|
+
cert_seen = tls_cert.xpath("last_seen/text()")[0]
|
|
85
|
+
|
|
86
|
+
cert_from = tls_cert.xpath("activation_time/text()")[0]
|
|
87
|
+
|
|
88
|
+
cert_to = tls_cert.xpath("expiration_time/text()")[0]
|
|
89
|
+
|
|
90
|
+
cert_subject = tls_cert.xpath("subject_dn/text()")[0]
|
|
91
|
+
|
|
92
|
+
cert_issuer = tls_cert.xpath("issuer_dn/text()")[0]
|
|
93
|
+
|
|
94
|
+
cert_serial = tls_cert.xpath("serial/text()")[0]
|
|
95
|
+
|
|
96
|
+
cert_sha256 = tls_cert.xpath("sha256_fingerprint/text()")[0]
|
|
97
|
+
|
|
98
|
+
cert_md5 = tls_cert.xpath("md5_fingerprint/text()")[0]
|
|
99
|
+
|
|
100
|
+
cert_info.append(
|
|
101
|
+
[
|
|
102
|
+
cert_subject,
|
|
103
|
+
cert_issuer,
|
|
104
|
+
cert_serial,
|
|
105
|
+
cert_sha256,
|
|
106
|
+
cert_md5,
|
|
107
|
+
cert_seen,
|
|
108
|
+
cert_from,
|
|
109
|
+
cert_to,
|
|
110
|
+
]
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
# Write the list host_info to csv file
|
|
114
|
+
writecsv(csvfilename, cert_info)
|
|
115
|
+
print(
|
|
116
|
+
f"CSV file: {csvfilename}\n"
|
|
117
|
+
f"From: {from_date}\n"
|
|
118
|
+
f"To: {to_date}\n"
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def writecsv(csv_filename: str, hostinfo: list) -> None:
|
|
123
|
+
field_names = [
|
|
124
|
+
"Subject",
|
|
125
|
+
"Issuer",
|
|
126
|
+
"Serial",
|
|
127
|
+
"SHA256 Fingerprint",
|
|
128
|
+
"MD5 Fingerprint",
|
|
129
|
+
"Last seen",
|
|
130
|
+
"Valid From",
|
|
131
|
+
"Valid To",
|
|
132
|
+
]
|
|
133
|
+
try:
|
|
134
|
+
with open(csv_filename, "w") as csvfile:
|
|
135
|
+
writer = csv.writer(csvfile, delimiter=",", quoting=csv.QUOTE_ALL)
|
|
136
|
+
writer.writerow(field_names)
|
|
137
|
+
writer.writerows(hostinfo)
|
|
138
|
+
csvfile.close
|
|
139
|
+
except IOError as e:
|
|
140
|
+
error_and_exit(f"Failed to write csv file: {str(e)} (exit)")
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def main(gmp: Gmp, args: Namespace) -> None:
|
|
144
|
+
# pylint: disable=undefined-variable
|
|
145
|
+
args = args.script[1:]
|
|
146
|
+
parsed_args = parse_args(args=args)
|
|
147
|
+
csv_filename = parsed_args.csv_filename
|
|
148
|
+
delta_days = parsed_args.delta_days
|
|
149
|
+
|
|
150
|
+
# simply getting yesterday from midnight to now
|
|
151
|
+
from_date = datetime.combine(datetime.today(), time.min) - timedelta(
|
|
152
|
+
days=delta_days
|
|
153
|
+
)
|
|
154
|
+
to_date = datetime.now()
|
|
155
|
+
# get the certs
|
|
156
|
+
list_tls_certificates(gmp, from_date, to_date, csv_filename)
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
if __name__ == "__gmp__":
|
|
160
|
+
main(gmp, args)
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2025 Martin Boller
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
4
|
+
#
|
|
5
|
+
# Loosely based on other greenbone scripts
|
|
6
|
+
#
|
|
7
|
+
# Run with: gvm-script --gmp-username admin-user --gmp-password password socket export-hosts-csv.gmp.py <csv file> days
|
|
8
|
+
# example: gvm-script --gmp-username admin --gmp-password top$ecret socket export-hosts-csv.gmp.py hosts.csv 2
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
import csv
|
|
12
|
+
import sys
|
|
13
|
+
from argparse import ArgumentParser, Namespace, RawTextHelpFormatter
|
|
14
|
+
from datetime import date, datetime, time, timedelta
|
|
15
|
+
|
|
16
|
+
from gvm.protocols.gmp import Gmp
|
|
17
|
+
from gvmtools.helper import error_and_exit
|
|
18
|
+
|
|
19
|
+
HELP_TEXT = (
|
|
20
|
+
"This script generates a csv file with Operating System "
|
|
21
|
+
"from Greenbone Vulnerability Manager.\n\n"
|
|
22
|
+
"csv file will contain:\n"
|
|
23
|
+
"IP Address, Hostname, MAC Address, Operating System, Last Seen, CVSS\n"
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def check_args(args: Namespace) -> None:
|
|
28
|
+
len_args = len(args.script) - 1
|
|
29
|
+
if len_args < 2:
|
|
30
|
+
message = """
|
|
31
|
+
This script requests all hosts <days> prior to today and exports it as a csv file.
|
|
32
|
+
It requires two parameter after the script name:
|
|
33
|
+
1. filename -- name of the csv file of the report
|
|
34
|
+
2. days -- number of days before and until today to pull hosts information from
|
|
35
|
+
|
|
36
|
+
Examples:
|
|
37
|
+
$ gvm-script --gmp-username username --gmp-password password socket export-hosts-csv.gmp.py <csv_file> <days>
|
|
38
|
+
$ gvm-script --gmp-username admin --gmp-password 0f6fa69b-32bb-453a-9aa4-b8c9e56b3d00 socket export-hosts-csv.gmp.py operatingsystems.csv 4
|
|
39
|
+
"""
|
|
40
|
+
print(message)
|
|
41
|
+
sys.exit()
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def parse_args(args: Namespace) -> Namespace: # pylint: disable=unused-argument
|
|
45
|
+
"""Parsing args ..."""
|
|
46
|
+
|
|
47
|
+
parser = ArgumentParser(
|
|
48
|
+
prefix_chars="+",
|
|
49
|
+
add_help=False,
|
|
50
|
+
formatter_class=RawTextHelpFormatter,
|
|
51
|
+
description=HELP_TEXT,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
parser.add_argument(
|
|
55
|
+
"+h",
|
|
56
|
+
"++help",
|
|
57
|
+
action="help",
|
|
58
|
+
help="Show this help message and exit.",
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
parser.add_argument(
|
|
62
|
+
"csv_filename",
|
|
63
|
+
type=str,
|
|
64
|
+
help=("CSV File containing credentials"),
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
parser.add_argument(
|
|
68
|
+
"delta_days",
|
|
69
|
+
type=int,
|
|
70
|
+
help=("Number of days in the past to pull hosts information"),
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
script_args, _ = parser.parse_known_args(args)
|
|
74
|
+
return script_args
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def list_operating_systems(
|
|
78
|
+
gmp: Gmp, from_date: date, to_date: date, csvfilename: str
|
|
79
|
+
) -> None:
|
|
80
|
+
operating_system_filter = (
|
|
81
|
+
f"rows=-1 "
|
|
82
|
+
f"and modified>{from_date.isoformat()} "
|
|
83
|
+
f"and modified<{to_date.isoformat()}"
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
os_info = []
|
|
87
|
+
|
|
88
|
+
operating_systems_xml = gmp.get_operating_systems(
|
|
89
|
+
filter_string=operating_system_filter
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
for operating_system in operating_systems_xml.xpath("asset"):
|
|
93
|
+
# title will always be there
|
|
94
|
+
os_title = operating_system.xpath("name/text()")[0]
|
|
95
|
+
|
|
96
|
+
os_latest_severity = operating_system.xpath(
|
|
97
|
+
"os/latest_severity/value/text()"
|
|
98
|
+
)[0]
|
|
99
|
+
|
|
100
|
+
os_host_count = operating_system.xpath("os/installs/text()")[0]
|
|
101
|
+
|
|
102
|
+
os_info.append(
|
|
103
|
+
[
|
|
104
|
+
os_title,
|
|
105
|
+
os_latest_severity,
|
|
106
|
+
os_host_count,
|
|
107
|
+
]
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
# Write the list host_info to csv file
|
|
111
|
+
writecsv(csvfilename, os_info)
|
|
112
|
+
print(
|
|
113
|
+
f"CSV file: {csvfilename}\n"
|
|
114
|
+
f"From: {from_date}\n"
|
|
115
|
+
f"To: {to_date}\n"
|
|
116
|
+
)
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
def writecsv(csv_filename: str, hostinfo: list) -> None:
|
|
120
|
+
field_names = [
|
|
121
|
+
"IP Address",
|
|
122
|
+
"Hostname",
|
|
123
|
+
"MAC Address",
|
|
124
|
+
"Operating System",
|
|
125
|
+
"Last Seen",
|
|
126
|
+
"CVSS",
|
|
127
|
+
]
|
|
128
|
+
try:
|
|
129
|
+
with open(csv_filename, "w") as csvfile:
|
|
130
|
+
writer = csv.writer(csvfile, delimiter=",", quoting=csv.QUOTE_ALL)
|
|
131
|
+
writer.writerow(field_names)
|
|
132
|
+
writer.writerows(hostinfo)
|
|
133
|
+
csvfile.close
|
|
134
|
+
except IOError as e:
|
|
135
|
+
error_and_exit(f"Failed to write csv file: {str(e)} (exit)")
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
def main(gmp: Gmp, args: Namespace) -> None:
|
|
139
|
+
# pylint: disable=undefined-variable
|
|
140
|
+
# argv[0] contains the csv file name
|
|
141
|
+
check_args(args)
|
|
142
|
+
if args.script:
|
|
143
|
+
args = args.script[1:]
|
|
144
|
+
parsed_args = parse_args(args=args)
|
|
145
|
+
|
|
146
|
+
delta_days = parsed_args.delta_days
|
|
147
|
+
# simply getting yesterday from midnight to now
|
|
148
|
+
from_date = datetime.combine(datetime.today(), time.min) - timedelta(
|
|
149
|
+
days=delta_days
|
|
150
|
+
)
|
|
151
|
+
to_date = datetime.now()
|
|
152
|
+
# get the hosts
|
|
153
|
+
list_operating_systems(gmp, from_date, to_date, parsed_args.csv_filename)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
if __name__ == "__gmp__":
|
|
157
|
+
main(gmp, args)
|
gvm_tools-25.2.0/pyproject.toml
DELETED
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
[build-system]
|
|
2
|
-
requires = ["poetry-core>=1.0.0"]
|
|
3
|
-
build-backend = "poetry.core.masonry.api"
|
|
4
|
-
|
|
5
|
-
[tool.poetry]
|
|
6
|
-
name = "gvm-tools"
|
|
7
|
-
version = "25.2.0"
|
|
8
|
-
authors = ["Greenbone AG <info@greenbone.net>"]
|
|
9
|
-
description = "Tools to control a GSM/GVM over GMP or OSP"
|
|
10
|
-
license = "GPL-3.0-or-later"
|
|
11
|
-
readme = "README.md"
|
|
12
|
-
homepage = "https://github.com/greenbone/gvm-tools/"
|
|
13
|
-
repository = "https://github.com/greenbone/gvm-tools/"
|
|
14
|
-
documentation = "https://greenbone.github.io/gvm-tools/"
|
|
15
|
-
classifiers = [
|
|
16
|
-
# Full list: https://pypi.org/pypi?%3Aaction=list_classifiers
|
|
17
|
-
'Development Status :: 5 - Production/Stable',
|
|
18
|
-
'License :: OSI Approved :: GNU General Public License v3 (GPLv3)',
|
|
19
|
-
'Environment :: Console',
|
|
20
|
-
'Intended Audience :: Developers',
|
|
21
|
-
'Intended Audience :: System Administrators',
|
|
22
|
-
'Programming Language :: Python :: 3.9',
|
|
23
|
-
'Programming Language :: Python :: 3.10',
|
|
24
|
-
'Programming Language :: Python :: 3.11',
|
|
25
|
-
'Programming Language :: Python :: 3.12',
|
|
26
|
-
'Operating System :: OS Independent',
|
|
27
|
-
'Topic :: Software Development :: Libraries :: Python Modules',
|
|
28
|
-
]
|
|
29
|
-
packages = [
|
|
30
|
-
{ include = "gvmtools" },
|
|
31
|
-
{ include = "tests", format = "sdist" },
|
|
32
|
-
{ include = "scripts", format = "sdist" },
|
|
33
|
-
]
|
|
34
|
-
|
|
35
|
-
[tool.poetry.scripts]
|
|
36
|
-
gvm-pyshell = "gvmtools.pyshell:main"
|
|
37
|
-
gvm-cli = "gvmtools.cli:main"
|
|
38
|
-
gvm-script = "gvmtools.script:main"
|
|
39
|
-
|
|
40
|
-
[tool.poetry.dependencies]
|
|
41
|
-
python = "^3.9"
|
|
42
|
-
python-gvm = ">=23.4.2"
|
|
43
|
-
|
|
44
|
-
[tool.poetry.group.dev.dependencies]
|
|
45
|
-
autohooks = ">=22.8.0"
|
|
46
|
-
autohooks-plugin-ruff = ">=23.6.1"
|
|
47
|
-
autohooks-plugin-black = ">=22.8.1"
|
|
48
|
-
pontos = ">=22.8.1"
|
|
49
|
-
sphinx = ">=5.3.0"
|
|
50
|
-
coverage = ">=7.2"
|
|
51
|
-
rope = ">=1.9.0"
|
|
52
|
-
furo = ">=2023.3.27"
|
|
53
|
-
sphinx-autobuild = ">=2021.3.14"
|
|
54
|
-
myst-parser = ">=2.0.0"
|
|
55
|
-
|
|
56
|
-
[tool.black]
|
|
57
|
-
line-length = 80
|
|
58
|
-
target-version = ['py39', 'py310', 'py311', 'py312']
|
|
59
|
-
exclude = '''
|
|
60
|
-
/(
|
|
61
|
-
\.git
|
|
62
|
-
| \.venv
|
|
63
|
-
| \.github
|
|
64
|
-
| \.vscode
|
|
65
|
-
| _build
|
|
66
|
-
| build
|
|
67
|
-
| dist
|
|
68
|
-
| docs
|
|
69
|
-
)/
|
|
70
|
-
'''
|
|
71
|
-
|
|
72
|
-
[tool.autohooks]
|
|
73
|
-
mode = "poetry"
|
|
74
|
-
pre-commit = ['autohooks.plugins.black', 'autohooks.plugins.ruff']
|
|
75
|
-
|
|
76
|
-
[tool.ruff]
|
|
77
|
-
line-length = 80
|
|
78
|
-
target-version = "py39"
|
|
79
|
-
|
|
80
|
-
[tool.ruff.lint]
|
|
81
|
-
extend-select = ["I", "PLE", "PLW"]
|
|
82
|
-
|
|
83
|
-
[tool.coverage.run]
|
|
84
|
-
omit = ["tests/*"]
|
|
85
|
-
source = ["gvmtools", "scripts"]
|
|
86
|
-
|
|
87
|
-
[tool.pontos.version]
|
|
88
|
-
version-module-file = "gvmtools/__version__.py"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|