insightconnect-plugin-runtime 6.2.2__tar.gz → 6.2.4__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.
- {insightconnect_plugin_runtime-6.2.2/insightconnect_plugin_runtime.egg-info → insightconnect_plugin_runtime-6.2.4}/PKG-INFO +25 -15
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/README.md +7 -5
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/api/endpoints.py +14 -15
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/helper.py +17 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/schema.py +6 -9
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4/insightconnect_plugin_runtime.egg-info}/PKG-INFO +25 -15
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime.egg-info/requires.txt +8 -8
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/setup.py +9 -9
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_helpers.py +25 -1
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/utils.py +1 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/MANIFEST.in +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect-plugin-swagger.json +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/action.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/api/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/api/schemas.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/cli.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/clients/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/clients/aws_client.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/clients/oauth.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/connection.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/data/input_message_schema.json +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/data/output_message_schema.json +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/dispatcher.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/exceptions.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/metrics.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/plugin.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/server.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/step.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/task.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/trigger.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/util.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime/variables.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime.egg-info/SOURCES.txt +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime.egg-info/dependency_links.txt +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/insightconnect_plugin_runtime.egg-info/top_level.txt +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/setup.cfg +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/hello/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/hello/action.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/hello/schema.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/return_bad_json/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/return_bad_json/action.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/return_bad_json/schema.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/throw_exception/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/throw_exception/action.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/actions/throw_exception/schema.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/connection/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/connection/connection.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/connection/schema.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/tasks/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/tasks/monitor_events/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/tasks/monitor_events/schema.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/tasks/monitor_events/task.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/hello_trigger/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/hello_trigger/schema.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/hello_trigger/trigger.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/return_bad_json_trigger/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/return_bad_json_trigger/schema.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/return_bad_json_trigger/trigger.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/throw_exception_trigger/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/throw_exception_trigger/schema.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/triggers/throw_exception_trigger/trigger.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/komand_hello_world/util/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/hello_world/setup.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/tests/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/tests/conftest.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/tests/test_cli.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/tests/test_hello_world.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/hello_world/tests/test_server.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/__init__.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_action.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_api.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_aws_action.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_custom_encoder.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_endpoints.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_exceptions.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_metrics.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_oauth.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_plugin.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_schema.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_server_cloud_plugins.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_server_spec.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_trigger.py +0 -0
- {insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_variables.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: insightconnect-plugin-runtime
|
|
3
|
-
Version: 6.2.
|
|
3
|
+
Version: 6.2.4
|
|
4
4
|
Summary: InsightConnect Plugin Runtime
|
|
5
5
|
Home-page: https://github.com/rapid7/komand-plugin-sdk-python
|
|
6
6
|
Author: Rapid7 Integrations Alliance
|
|
@@ -12,20 +12,28 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
12
12
|
Classifier: Natural Language :: English
|
|
13
13
|
Classifier: Topic :: Software Development :: Build Tools
|
|
14
14
|
Description-Content-Type: text/markdown
|
|
15
|
-
Requires-Dist: requests==2.32.
|
|
15
|
+
Requires-Dist: requests==2.32.3
|
|
16
16
|
Requires-Dist: python_jsonschema_objects==0.5.2
|
|
17
|
-
Requires-Dist: jsonschema==4.
|
|
18
|
-
Requires-Dist: certifi==2024.
|
|
19
|
-
Requires-Dist: Flask==3.0
|
|
20
|
-
Requires-Dist: gunicorn==
|
|
17
|
+
Requires-Dist: jsonschema==4.22.0
|
|
18
|
+
Requires-Dist: certifi==2024.12.14
|
|
19
|
+
Requires-Dist: Flask==3.1.0
|
|
20
|
+
Requires-Dist: gunicorn==23.0.0
|
|
21
21
|
Requires-Dist: greenlet==3.1.1
|
|
22
|
-
Requires-Dist: gevent==24.
|
|
22
|
+
Requires-Dist: gevent==24.11.1
|
|
23
23
|
Requires-Dist: marshmallow==3.21.0
|
|
24
24
|
Requires-Dist: apispec==6.5.0
|
|
25
25
|
Requires-Dist: apispec-webframeworks==1.0.0
|
|
26
|
-
Requires-Dist: blinker==1.
|
|
27
|
-
Requires-Dist: structlog==24.
|
|
26
|
+
Requires-Dist: blinker==1.9.0
|
|
27
|
+
Requires-Dist: structlog==24.4.0
|
|
28
28
|
Requires-Dist: python-json-logger==2.0.7
|
|
29
|
+
Dynamic: author
|
|
30
|
+
Dynamic: author-email
|
|
31
|
+
Dynamic: classifier
|
|
32
|
+
Dynamic: description
|
|
33
|
+
Dynamic: description-content-type
|
|
34
|
+
Dynamic: home-page
|
|
35
|
+
Dynamic: requires-dist
|
|
36
|
+
Dynamic: summary
|
|
29
37
|
|
|
30
38
|
|
|
31
39
|
# InsightConnect Python Plugin Runtime 
|
|
@@ -48,10 +56,10 @@ to get started.
|
|
|
48
56
|
|
|
49
57
|
## Development of the InsightConnect Plugin Runtime
|
|
50
58
|
|
|
51
|
-
The Python Runtime codebase is built to support Python 3.11.
|
|
59
|
+
The Python Runtime codebase is built to support Python 3.11.11 as of version 6.2.3. The following dependencies will need
|
|
52
60
|
to be installed when developing or testing the Plugin Runtime:
|
|
53
61
|
|
|
54
|
-
- Python 3.11.
|
|
62
|
+
- Python 3.11.11
|
|
55
63
|
- Docker
|
|
56
64
|
- make
|
|
57
65
|
- tox
|
|
@@ -67,7 +75,7 @@ version and activate it. Then build, install, and confirm the package has been i
|
|
|
67
75
|
> source venv/bin/activate
|
|
68
76
|
> pip install -e ./
|
|
69
77
|
> pip list | grep insightconnect-plugin-runtime
|
|
70
|
-
insightconnect-plugin-runtime
|
|
78
|
+
insightconnect-plugin-runtime 6.2.3
|
|
71
79
|
```
|
|
72
80
|
|
|
73
81
|
#### Building the InsightConnect Plugin Runtime Docker Images
|
|
@@ -123,7 +131,7 @@ name as a parameter:
|
|
|
123
131
|
|
|
124
132
|
The plugin will be started in `http` mode and listening at `http:0.0.0.0:10001`:
|
|
125
133
|
```
|
|
126
|
-
[2020-02-13 23:21:13 -0500] [56567] [INFO] Starting gunicorn
|
|
134
|
+
[2020-02-13 23:21:13 -0500] [56567] [INFO] Starting gunicorn 23.0.0
|
|
127
135
|
[2020-02-13 23:21:13 -0500] [56567] [INFO] Listening at: http://0.0.0.0:10001 (56567)
|
|
128
136
|
[2020-02-13 23:21:13 -0500] [56567] [INFO] Using worker: threads
|
|
129
137
|
[2020-02-13 23:21:13 -0500] [56571] [INFO] Booting worker with pid: 56571
|
|
@@ -184,7 +192,7 @@ Running a specific test file:
|
|
|
184
192
|
|
|
185
193
|
| | Plugin | Slim Plugin |
|
|
186
194
|
|:------------------|:-------:|:-----------:|
|
|
187
|
-
| Python Version | 3.11.
|
|
195
|
+
| Python Version | 3.11.11 | 3.11.11 |
|
|
188
196
|
| OS | Alpine | Bullseye |
|
|
189
197
|
| Package installer | apk | apt |
|
|
190
198
|
| Shell | /bin/sh | /bin/bash |
|
|
@@ -211,6 +219,8 @@ contributed. Black is installed as a test dependency and the hook can be initial
|
|
|
211
219
|
after cloning this repository.
|
|
212
220
|
|
|
213
221
|
## Changelog
|
|
222
|
+
* 6.2.4 - Update `make_request` helper to support extra parameter of `max_response_size` to cap the response
|
|
223
|
+
* 6.2.3 - Updated dockerfiles for both `slim` and `full` SDK types to use Python 3.11.11 | Updated dependencies | Removed `pkg_resources` usage due to deprecation
|
|
214
224
|
* 6.2.2 - Fix instances where logging errors would lead to duplicate entries being output | Add option to hash only on provided keys for `hash_sha1` function
|
|
215
225
|
* 6.2.1 - Fix instances where logging would lead to duplicate entries being output
|
|
216
226
|
* 6.2.0 - Update base images to pull Python 3.11.10 | changed the pep-8 check in tox to `pycodestyle`
|
|
@@ -19,10 +19,10 @@ to get started.
|
|
|
19
19
|
|
|
20
20
|
## Development of the InsightConnect Plugin Runtime
|
|
21
21
|
|
|
22
|
-
The Python Runtime codebase is built to support Python 3.11.
|
|
22
|
+
The Python Runtime codebase is built to support Python 3.11.11 as of version 6.2.3. The following dependencies will need
|
|
23
23
|
to be installed when developing or testing the Plugin Runtime:
|
|
24
24
|
|
|
25
|
-
- Python 3.11.
|
|
25
|
+
- Python 3.11.11
|
|
26
26
|
- Docker
|
|
27
27
|
- make
|
|
28
28
|
- tox
|
|
@@ -38,7 +38,7 @@ version and activate it. Then build, install, and confirm the package has been i
|
|
|
38
38
|
> source venv/bin/activate
|
|
39
39
|
> pip install -e ./
|
|
40
40
|
> pip list | grep insightconnect-plugin-runtime
|
|
41
|
-
insightconnect-plugin-runtime
|
|
41
|
+
insightconnect-plugin-runtime 6.2.3
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
#### Building the InsightConnect Plugin Runtime Docker Images
|
|
@@ -94,7 +94,7 @@ name as a parameter:
|
|
|
94
94
|
|
|
95
95
|
The plugin will be started in `http` mode and listening at `http:0.0.0.0:10001`:
|
|
96
96
|
```
|
|
97
|
-
[2020-02-13 23:21:13 -0500] [56567] [INFO] Starting gunicorn
|
|
97
|
+
[2020-02-13 23:21:13 -0500] [56567] [INFO] Starting gunicorn 23.0.0
|
|
98
98
|
[2020-02-13 23:21:13 -0500] [56567] [INFO] Listening at: http://0.0.0.0:10001 (56567)
|
|
99
99
|
[2020-02-13 23:21:13 -0500] [56567] [INFO] Using worker: threads
|
|
100
100
|
[2020-02-13 23:21:13 -0500] [56571] [INFO] Booting worker with pid: 56571
|
|
@@ -155,7 +155,7 @@ Running a specific test file:
|
|
|
155
155
|
|
|
156
156
|
| | Plugin | Slim Plugin |
|
|
157
157
|
|:------------------|:-------:|:-----------:|
|
|
158
|
-
| Python Version | 3.11.
|
|
158
|
+
| Python Version | 3.11.11 | 3.11.11 |
|
|
159
159
|
| OS | Alpine | Bullseye |
|
|
160
160
|
| Package installer | apk | apt |
|
|
161
161
|
| Shell | /bin/sh | /bin/bash |
|
|
@@ -182,6 +182,8 @@ contributed. Black is installed as a test dependency and the hook can be initial
|
|
|
182
182
|
after cloning this repository.
|
|
183
183
|
|
|
184
184
|
## Changelog
|
|
185
|
+
* 6.2.4 - Update `make_request` helper to support extra parameter of `max_response_size` to cap the response
|
|
186
|
+
* 6.2.3 - Updated dockerfiles for both `slim` and `full` SDK types to use Python 3.11.11 | Updated dependencies | Removed `pkg_resources` usage due to deprecation
|
|
185
187
|
* 6.2.2 - Fix instances where logging errors would lead to duplicate entries being output | Add option to hash only on provided keys for `hash_sha1` function
|
|
186
188
|
* 6.2.1 - Fix instances where logging would lead to duplicate entries being output
|
|
187
189
|
* 6.2.0 - Update base images to pull Python 3.11.10 | changed the pep-8 check in tox to `pycodestyle`
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
+
import importlib.metadata as importlib_metadata
|
|
1
2
|
import json
|
|
2
|
-
import subprocess
|
|
3
|
-
import yaml
|
|
4
3
|
import os
|
|
5
|
-
import pkg_resources
|
|
6
4
|
import signal
|
|
7
|
-
|
|
8
|
-
from werkzeug.exceptions import InternalServerError, HTTPException
|
|
5
|
+
import subprocess
|
|
9
6
|
from typing import Any, Dict
|
|
10
7
|
|
|
11
8
|
import structlog
|
|
9
|
+
import yaml
|
|
10
|
+
from flask import Blueprint, abort, jsonify, make_response, request
|
|
11
|
+
from werkzeug.exceptions import HTTPException, InternalServerError
|
|
12
12
|
|
|
13
|
+
from insightconnect_plugin_runtime.api.schemas import (
|
|
14
|
+
ActionTriggerDetailsSchema,
|
|
15
|
+
ConnectionDetailsSchema,
|
|
16
|
+
PluginInfoSchema,
|
|
17
|
+
TaskDetailsSchema,
|
|
18
|
+
)
|
|
13
19
|
from insightconnect_plugin_runtime.exceptions import (
|
|
14
20
|
ClientException,
|
|
15
|
-
ServerException,
|
|
16
|
-
LoggedException,
|
|
17
21
|
ConnectionTestException,
|
|
22
|
+
LoggedException,
|
|
18
23
|
PluginException,
|
|
19
|
-
|
|
20
|
-
from insightconnect_plugin_runtime.api.schemas import (
|
|
21
|
-
PluginInfoSchema,
|
|
22
|
-
ActionTriggerDetailsSchema,
|
|
23
|
-
TaskDetailsSchema,
|
|
24
|
-
ConnectionDetailsSchema,
|
|
24
|
+
ServerException,
|
|
25
25
|
)
|
|
26
26
|
from insightconnect_plugin_runtime.util import OutputMasker
|
|
27
27
|
|
|
@@ -780,11 +780,10 @@ class Endpoints:
|
|
|
780
780
|
|
|
781
781
|
def get_plugin_sdk_version(self):
|
|
782
782
|
try:
|
|
783
|
-
version =
|
|
783
|
+
version = importlib_metadata.version("insightconnect-plugin-runtime")
|
|
784
784
|
except Exception:
|
|
785
785
|
self.logger.warn("Unable to get SDK version")
|
|
786
786
|
version = "0.0.0"
|
|
787
|
-
|
|
788
787
|
return version
|
|
789
788
|
|
|
790
789
|
def add_plugin_custom_config(
|
|
@@ -21,6 +21,7 @@ from insightconnect_plugin_runtime.exceptions import (
|
|
|
21
21
|
PluginException,
|
|
22
22
|
HTTPStatusCodes,
|
|
23
23
|
ResponseExceptionData,
|
|
24
|
+
APIException
|
|
24
25
|
)
|
|
25
26
|
|
|
26
27
|
CAMEL_CASE_REGEX = r"\b[a-z0-9]+([A-Z][a-z]+[0-9]*)*\b"
|
|
@@ -111,6 +112,7 @@ def make_request(
|
|
|
111
112
|
exception_custom_configs: Dict[int, Exception] = {},
|
|
112
113
|
exception_data_location: str = None,
|
|
113
114
|
allowed_status_codes: List[str] = [],
|
|
115
|
+
max_response_size: int = None,
|
|
114
116
|
) -> Tuple[requests.Response, Dict]:
|
|
115
117
|
"""
|
|
116
118
|
Makes a HTTP request while checking for RequestErrors and JSONDecodeErrors
|
|
@@ -133,6 +135,8 @@ def make_request(
|
|
|
133
135
|
:type str:
|
|
134
136
|
:param allowed_status_codes: Status codes that will not raise an exception.
|
|
135
137
|
:type List[str]:
|
|
138
|
+
:param max_response_size: Raise an error if the stream content is bigger than this specified size
|
|
139
|
+
:type int:
|
|
136
140
|
|
|
137
141
|
:return: The request response and the response JSON.
|
|
138
142
|
:rtype: Tuple[Response, Dict]
|
|
@@ -148,6 +152,19 @@ def make_request(
|
|
|
148
152
|
cert=cert,
|
|
149
153
|
stream=stream,
|
|
150
154
|
)
|
|
155
|
+
|
|
156
|
+
# Before we close this session check and download all content, check if the returned content is too large.
|
|
157
|
+
# This may not be supported on all APIs as they need to support streaming and return the content-length
|
|
158
|
+
# header but adding this extra check will be beneficial for memory usage to those that do support it.
|
|
159
|
+
if stream and max_response_size:
|
|
160
|
+
resp_size = response.headers.get("content-length", "0")
|
|
161
|
+
if int(resp_size) > max_response_size:
|
|
162
|
+
raise APIException(
|
|
163
|
+
status_code=400,
|
|
164
|
+
cause=f"API response is exceeding allowed limit of {max_response_size} bytes.",
|
|
165
|
+
assistance="Please update the parameters to reduce the size of the data being returned.",
|
|
166
|
+
data=f"Content length returned was {resp_size} and max allowed is {max_response_size}",
|
|
167
|
+
)
|
|
151
168
|
except requests.exceptions.Timeout as exception:
|
|
152
169
|
raise PluginException(
|
|
153
170
|
preset=PluginException.Preset.TIMEOUT, data=str(exception)
|
|
@@ -1,21 +1,18 @@
|
|
|
1
1
|
import json
|
|
2
|
+
from pathlib import Path
|
|
2
3
|
|
|
3
|
-
import pkg_resources
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
def load_schema(file_name):
|
|
5
|
+
def load_schema(file_name: str) -> dict:
|
|
7
6
|
"""
|
|
8
7
|
Loads a json schema from the packages data folder.
|
|
9
8
|
:param file_name: name of the file
|
|
10
9
|
:return: JSON object as a dictionary
|
|
11
10
|
"""
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
schema = json.loads(schema)
|
|
18
|
-
return schema
|
|
12
|
+
with open(
|
|
13
|
+
Path(__file__).parent / "data" / file_name, "r", encoding="utf-8"
|
|
14
|
+
) as schema_file:
|
|
15
|
+
return json.loads(schema_file.read())
|
|
19
16
|
|
|
20
17
|
|
|
21
18
|
input_message_schema = load_schema("input_message_schema.json")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: insightconnect-plugin-runtime
|
|
3
|
-
Version: 6.2.
|
|
3
|
+
Version: 6.2.4
|
|
4
4
|
Summary: InsightConnect Plugin Runtime
|
|
5
5
|
Home-page: https://github.com/rapid7/komand-plugin-sdk-python
|
|
6
6
|
Author: Rapid7 Integrations Alliance
|
|
@@ -12,20 +12,28 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
12
12
|
Classifier: Natural Language :: English
|
|
13
13
|
Classifier: Topic :: Software Development :: Build Tools
|
|
14
14
|
Description-Content-Type: text/markdown
|
|
15
|
-
Requires-Dist: requests==2.32.
|
|
15
|
+
Requires-Dist: requests==2.32.3
|
|
16
16
|
Requires-Dist: python_jsonschema_objects==0.5.2
|
|
17
|
-
Requires-Dist: jsonschema==4.
|
|
18
|
-
Requires-Dist: certifi==2024.
|
|
19
|
-
Requires-Dist: Flask==3.0
|
|
20
|
-
Requires-Dist: gunicorn==
|
|
17
|
+
Requires-Dist: jsonschema==4.22.0
|
|
18
|
+
Requires-Dist: certifi==2024.12.14
|
|
19
|
+
Requires-Dist: Flask==3.1.0
|
|
20
|
+
Requires-Dist: gunicorn==23.0.0
|
|
21
21
|
Requires-Dist: greenlet==3.1.1
|
|
22
|
-
Requires-Dist: gevent==24.
|
|
22
|
+
Requires-Dist: gevent==24.11.1
|
|
23
23
|
Requires-Dist: marshmallow==3.21.0
|
|
24
24
|
Requires-Dist: apispec==6.5.0
|
|
25
25
|
Requires-Dist: apispec-webframeworks==1.0.0
|
|
26
|
-
Requires-Dist: blinker==1.
|
|
27
|
-
Requires-Dist: structlog==24.
|
|
26
|
+
Requires-Dist: blinker==1.9.0
|
|
27
|
+
Requires-Dist: structlog==24.4.0
|
|
28
28
|
Requires-Dist: python-json-logger==2.0.7
|
|
29
|
+
Dynamic: author
|
|
30
|
+
Dynamic: author-email
|
|
31
|
+
Dynamic: classifier
|
|
32
|
+
Dynamic: description
|
|
33
|
+
Dynamic: description-content-type
|
|
34
|
+
Dynamic: home-page
|
|
35
|
+
Dynamic: requires-dist
|
|
36
|
+
Dynamic: summary
|
|
29
37
|
|
|
30
38
|
|
|
31
39
|
# InsightConnect Python Plugin Runtime 
|
|
@@ -48,10 +56,10 @@ to get started.
|
|
|
48
56
|
|
|
49
57
|
## Development of the InsightConnect Plugin Runtime
|
|
50
58
|
|
|
51
|
-
The Python Runtime codebase is built to support Python 3.11.
|
|
59
|
+
The Python Runtime codebase is built to support Python 3.11.11 as of version 6.2.3. The following dependencies will need
|
|
52
60
|
to be installed when developing or testing the Plugin Runtime:
|
|
53
61
|
|
|
54
|
-
- Python 3.11.
|
|
62
|
+
- Python 3.11.11
|
|
55
63
|
- Docker
|
|
56
64
|
- make
|
|
57
65
|
- tox
|
|
@@ -67,7 +75,7 @@ version and activate it. Then build, install, and confirm the package has been i
|
|
|
67
75
|
> source venv/bin/activate
|
|
68
76
|
> pip install -e ./
|
|
69
77
|
> pip list | grep insightconnect-plugin-runtime
|
|
70
|
-
insightconnect-plugin-runtime
|
|
78
|
+
insightconnect-plugin-runtime 6.2.3
|
|
71
79
|
```
|
|
72
80
|
|
|
73
81
|
#### Building the InsightConnect Plugin Runtime Docker Images
|
|
@@ -123,7 +131,7 @@ name as a parameter:
|
|
|
123
131
|
|
|
124
132
|
The plugin will be started in `http` mode and listening at `http:0.0.0.0:10001`:
|
|
125
133
|
```
|
|
126
|
-
[2020-02-13 23:21:13 -0500] [56567] [INFO] Starting gunicorn
|
|
134
|
+
[2020-02-13 23:21:13 -0500] [56567] [INFO] Starting gunicorn 23.0.0
|
|
127
135
|
[2020-02-13 23:21:13 -0500] [56567] [INFO] Listening at: http://0.0.0.0:10001 (56567)
|
|
128
136
|
[2020-02-13 23:21:13 -0500] [56567] [INFO] Using worker: threads
|
|
129
137
|
[2020-02-13 23:21:13 -0500] [56571] [INFO] Booting worker with pid: 56571
|
|
@@ -184,7 +192,7 @@ Running a specific test file:
|
|
|
184
192
|
|
|
185
193
|
| | Plugin | Slim Plugin |
|
|
186
194
|
|:------------------|:-------:|:-----------:|
|
|
187
|
-
| Python Version | 3.11.
|
|
195
|
+
| Python Version | 3.11.11 | 3.11.11 |
|
|
188
196
|
| OS | Alpine | Bullseye |
|
|
189
197
|
| Package installer | apk | apt |
|
|
190
198
|
| Shell | /bin/sh | /bin/bash |
|
|
@@ -211,6 +219,8 @@ contributed. Black is installed as a test dependency and the hook can be initial
|
|
|
211
219
|
after cloning this repository.
|
|
212
220
|
|
|
213
221
|
## Changelog
|
|
222
|
+
* 6.2.4 - Update `make_request` helper to support extra parameter of `max_response_size` to cap the response
|
|
223
|
+
* 6.2.3 - Updated dockerfiles for both `slim` and `full` SDK types to use Python 3.11.11 | Updated dependencies | Removed `pkg_resources` usage due to deprecation
|
|
214
224
|
* 6.2.2 - Fix instances where logging errors would lead to duplicate entries being output | Add option to hash only on provided keys for `hash_sha1` function
|
|
215
225
|
* 6.2.1 - Fix instances where logging would lead to duplicate entries being output
|
|
216
226
|
* 6.2.0 - Update base images to pull Python 3.11.10 | changed the pep-8 check in tox to `pycodestyle`
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
requests==2.32.
|
|
1
|
+
requests==2.32.3
|
|
2
2
|
python_jsonschema_objects==0.5.2
|
|
3
|
-
jsonschema==4.
|
|
4
|
-
certifi==2024.
|
|
5
|
-
Flask==3.0
|
|
6
|
-
gunicorn==
|
|
3
|
+
jsonschema==4.22.0
|
|
4
|
+
certifi==2024.12.14
|
|
5
|
+
Flask==3.1.0
|
|
6
|
+
gunicorn==23.0.0
|
|
7
7
|
greenlet==3.1.1
|
|
8
|
-
gevent==24.
|
|
8
|
+
gevent==24.11.1
|
|
9
9
|
marshmallow==3.21.0
|
|
10
10
|
apispec==6.5.0
|
|
11
11
|
apispec-webframeworks==1.0.0
|
|
12
|
-
blinker==1.
|
|
13
|
-
structlog==24.
|
|
12
|
+
blinker==1.9.0
|
|
13
|
+
structlog==24.4.0
|
|
14
14
|
python-json-logger==2.0.7
|
|
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
|
|
|
5
5
|
|
|
6
6
|
setup(
|
|
7
7
|
name="insightconnect-plugin-runtime",
|
|
8
|
-
version="6.2.
|
|
8
|
+
version="6.2.4",
|
|
9
9
|
description="InsightConnect Plugin Runtime",
|
|
10
10
|
long_description=long_description,
|
|
11
11
|
long_description_content_type="text/markdown",
|
|
@@ -14,19 +14,19 @@ setup(
|
|
|
14
14
|
url="https://github.com/rapid7/komand-plugin-sdk-python",
|
|
15
15
|
packages=find_packages(),
|
|
16
16
|
install_requires=[
|
|
17
|
-
"requests==2.32.
|
|
17
|
+
"requests==2.32.3",
|
|
18
18
|
"python_jsonschema_objects==0.5.2",
|
|
19
|
-
"jsonschema==4.
|
|
20
|
-
"certifi==2024.
|
|
21
|
-
"Flask==3.0
|
|
22
|
-
"gunicorn==
|
|
19
|
+
"jsonschema==4.22.0",
|
|
20
|
+
"certifi==2024.12.14",
|
|
21
|
+
"Flask==3.1.0",
|
|
22
|
+
"gunicorn==23.0.0",
|
|
23
23
|
"greenlet==3.1.1",
|
|
24
|
-
"gevent==24.
|
|
24
|
+
"gevent==24.11.1",
|
|
25
25
|
"marshmallow==3.21.0",
|
|
26
26
|
"apispec==6.5.0",
|
|
27
27
|
"apispec-webframeworks==1.0.0",
|
|
28
|
-
"blinker==1.
|
|
29
|
-
"structlog==24.
|
|
28
|
+
"blinker==1.9.0",
|
|
29
|
+
"structlog==24.4.0",
|
|
30
30
|
"python-json-logger==2.0.7"
|
|
31
31
|
],
|
|
32
32
|
tests_require=[
|
|
@@ -4,6 +4,7 @@ from insightconnect_plugin_runtime.exceptions import (
|
|
|
4
4
|
HTTPStatusCodes,
|
|
5
5
|
ResponseExceptionData,
|
|
6
6
|
PluginException,
|
|
7
|
+
APIException
|
|
7
8
|
)
|
|
8
9
|
import requests
|
|
9
10
|
import os
|
|
@@ -378,16 +379,39 @@ class TestRequestsHelpers(TestCase):
|
|
|
378
379
|
json={"sample": "value"},
|
|
379
380
|
headers={"Content-Type": "application/json"},
|
|
380
381
|
)
|
|
381
|
-
response = helper.make_request(_request=request)
|
|
382
|
+
response = helper.make_request(_request=request, stream=True, max_response_size=100)
|
|
382
383
|
expected = {
|
|
383
384
|
"json": {"example": "sample"},
|
|
384
385
|
"status_code": 200,
|
|
385
386
|
"content": b"example",
|
|
386
387
|
"url": "https://example.com/success",
|
|
388
|
+
"content-length": "1",
|
|
387
389
|
}
|
|
388
390
|
self.assertEqual(response.content, expected.get("content"))
|
|
389
391
|
self.assertEqual(response.status_code, expected.get("status_code"))
|
|
390
392
|
self.assertEqual(response.url, expected.get("url"))
|
|
393
|
+
self.assertEqual(response.headers.get("content-length"), expected.get("content-length"))
|
|
394
|
+
|
|
395
|
+
@patch("requests.Session.send")
|
|
396
|
+
def test_make_request_enforces_max_response_size(self, mocked_request):
|
|
397
|
+
returned_max_size, test_max_size = "5000", 1527
|
|
398
|
+
|
|
399
|
+
response = requests.Response()
|
|
400
|
+
response.headers = {"content-length": returned_max_size, "content-type": "application/json"}
|
|
401
|
+
mocked_request.return_value = response
|
|
402
|
+
|
|
403
|
+
test_request = requests.Request(method="GET", url="https://event_source.com/api/v1/logs")
|
|
404
|
+
|
|
405
|
+
with self.assertRaises(APIException) as api_err:
|
|
406
|
+
helper.make_request(_request=test_request, stream=True, max_response_size=test_max_size)
|
|
407
|
+
|
|
408
|
+
self.assertEqual(400, api_err.exception.status_code)
|
|
409
|
+
exp_err_cause = f"API response is exceeding allowed limit of {test_max_size} bytes."
|
|
410
|
+
exp_err_data = f"Content length returned was {returned_max_size} and max allowed is {test_max_size}"
|
|
411
|
+
self.assertEqual(400, api_err.exception.status_code)
|
|
412
|
+
self.assertEqual(exp_err_cause, api_err.exception.cause)
|
|
413
|
+
self.assertEqual(exp_err_data, api_err.exception.data)
|
|
414
|
+
|
|
391
415
|
|
|
392
416
|
@parameterized.expand(
|
|
393
417
|
[
|
|
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
|
{insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/__init__.py
RENAMED
|
File without changes
|
{insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/plugin/__init__.py
RENAMED
|
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
|
{insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{insightconnect_plugin_runtime-6.2.2 → insightconnect_plugin_runtime-6.2.4}/tests/unit/test_oauth.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|