mmisp-lib 0.2.0__tar.gz → 0.4.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.
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/PKG-INFO +8 -2
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/README.md +3 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/pyproject.toml +9 -2
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/attributes.py +12 -11
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/auth_keys.py +52 -3
- mmisp_lib-0.4.0/src/mmisp/api_schemas/authentication.py +89 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/events.py +51 -49
- mmisp_lib-0.4.0/src/mmisp/api_schemas/galaxy_clusters.py +64 -0
- mmisp_lib-0.4.0/src/mmisp/api_schemas/jobs.py +52 -0
- mmisp_lib-0.4.0/src/mmisp/api_schemas/organisations.py +126 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/roles.py +80 -0
- mmisp_lib-0.4.0/src/mmisp/api_schemas/servers.py +79 -0
- mmisp_lib-0.4.0/src/mmisp/api_schemas/statistics.py +19 -0
- mmisp_lib-0.4.0/src/mmisp/api_schemas/users.py +182 -0
- mmisp_lib-0.4.0/src/mmisp/commandline_tool/main.py +179 -0
- mmisp_lib-0.4.0/src/mmisp/commandline_tool/organisation.py +157 -0
- mmisp_lib-0.4.0/src/mmisp/commandline_tool/setup.py +101 -0
- mmisp_lib-0.4.0/src/mmisp/commandline_tool/user.py +126 -0
- mmisp_lib-0.4.0/src/mmisp/db/additional_properties.py +10 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/all_models.py +2 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/config.py +6 -1
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/database.py +25 -9
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/mixins.py +2 -1
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/attribute.py +81 -3
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/event.py +35 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/galaxy.py +7 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/galaxy_cluster.py +32 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/identity_provider.py +1 -1
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/object.py +14 -0
- mmisp_lib-0.4.0/src/mmisp/db/models/organisation.py +57 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/tag.py +4 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/user.py +4 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/user_setting.py +2 -0
- mmisp_lib-0.4.0/src/mmisp/lib/attribute_search_filter.py +60 -0
- mmisp_lib-0.4.0/src/mmisp/tests/compatibility_helpers.py +56 -0
- mmisp_lib-0.4.0/src/mmisp/tests/fixtures.py +787 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/feed_generator.py +82 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/model_generators/attribute_generator.py +5 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/model_generators/auth_key_generator.py +18 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/model_generators/event_generator.py +16 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/model_generators/galaxy_generator.py +11 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/model_generators/identity_provider_generator.py +16 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/model_generators/noticelist_generator.py +26 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/model_generators/organisation_generator.py +20 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/model_generators/role_generator.py +106 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/model_generators/server_generator.py +27 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/model_generators/sharing_group_generator.py +16 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/model_generators/tag_generator.py +15 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/model_generators/taxonomy_generator.py +40 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/model_generators/user_generator.py +27 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/model_generators/user_setting_generator.py +20 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/model_generators/warninglist_generator.py +31 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/model_generators/workflow_generator.py +414 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/object_generator.py +180 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/sighting_generator.py +47 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/tag_generator.py +103 -0
- mmisp_lib-0.4.0/src/mmisp/tests/generators/taxonomies_generator.py +61 -0
- mmisp_lib-0.4.0/src/mmisp/util/py.typed +0 -0
- mmisp_lib-0.4.0/src/mmisp/workflows/__init__.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/workflows/execution.py +5 -3
- mmisp_lib-0.4.0/src/mmisp/workflows/py.typed +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp_lib.egg-info/PKG-INFO +8 -2
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp_lib.egg-info/SOURCES.txt +38 -1
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp_lib.egg-info/requires.txt +4 -1
- mmisp_lib-0.4.0/tests/test_commandline_tool.py +255 -0
- mmisp_lib-0.2.0/src/mmisp/api_schemas/authentication.py +0 -38
- mmisp_lib-0.2.0/src/mmisp/api_schemas/organisations.py +0 -24
- mmisp_lib-0.2.0/src/mmisp/api_schemas/users.py +0 -52
- mmisp_lib-0.2.0/src/mmisp/db/models/organisation.py +0 -30
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/LICENSE +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/setup.cfg +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/__init__.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/common.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/feeds.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/galaxies.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/logs.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/noticelists.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/objects.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/py.typed +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/responses/__init__.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/responses/check_graph_response.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/responses/standard_status_response.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/sharing_groups.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/sightings.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/tags.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/taxonomies.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/user_settings.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/warninglists.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/api_schemas/workflows.py +0 -0
- {mmisp_lib-0.2.0/src/mmisp/db → mmisp_lib-0.4.0/src/mmisp/commandline_tool}/__init__.py +0 -0
- {mmisp_lib-0.2.0/src/mmisp/db → mmisp_lib-0.4.0/src/mmisp/commandline_tool}/py.typed +0 -0
- {mmisp_lib-0.2.0/src/mmisp/db/models → mmisp_lib-0.4.0/src/mmisp/db}/__init__.py +0 -0
- {mmisp_lib-0.2.0/src/mmisp/lib → mmisp_lib-0.4.0/src/mmisp/db/models}/__init__.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/admin_setting.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/auth_key.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/feed.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/log.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/noticelist.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/role.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/server.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/sharing_group.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/sighting.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/taxonomy.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/warninglist.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/workflow.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/models/workflow_blueprint.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/mypy.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/db/print_changes.py +0 -0
- {mmisp_lib-0.2.0/src/mmisp/lib → mmisp_lib-0.4.0/src/mmisp/db}/py.typed +0 -0
- {mmisp_lib-0.2.0/src/mmisp/util → mmisp_lib-0.4.0/src/mmisp/lib}/__init__.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/lib/actions.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/lib/attributes.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/lib/logging.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/lib/permissions.py +0 -0
- {mmisp_lib-0.2.0/src/mmisp/plugins → mmisp_lib-0.4.0/src/mmisp/lib}/py.typed +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/lib/uuid.py +0 -0
- {mmisp_lib-0.2.0/src/mmisp/util → mmisp_lib-0.4.0/src/mmisp/plugins}/py.typed +0 -0
- {mmisp_lib-0.2.0/src/mmisp/workflows → mmisp_lib-0.4.0/src/mmisp/tests}/__init__.py +0 -0
- /mmisp_lib-0.2.0/src/mmisp/workflows/py.typed → /mmisp_lib-0.4.0/src/mmisp/util/__init__.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/util/crypto.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/util/models.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/util/partial.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/util/uuid.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/workflows/fastapi.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/workflows/graph.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/workflows/input.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/workflows/legacy.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/workflows/misp_core_format.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp/workflows/modules.py +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp_lib.egg-info/dependency_links.txt +0 -0
- {mmisp_lib-0.2.0 → mmisp_lib-0.4.0}/src/mmisp_lib.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: mmisp-lib
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.4.0
|
4
4
|
Requires-Python: >=3.11.0
|
5
5
|
Description-Content-Type: text/markdown
|
6
6
|
License-File: LICENSE
|
@@ -20,16 +20,19 @@ Requires-Dist: bcrypt==4.1.2
|
|
20
20
|
Requires-Dist: nanoid==2.0.0
|
21
21
|
Requires-Dist: cryptography==42.0.5
|
22
22
|
Requires-Dist: jinja2~=3.1.4
|
23
|
+
Requires-Dist: fire
|
23
24
|
Provides-Extra: dev
|
24
25
|
Requires-Dist: ruff>=0.3.7; extra == "dev"
|
25
26
|
Requires-Dist: mypy==1.8.0; extra == "dev"
|
26
27
|
Requires-Dist: pre-commit==3.6.0; extra == "dev"
|
27
28
|
Requires-Dist: pytest==8.0.0; extra == "dev"
|
28
29
|
Requires-Dist: pytest-test-groups; extra == "dev"
|
29
|
-
Requires-Dist: pytest-asyncio==0.
|
30
|
+
Requires-Dist: pytest-asyncio==0.21.2; extra == "dev"
|
30
31
|
Requires-Dist: pytest-cov==4.1.0; extra == "dev"
|
31
32
|
Requires-Dist: respx==0.20.2; extra == "dev"
|
32
33
|
Requires-Dist: mysql-connector-python==8.3.0; extra == "dev"
|
34
|
+
Requires-Dist: icecream; extra == "dev"
|
35
|
+
Requires-Dist: asyncio; extra == "dev"
|
33
36
|
|
34
37
|
# Modern MISP - API
|
35
38
|
|
@@ -47,6 +50,9 @@ Create a file called `.env` and copy the contents of `.env.example` into it. Fin
|
|
47
50
|
|
48
51
|
You should now be able to access the api on `localhost:4000`.
|
49
52
|
|
53
|
+
To use the commandline tool run `python .\src\mmisp\commandline_tool\main.py --h` from the base directory to view all commands. For detailed information of all commands: `python .\src\mmisp\commandline_tool\main.py --help`.
|
54
|
+
For setting up the DB use the commandline tool option for setup and then create your user account. In case you have not created a new organisation yet, please add your account to the setup basic organisation: ghost_org.
|
55
|
+
|
50
56
|
Run tests using `make test` (local database container required running) or `make test/lite`.
|
51
57
|
|
52
58
|
## Setting up your IDE
|
@@ -14,6 +14,9 @@ Create a file called `.env` and copy the contents of `.env.example` into it. Fin
|
|
14
14
|
|
15
15
|
You should now be able to access the api on `localhost:4000`.
|
16
16
|
|
17
|
+
To use the commandline tool run `python .\src\mmisp\commandline_tool\main.py --h` from the base directory to view all commands. For detailed information of all commands: `python .\src\mmisp\commandline_tool\main.py --help`.
|
18
|
+
For setting up the DB use the commandline tool option for setup and then create your user account. In case you have not created a new organisation yet, please add your account to the setup basic organisation: ghost_org.
|
19
|
+
|
17
20
|
Run tests using `make test` (local database container required running) or `make test/lite`.
|
18
21
|
|
19
22
|
## Setting up your IDE
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[project]
|
2
2
|
name = "mmisp-lib"
|
3
|
-
version = "0.
|
3
|
+
version = "0.4.0"
|
4
4
|
description = ""
|
5
5
|
authors = []
|
6
6
|
readme = "README.md"
|
@@ -24,6 +24,7 @@ dependencies = [
|
|
24
24
|
"nanoid==2.0.0",
|
25
25
|
"cryptography==42.0.5",
|
26
26
|
"jinja2~=3.1.4",
|
27
|
+
"fire",
|
27
28
|
]
|
28
29
|
|
29
30
|
|
@@ -34,10 +35,12 @@ dev = [
|
|
34
35
|
"pre-commit==3.6.0",
|
35
36
|
"pytest==8.0.0",
|
36
37
|
"pytest-test-groups",
|
37
|
-
"pytest-asyncio==0.
|
38
|
+
"pytest-asyncio==0.21.2",
|
38
39
|
"pytest-cov==4.1.0",
|
39
40
|
"respx==0.20.2",
|
40
41
|
"mysql-connector-python==8.3.0",
|
42
|
+
"icecream",
|
43
|
+
"asyncio",
|
41
44
|
]
|
42
45
|
|
43
46
|
[tool.setuptools.package-data]
|
@@ -58,6 +61,10 @@ unsafe-fixes = true
|
|
58
61
|
select = ["E", "F", "W", "I", "ICN", "ANN"]
|
59
62
|
ignore = ["ANN002", "ANN003", "ANN401"]
|
60
63
|
|
64
|
+
[tool.ruff.lint.per-file-ignores]
|
65
|
+
"tests/**" = ["ANN001", "ANN201", "ANN202", "S101"]
|
66
|
+
"src/mmisp/tests/**" = ["ANN001", "ANN201", "ANN202", "S101"]
|
67
|
+
|
61
68
|
[tool.coverage.run]
|
62
69
|
concurrency = ["greenlet", "thread"]
|
63
70
|
include = [
|
@@ -34,6 +34,7 @@ class SearchAttributesEvent(BaseModel):
|
|
34
34
|
info: str
|
35
35
|
orgc_id: str
|
36
36
|
uuid: str
|
37
|
+
publish_timestamp: int
|
37
38
|
|
38
39
|
|
39
40
|
class SearchAttributesAttributesDetails(BaseModel):
|
@@ -56,7 +57,7 @@ class SearchAttributesAttributesDetails(BaseModel):
|
|
56
57
|
last_seen: str | None = None
|
57
58
|
Event: SearchAttributesEvent | None = None
|
58
59
|
Object: SearchAttributesObject | None = None
|
59
|
-
Tag: list[GetAttributeTag] =
|
60
|
+
Tag: list[GetAttributeTag] | None = None
|
60
61
|
|
61
62
|
|
62
63
|
class SearchAttributesAttributes(BaseModel):
|
@@ -86,10 +87,7 @@ class SearchAttributesModelOverrides(BaseModel):
|
|
86
87
|
base_score_config: SearchAttributesModelOverridesBaseScoreConfig
|
87
88
|
|
88
89
|
|
89
|
-
class
|
90
|
-
returnFormat: str = "json"
|
91
|
-
page: int | None = None
|
92
|
-
limit: int | None = None
|
90
|
+
class RestSearchFilter(BaseModel):
|
93
91
|
value: str | None = None
|
94
92
|
value1: str | None = None
|
95
93
|
value2: str | None = None
|
@@ -101,15 +99,21 @@ class SearchAttributesBody(BaseModel):
|
|
101
99
|
to: str | None = None
|
102
100
|
last: int | None = None
|
103
101
|
eventid: str | None = None
|
102
|
+
published: bool | None = None
|
103
|
+
to_ids: bool | None = None
|
104
|
+
deleted: bool | None = None
|
105
|
+
|
106
|
+
|
107
|
+
class SearchAttributesBody(RestSearchFilter):
|
108
|
+
returnFormat: str = "json"
|
109
|
+
page: int | None = None
|
110
|
+
limit: int | None = None
|
104
111
|
with_attachments: Annotated[bool | None, Field(alias="withAttachments")] = None
|
105
112
|
uuid: str | None = None
|
106
113
|
publish_timestamp: str | None = None
|
107
|
-
published: bool | None = None
|
108
114
|
timestamp: str | None = None
|
109
115
|
attribute_timestamp: str | None = None
|
110
116
|
enforce_warninglist: Annotated[bool | None, Field(alias="enforceWarninglist")]
|
111
|
-
to_ids: bool | None = None
|
112
|
-
deleted: bool | None = None
|
113
117
|
event_timestamp: str | None = None
|
114
118
|
threat_level_id: str | None = None
|
115
119
|
eventinfo: str | None = None
|
@@ -134,9 +138,6 @@ class SearchAttributesBody(BaseModel):
|
|
134
138
|
include_full_model: Annotated[bool | None, Field(alias="includeFullModel")] = None
|
135
139
|
exclude_decayed: Annotated[bool | None, Field(alias="excludeDecayed")] = None
|
136
140
|
|
137
|
-
class Config:
|
138
|
-
orm_mode = True
|
139
|
-
|
140
141
|
|
141
142
|
class RestoreAttributeResponse(BaseModel):
|
142
143
|
id: str
|
@@ -1,6 +1,7 @@
|
|
1
1
|
from datetime import datetime
|
2
|
+
from typing import List, Self, Union
|
2
3
|
|
3
|
-
from pydantic import BaseModel, PositiveInt, conint
|
4
|
+
from pydantic import BaseModel, PositiveInt, conint, validator
|
4
5
|
|
5
6
|
|
6
7
|
class SearchGetAuthKeysResponseItemUser(BaseModel):
|
@@ -41,6 +42,21 @@ class SearchGetAuthKeysResponseItemAuthKey(BaseModel):
|
|
41
42
|
unique_ips: list[str] | None = []
|
42
43
|
|
43
44
|
|
45
|
+
class SearchGetAuthKeysResponseAuthKey(BaseModel):
|
46
|
+
id: str
|
47
|
+
uuid: str
|
48
|
+
authkey_start: str
|
49
|
+
authkey_end: str
|
50
|
+
created: str
|
51
|
+
expiration: str
|
52
|
+
read_only: bool
|
53
|
+
user_id: str
|
54
|
+
comment: str | None
|
55
|
+
allowed_ips: list[str] | None = None
|
56
|
+
unique_ips: list[str] | None = []
|
57
|
+
last_used: str | None = None
|
58
|
+
|
59
|
+
|
44
60
|
class SearchGetAuthKeysResponseItem(BaseModel):
|
45
61
|
AuthKey: SearchGetAuthKeysResponseItemAuthKey
|
46
62
|
User: SearchGetAuthKeysResponseItemUser
|
@@ -49,6 +65,14 @@ class SearchGetAuthKeysResponseItem(BaseModel):
|
|
49
65
|
orm_mode = True
|
50
66
|
|
51
67
|
|
68
|
+
class SearchGetAuthKeysResponse(BaseModel):
|
69
|
+
AuthKey: SearchGetAuthKeysResponseAuthKey
|
70
|
+
User: SearchGetAuthKeysResponseItemUser
|
71
|
+
|
72
|
+
class Config:
|
73
|
+
orm_mode = True
|
74
|
+
|
75
|
+
|
52
76
|
class SearchAuthKeyBody(BaseModel):
|
53
77
|
page: PositiveInt = 1
|
54
78
|
limit: conint(gt=0, lt=500) = 25 # type: ignore
|
@@ -78,6 +102,20 @@ class EditAuthKeyResponseAuthKey(BaseModel):
|
|
78
102
|
allowed_ips: str | None = None
|
79
103
|
|
80
104
|
|
105
|
+
class EditAuthKeyResponseCompleteAuthKey(BaseModel):
|
106
|
+
id: str
|
107
|
+
uuid: str
|
108
|
+
authkey_start: str
|
109
|
+
authkey_end: str
|
110
|
+
created: str
|
111
|
+
expiration: str
|
112
|
+
read_only: bool
|
113
|
+
user_id: str
|
114
|
+
comment: str
|
115
|
+
allowed_ips: str | None = None
|
116
|
+
unique_ips: list[str] | None = None
|
117
|
+
|
118
|
+
|
81
119
|
class EditAuthKeyResponseUser(BaseModel):
|
82
120
|
id: str
|
83
121
|
org_id: str
|
@@ -88,11 +126,22 @@ class EditAuthKeyResponse(BaseModel):
|
|
88
126
|
User: EditAuthKeyResponseUser
|
89
127
|
|
90
128
|
|
129
|
+
class EditAuthKeyResponseCompl(BaseModel):
|
130
|
+
AuthKey: EditAuthKeyResponseCompleteAuthKey
|
131
|
+
User: EditAuthKeyResponseUser
|
132
|
+
|
133
|
+
|
91
134
|
class EditAuthKeyBody(BaseModel):
|
92
135
|
read_only: bool | None = None
|
93
136
|
comment: str | None = None
|
94
|
-
allowed_ips:
|
95
|
-
expiration:
|
137
|
+
allowed_ips: Union[str, List[str]] | None = None
|
138
|
+
expiration: str | None = None
|
139
|
+
|
140
|
+
@validator("allowed_ips", pre=True)
|
141
|
+
def ensure_list(cls: Self, v: str | List[str]) -> List[str]:
|
142
|
+
if isinstance(v, str):
|
143
|
+
return [v]
|
144
|
+
return v
|
96
145
|
|
97
146
|
|
98
147
|
class AddAuthKeyResponseAuthKey(BaseModel):
|
@@ -0,0 +1,89 @@
|
|
1
|
+
from enum import Enum
|
2
|
+
|
3
|
+
from pydantic import BaseModel
|
4
|
+
|
5
|
+
|
6
|
+
class TokenResponse(BaseModel):
|
7
|
+
token: str
|
8
|
+
|
9
|
+
|
10
|
+
class ChangeLoginInfoResponse(BaseModel):
|
11
|
+
successful: bool
|
12
|
+
|
13
|
+
|
14
|
+
class IdentityProviderBody(BaseModel):
|
15
|
+
name: str
|
16
|
+
org_id: str
|
17
|
+
active: bool
|
18
|
+
base_url: str
|
19
|
+
client_id: str
|
20
|
+
client_secret: str
|
21
|
+
scope: str | None = None
|
22
|
+
|
23
|
+
|
24
|
+
class IdentityProviderCallbackBody(BaseModel):
|
25
|
+
code: str
|
26
|
+
redirect_uri: str
|
27
|
+
|
28
|
+
|
29
|
+
class IdentityProviderEditBody(BaseModel):
|
30
|
+
name: str | None = None
|
31
|
+
org_id: str | None = None
|
32
|
+
active: bool | None = None
|
33
|
+
base_url: str | None = None
|
34
|
+
client_id: str | None = None
|
35
|
+
client_secret: str | None = None
|
36
|
+
scope: str | None = None
|
37
|
+
|
38
|
+
|
39
|
+
class GetIdentityProviderResponse(BaseModel):
|
40
|
+
id: str
|
41
|
+
name: str
|
42
|
+
org_id: str
|
43
|
+
active: bool
|
44
|
+
base_url: str
|
45
|
+
client_id: str
|
46
|
+
client_secret: str
|
47
|
+
scope: str | None = None
|
48
|
+
|
49
|
+
|
50
|
+
class IdentityProviderInfo(BaseModel):
|
51
|
+
id: str
|
52
|
+
name: str
|
53
|
+
url: str | None = None
|
54
|
+
|
55
|
+
class Config:
|
56
|
+
orm_mode = True
|
57
|
+
|
58
|
+
|
59
|
+
class LoginType(Enum):
|
60
|
+
PASSWORD = "password"
|
61
|
+
IDENTITY_PROVIDER = "idp"
|
62
|
+
|
63
|
+
|
64
|
+
class StartLoginBody(BaseModel):
|
65
|
+
email: str
|
66
|
+
|
67
|
+
|
68
|
+
class PasswordLoginBody(BaseModel):
|
69
|
+
email: str
|
70
|
+
password: str
|
71
|
+
|
72
|
+
|
73
|
+
class SetPasswordBody(BaseModel):
|
74
|
+
password: str
|
75
|
+
|
76
|
+
|
77
|
+
class ChangePasswordBody(BaseModel):
|
78
|
+
email: str
|
79
|
+
password: str
|
80
|
+
oldPassword: str | None = None
|
81
|
+
|
82
|
+
|
83
|
+
class ExchangeTokenLoginBody(BaseModel):
|
84
|
+
exchangeToken: str
|
85
|
+
|
86
|
+
|
87
|
+
class StartLoginResponse(BaseModel):
|
88
|
+
loginType: LoginType
|
89
|
+
identityProviders: list[IdentityProviderInfo] = []
|
@@ -1,3 +1,5 @@
|
|
1
|
+
from datetime import datetime
|
2
|
+
|
1
3
|
from pydantic import BaseModel, PositiveInt, conint
|
2
4
|
|
3
5
|
from mmisp.api_schemas.organisations import Organisation
|
@@ -23,6 +25,46 @@ class AddEditGetEventGalaxyClusterMeta(BaseModel):
|
|
23
25
|
kill_chain: str | None = None
|
24
26
|
|
25
27
|
|
28
|
+
class FreeTextImportWorkerData(BaseModel):
|
29
|
+
data: str
|
30
|
+
|
31
|
+
|
32
|
+
class FreeTextImportWorkerUser(BaseModel):
|
33
|
+
user_id: int
|
34
|
+
|
35
|
+
|
36
|
+
class FreeTextImportWorkerBody(BaseModel):
|
37
|
+
user: FreeTextImportWorkerUser
|
38
|
+
data: FreeTextImportWorkerData
|
39
|
+
|
40
|
+
class Config:
|
41
|
+
orm_mode = True
|
42
|
+
|
43
|
+
|
44
|
+
class AddAttributeViaFreeTextImportEventResponse(BaseModel):
|
45
|
+
comment: str | None = None
|
46
|
+
value: str
|
47
|
+
original_value: str
|
48
|
+
to_ids: str
|
49
|
+
type: str
|
50
|
+
category: str
|
51
|
+
distribution: str
|
52
|
+
|
53
|
+
class Config:
|
54
|
+
orm_mode = True
|
55
|
+
|
56
|
+
|
57
|
+
class AddAttributeViaFreeTextImportEventAttributes(BaseModel):
|
58
|
+
value: str
|
59
|
+
|
60
|
+
|
61
|
+
class AddAttributeViaFreeTextImportEventBody(BaseModel):
|
62
|
+
Attribute: AddAttributeViaFreeTextImportEventAttributes
|
63
|
+
|
64
|
+
class Config:
|
65
|
+
orm_mode = True
|
66
|
+
|
67
|
+
|
26
68
|
class GetAllEventsGalaxyCluster(BaseModel):
|
27
69
|
id: str
|
28
70
|
uuid: str
|
@@ -49,7 +91,7 @@ class GetAllEventsGalaxyCluster(BaseModel):
|
|
49
91
|
meta: AddEditGetEventGalaxyClusterMeta | None = None
|
50
92
|
tag_id: str
|
51
93
|
local: bool | None = None
|
52
|
-
relationship_type: str | None = None
|
94
|
+
relationship_type: bool | str | None = None
|
53
95
|
|
54
96
|
|
55
97
|
class AddEditGetEventGalaxyClusterRelationTag(BaseModel):
|
@@ -109,7 +151,7 @@ class AddEditGetEventGalaxyCluster(BaseModel):
|
|
109
151
|
attribute_tag_id: str | None = None
|
110
152
|
event_tag_id: str | None = None
|
111
153
|
local: bool | None = None
|
112
|
-
relationship_type: str = ""
|
154
|
+
relationship_type: bool | str = ""
|
113
155
|
|
114
156
|
|
115
157
|
class AddEditGetEventGalaxy(BaseModel):
|
@@ -130,7 +172,7 @@ class AddEditGetEventGalaxy(BaseModel):
|
|
130
172
|
class AddEditGetEventOrg(BaseModel):
|
131
173
|
id: str
|
132
174
|
name: str
|
133
|
-
uuid: str
|
175
|
+
uuid: str | None = None
|
134
176
|
local: bool | None = None
|
135
177
|
|
136
178
|
|
@@ -146,7 +188,7 @@ class AddEditGetEventTag(BaseModel):
|
|
146
188
|
is_custom_galaxy: bool
|
147
189
|
local_only: bool
|
148
190
|
local: bool
|
149
|
-
relationship_type: str | None = None
|
191
|
+
relationship_type: bool | str | None = None
|
150
192
|
|
151
193
|
|
152
194
|
class AddEditGetEventAttribute(BaseModel):
|
@@ -248,13 +290,13 @@ class AddEditGetEventResponse(BaseModel):
|
|
248
290
|
Event: AddEditGetEventDetails
|
249
291
|
|
250
292
|
class Config:
|
251
|
-
|
293
|
+
json_encoders = {datetime: lambda v: v.strftime("%Y-%m-%d %H:%M:%S")}
|
252
294
|
|
253
295
|
|
254
296
|
class GetAllEventsOrg(BaseModel):
|
255
297
|
id: str
|
256
298
|
name: str
|
257
|
-
uuid: str
|
299
|
+
uuid: str | None = None
|
258
300
|
|
259
301
|
|
260
302
|
class UnpublishEventResponse(BaseModel):
|
@@ -416,8 +458,8 @@ class GetAllEventsEventTag(BaseModel):
|
|
416
458
|
event_id: str
|
417
459
|
tag_id: str
|
418
460
|
local: bool
|
419
|
-
relationship_type: str
|
420
|
-
Tag: GetAllEventsEventTagTag
|
461
|
+
relationship_type: bool | str | None = None
|
462
|
+
Tag: GetAllEventsEventTagTag | None = None
|
421
463
|
|
422
464
|
|
423
465
|
class GetAllEventsResponse(BaseModel):
|
@@ -440,7 +482,7 @@ class GetAllEventsResponse(BaseModel):
|
|
440
482
|
sighting_timestamp: str
|
441
483
|
disable_correlation: bool
|
442
484
|
extends_uuid: str
|
443
|
-
event_creator_email: str # omitted
|
485
|
+
event_creator_email: str | None = None # omitted
|
444
486
|
protected: str | None = None
|
445
487
|
Org: GetAllEventsOrg
|
446
488
|
Orgc: GetAllEventsOrg
|
@@ -451,22 +493,6 @@ class GetAllEventsResponse(BaseModel):
|
|
451
493
|
orm_mode = True
|
452
494
|
|
453
495
|
|
454
|
-
class FreeTextImportWorkerData(BaseModel):
|
455
|
-
data: str
|
456
|
-
|
457
|
-
|
458
|
-
class FreeTextImportWorkerUser(BaseModel):
|
459
|
-
user_id: int
|
460
|
-
|
461
|
-
|
462
|
-
class FreeTextImportWorkerBody(BaseModel):
|
463
|
-
user: FreeTextImportWorkerUser
|
464
|
-
data: FreeTextImportWorkerData
|
465
|
-
|
466
|
-
class Config:
|
467
|
-
orm_mode = True
|
468
|
-
|
469
|
-
|
470
496
|
class EditEventBody(BaseModel):
|
471
497
|
info: str | None = None
|
472
498
|
org_id: str | None = None
|
@@ -546,30 +572,6 @@ class AddEventTag(BaseModel):
|
|
546
572
|
name: str
|
547
573
|
|
548
574
|
|
549
|
-
class AddAttributeViaFreeTextImportEventResponse(BaseModel):
|
550
|
-
comment: str | None = None
|
551
|
-
value: str
|
552
|
-
original_value: str
|
553
|
-
to_ids: str
|
554
|
-
type: str
|
555
|
-
category: str
|
556
|
-
distribution: str
|
557
|
-
|
558
|
-
class Config:
|
559
|
-
orm_mode = True
|
560
|
-
|
561
|
-
|
562
|
-
class AddAttributeViaFreeTextImportEventAttributes(BaseModel):
|
563
|
-
value: str
|
564
|
-
|
565
|
-
|
566
|
-
class AddAttributeViaFreeTextImportEventBody(BaseModel):
|
567
|
-
Attribute: AddAttributeViaFreeTextImportEventAttributes
|
568
|
-
|
569
|
-
class Config:
|
570
|
-
orm_mode = True
|
571
|
-
|
572
|
-
|
573
575
|
class AddEditGetEventRelatedEventAttributesOrg(BaseModel):
|
574
576
|
id: str
|
575
577
|
name: str
|
@@ -0,0 +1,64 @@
|
|
1
|
+
from pydantic import BaseModel
|
2
|
+
|
3
|
+
from mmisp.api_schemas.events.add_edit_get_event_response import AddEditGetEventGalaxyClusterRelation
|
4
|
+
from mmisp.api_schemas.events.get_all_events_response import GetAllEventsGalaxyClusterGalaxy
|
5
|
+
from mmisp.api_schemas.galaxies import ExportGalaxyGalaxyElement, GetAllSearchGalaxiesAttributes
|
6
|
+
from mmisp.api_schemas.organisations import GetOrganisationResponse
|
7
|
+
from mmisp.api_schemas.organisations.organisation import Organisation
|
8
|
+
|
9
|
+
|
10
|
+
class GetGalaxyClusterResponse(BaseModel):
|
11
|
+
id: str | None = None
|
12
|
+
uuid: str | None = None
|
13
|
+
collection_uuid: str
|
14
|
+
type: str
|
15
|
+
value: str
|
16
|
+
tag_name: str
|
17
|
+
description: str
|
18
|
+
galaxy_id: str
|
19
|
+
source: str
|
20
|
+
authors: list[str]
|
21
|
+
version: str
|
22
|
+
distribution: str
|
23
|
+
sharing_group_id: str
|
24
|
+
org_id: str
|
25
|
+
orgc_id: str
|
26
|
+
default: bool
|
27
|
+
locked: bool
|
28
|
+
extends_uuid: str
|
29
|
+
extends_version: str
|
30
|
+
published: bool
|
31
|
+
deleted: bool
|
32
|
+
Galaxy: GetAllSearchGalaxiesAttributes
|
33
|
+
GalaxyElement: list[ExportGalaxyGalaxyElement]
|
34
|
+
Org: GetOrganisationResponse
|
35
|
+
Orgc: GetOrganisationResponse
|
36
|
+
|
37
|
+
|
38
|
+
class ExportGalaxyClusterResponse(BaseModel):
|
39
|
+
id: str
|
40
|
+
uuid: str
|
41
|
+
collection_uuid: str
|
42
|
+
type: str
|
43
|
+
value: str
|
44
|
+
tag_name: str
|
45
|
+
description: str
|
46
|
+
galaxy_id: str
|
47
|
+
source: str
|
48
|
+
authors: list[str]
|
49
|
+
version: str
|
50
|
+
distribution: str
|
51
|
+
sharing_group_id: str
|
52
|
+
org_id: str
|
53
|
+
orgc_id: str
|
54
|
+
default: bool
|
55
|
+
locked: bool
|
56
|
+
extends_uuid: str
|
57
|
+
extends_version: str
|
58
|
+
published: bool
|
59
|
+
deleted: bool
|
60
|
+
GalaxyElement: list[ExportGalaxyGalaxyElement]
|
61
|
+
Galaxy: GetAllEventsGalaxyClusterGalaxy
|
62
|
+
GalaxyClusterRelation: list[AddEditGetEventGalaxyClusterRelation] = []
|
63
|
+
Org: Organisation
|
64
|
+
Orgc: Organisation
|
@@ -0,0 +1,52 @@
|
|
1
|
+
from pydantic import BaseModel
|
2
|
+
|
3
|
+
|
4
|
+
class FreeTextProcessID(BaseModel):
|
5
|
+
id: str
|
6
|
+
|
7
|
+
|
8
|
+
class FreeTextImportWorkerData(BaseModel):
|
9
|
+
data: str
|
10
|
+
|
11
|
+
|
12
|
+
class FreeTextImportWorkerUser(BaseModel):
|
13
|
+
user_id: int
|
14
|
+
|
15
|
+
|
16
|
+
class FreeTextImportWorkerBody(BaseModel):
|
17
|
+
user: FreeTextImportWorkerUser
|
18
|
+
data: FreeTextImportWorkerData
|
19
|
+
|
20
|
+
class Config:
|
21
|
+
orm_mode = True
|
22
|
+
|
23
|
+
|
24
|
+
class AddAttributeViaFreeTextImportEventResponse(BaseModel):
|
25
|
+
event_id: str
|
26
|
+
value: str
|
27
|
+
original_value: str
|
28
|
+
to_ids: str
|
29
|
+
type: str
|
30
|
+
category: str
|
31
|
+
distribution: str
|
32
|
+
|
33
|
+
class Config:
|
34
|
+
orm_mode = True
|
35
|
+
|
36
|
+
|
37
|
+
class AddAttributeViaFreeTextImportEventBody(BaseModel):
|
38
|
+
value: str
|
39
|
+
returnMetaAttributes: bool
|
40
|
+
|
41
|
+
class Config:
|
42
|
+
orm_mode = True
|
43
|
+
|
44
|
+
|
45
|
+
class AttributeType(BaseModel):
|
46
|
+
types: list[str]
|
47
|
+
default_type: str
|
48
|
+
value: str
|
49
|
+
|
50
|
+
|
51
|
+
class ProcessFreeTextResponse(BaseModel):
|
52
|
+
attributes: list[AttributeType]
|