mmisp-lib 0.1.11__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/PKG-INFO +9 -1
  2. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/README.md +3 -0
  3. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/pyproject.toml +16 -1
  4. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/attributes.py +1 -1
  5. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/auth_keys.py +52 -3
  6. mmisp_lib-0.3.0/src/mmisp/api_schemas/authentication.py +89 -0
  7. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/events.py +53 -52
  8. mmisp_lib-0.3.0/src/mmisp/api_schemas/galaxy_clusters.py +64 -0
  9. mmisp_lib-0.3.0/src/mmisp/api_schemas/jobs.py +52 -0
  10. mmisp_lib-0.3.0/src/mmisp/api_schemas/logs.py +9 -0
  11. mmisp_lib-0.3.0/src/mmisp/api_schemas/organisations.py +126 -0
  12. mmisp_lib-0.3.0/src/mmisp/api_schemas/responses/check_graph_response.py +172 -0
  13. {mmisp_lib-0.1.11/src/mmisp/api_schemas → mmisp_lib-0.3.0/src/mmisp/api_schemas/responses}/standard_status_response.py +6 -3
  14. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/roles.py +80 -0
  15. mmisp_lib-0.3.0/src/mmisp/api_schemas/servers.py +79 -0
  16. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/sharing_groups.py +1 -1
  17. mmisp_lib-0.3.0/src/mmisp/api_schemas/statistics.py +19 -0
  18. mmisp_lib-0.3.0/src/mmisp/api_schemas/users.py +182 -0
  19. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/warninglists.py +1 -1
  20. mmisp_lib-0.3.0/src/mmisp/api_schemas/workflows.py +30 -0
  21. mmisp_lib-0.3.0/src/mmisp/commandline_tool/main.py +179 -0
  22. mmisp_lib-0.3.0/src/mmisp/commandline_tool/organisation.py +157 -0
  23. mmisp_lib-0.3.0/src/mmisp/commandline_tool/setup.py +101 -0
  24. mmisp_lib-0.3.0/src/mmisp/commandline_tool/user.py +126 -0
  25. mmisp_lib-0.3.0/src/mmisp/db/config.py +23 -0
  26. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/database.py +30 -11
  27. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/mixins.py +2 -2
  28. mmisp_lib-0.3.0/src/mmisp/db/models/admin_setting.py +17 -0
  29. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/attribute.py +4 -4
  30. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/auth_key.py +1 -1
  31. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/event.py +2 -2
  32. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/galaxy.py +1 -1
  33. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/galaxy_cluster.py +1 -1
  34. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/identity_provider.py +1 -1
  35. mmisp_lib-0.3.0/src/mmisp/db/models/log.py +33 -0
  36. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/object.py +1 -1
  37. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/organisation.py +1 -2
  38. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/role.py +1 -1
  39. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/sharing_group.py +1 -1
  40. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/sighting.py +1 -1
  41. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/user_setting.py +2 -0
  42. mmisp_lib-0.3.0/src/mmisp/db/models/workflow.py +38 -0
  43. mmisp_lib-0.3.0/src/mmisp/db/models/workflow_blueprint.py +28 -0
  44. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/mypy.py +1 -1
  45. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/print_changes.py +1 -2
  46. mmisp_lib-0.3.0/src/mmisp/db/py.typed +0 -0
  47. mmisp_lib-0.3.0/src/mmisp/lib/__init__.py +0 -0
  48. mmisp_lib-0.3.0/src/mmisp/lib/actions.py +11 -0
  49. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/lib/attributes.py +1 -1
  50. mmisp_lib-0.3.0/src/mmisp/lib/logging.py +58 -0
  51. mmisp_lib-0.3.0/src/mmisp/lib/py.typed +0 -0
  52. mmisp_lib-0.3.0/src/mmisp/lib/uuid.py +10 -0
  53. mmisp_lib-0.3.0/src/mmisp/plugins/py.typed +0 -0
  54. mmisp_lib-0.3.0/src/mmisp/util/__init__.py +0 -0
  55. mmisp_lib-0.3.0/src/mmisp/util/crypto.py +11 -0
  56. mmisp_lib-0.3.0/src/mmisp/util/models.py +14 -0
  57. mmisp_lib-0.3.0/src/mmisp/util/partial.py +76 -0
  58. mmisp_lib-0.3.0/src/mmisp/util/py.typed +0 -0
  59. mmisp_lib-0.3.0/src/mmisp/util/uuid.py +10 -0
  60. mmisp_lib-0.3.0/src/mmisp/workflows/__init__.py +0 -0
  61. mmisp_lib-0.3.0/src/mmisp/workflows/execution.py +238 -0
  62. mmisp_lib-0.3.0/src/mmisp/workflows/fastapi.py +162 -0
  63. mmisp_lib-0.3.0/src/mmisp/workflows/graph.py +803 -0
  64. mmisp_lib-0.3.0/src/mmisp/workflows/input.py +463 -0
  65. mmisp_lib-0.3.0/src/mmisp/workflows/legacy.py +596 -0
  66. mmisp_lib-0.3.0/src/mmisp/workflows/misp_core_format.py +163 -0
  67. mmisp_lib-0.3.0/src/mmisp/workflows/modules.py +1359 -0
  68. mmisp_lib-0.3.0/src/mmisp/workflows/py.typed +0 -0
  69. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp_lib.egg-info/PKG-INFO +9 -1
  70. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp_lib.egg-info/SOURCES.txt +39 -2
  71. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp_lib.egg-info/requires.txt +5 -0
  72. mmisp_lib-0.3.0/tests/test_commandline_tool.py +255 -0
  73. mmisp_lib-0.1.11/src/mmisp/api_schemas/authentication.py +0 -38
  74. mmisp_lib-0.1.11/src/mmisp/api_schemas/organisations.py +0 -24
  75. mmisp_lib-0.1.11/src/mmisp/api_schemas/users.py +0 -52
  76. mmisp_lib-0.1.11/src/mmisp/db/config.py +0 -16
  77. mmisp_lib-0.1.11/tests/test_dummy.py +0 -2
  78. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/LICENSE +0 -0
  79. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/setup.cfg +0 -0
  80. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/__init__.py +0 -0
  81. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/common.py +0 -0
  82. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/feeds.py +0 -0
  83. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/galaxies.py +0 -0
  84. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/noticelists.py +0 -0
  85. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/objects.py +0 -0
  86. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/py.typed +0 -0
  87. {mmisp_lib-0.1.11/src/mmisp/db → mmisp_lib-0.3.0/src/mmisp/api_schemas/responses}/__init__.py +0 -0
  88. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/sightings.py +0 -0
  89. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/tags.py +0 -0
  90. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/taxonomies.py +0 -0
  91. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/api_schemas/user_settings.py +0 -0
  92. {mmisp_lib-0.1.11/src/mmisp/db/models → mmisp_lib-0.3.0/src/mmisp/commandline_tool}/__init__.py +0 -0
  93. {mmisp_lib-0.1.11/src/mmisp/db → mmisp_lib-0.3.0/src/mmisp/commandline_tool}/py.typed +0 -0
  94. {mmisp_lib-0.1.11/src/mmisp/lib → mmisp_lib-0.3.0/src/mmisp/db}/__init__.py +0 -0
  95. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/all_models.py +0 -0
  96. /mmisp_lib-0.1.11/src/mmisp/lib/py.typed → /mmisp_lib-0.3.0/src/mmisp/db/models/__init__.py +0 -0
  97. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/feed.py +0 -0
  98. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/noticelist.py +0 -0
  99. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/server.py +0 -0
  100. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/tag.py +0 -0
  101. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/taxonomy.py +0 -0
  102. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/user.py +0 -0
  103. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/db/models/warninglist.py +0 -0
  104. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp/lib/permissions.py +0 -0
  105. {mmisp_lib-0.1.11 → mmisp_lib-0.3.0}/src/mmisp_lib.egg-info/dependency_links.txt +0 -0
  106. {mmisp_lib-0.1.11 → mmisp_lib-0.3.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.1.11
3
+ Version: 0.3.0
4
4
  Requires-Python: >=3.11.0
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -19,15 +19,20 @@ Requires-Dist: argon2-cffi==23.1.0
19
19
  Requires-Dist: bcrypt==4.1.2
20
20
  Requires-Dist: nanoid==2.0.0
21
21
  Requires-Dist: cryptography==42.0.5
22
+ Requires-Dist: jinja2~=3.1.4
23
+ Requires-Dist: fire
22
24
  Provides-Extra: dev
23
25
  Requires-Dist: ruff>=0.3.7; extra == "dev"
24
26
  Requires-Dist: mypy==1.8.0; extra == "dev"
25
27
  Requires-Dist: pre-commit==3.6.0; extra == "dev"
26
28
  Requires-Dist: pytest==8.0.0; extra == "dev"
29
+ Requires-Dist: pytest-test-groups; extra == "dev"
27
30
  Requires-Dist: pytest-asyncio==0.23.5.post1; extra == "dev"
28
31
  Requires-Dist: pytest-cov==4.1.0; extra == "dev"
29
32
  Requires-Dist: respx==0.20.2; extra == "dev"
30
33
  Requires-Dist: mysql-connector-python==8.3.0; extra == "dev"
34
+ Requires-Dist: icecream; extra == "dev"
35
+ Requires-Dist: asyncio; extra == "dev"
31
36
 
32
37
  # Modern MISP - API
33
38
 
@@ -45,6 +50,9 @@ Create a file called `.env` and copy the contents of `.env.example` into it. Fin
45
50
 
46
51
  You should now be able to access the api on `localhost:4000`.
47
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
+
48
56
  Run tests using `make test` (local database container required running) or `make test/lite`.
49
57
 
50
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.1.11"
3
+ version = "0.3.0"
4
4
  description = ""
5
5
  authors = []
6
6
  readme = "README.md"
@@ -23,6 +23,8 @@ dependencies = [
23
23
  "bcrypt==4.1.2",
24
24
  "nanoid==2.0.0",
25
25
  "cryptography==42.0.5",
26
+ "jinja2~=3.1.4",
27
+ "fire",
26
28
  ]
27
29
 
28
30
 
@@ -32,26 +34,39 @@ dev = [
32
34
  "mypy==1.8.0",
33
35
  "pre-commit==3.6.0",
34
36
  "pytest==8.0.0",
37
+ "pytest-test-groups",
35
38
  "pytest-asyncio==0.23.5.post1",
36
39
  "pytest-cov==4.1.0",
37
40
  "respx==0.20.2",
38
41
  "mysql-connector-python==8.3.0",
42
+ "icecream",
43
+ "asyncio",
39
44
  ]
40
45
 
41
46
  [tool.setuptools.package-data]
42
47
  "mmisp.lib" = ["py.typed"]
43
48
  "mmisp.api_schemas" = ["py.typed"]
44
49
  "mmisp.db" = ["py.typed"]
50
+ "mmisp.plugins" = ["py.typed"]
51
+ "mmisp.util" = ["py.typed"]
45
52
 
46
53
  [tool.ruff]
47
54
  fix = true
48
55
  line-length = 120
49
56
  required-version = ">=0.3.7"
50
57
  src = ["src"]
58
+ unsafe-fixes = true
51
59
 
52
60
  [tool.ruff.lint]
53
61
  select = ["E", "F", "W", "I", "ICN", "ANN"]
54
62
  ignore = ["ANN002", "ANN003", "ANN401"]
55
63
 
64
+ [tool.ruff.lint.per-file-ignores]
65
+ "tests/**" = ["ANN001", "ANN201", "ANN202", "S101"]
66
+
56
67
  [tool.coverage.run]
57
68
  concurrency = ["greenlet", "thread"]
69
+ include = [
70
+ "/usr/local/lib/python3.11/site-packages/mmisp/*",
71
+ "/home/mmisp/.local/lib/python3.11/site-packages/mmisp/*"
72
+ ]
@@ -384,7 +384,7 @@ class AddAttributeResponse(BaseModel):
384
384
 
385
385
 
386
386
  class AddAttributeBody(BaseModel):
387
- type: literal_valid_attribute_types
387
+ type: literal_valid_attribute_types # type:ignore[valid-type]
388
388
  value: str | None = None
389
389
  value1: str | None = None
390
390
  value2: str | None = None
@@ -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: list[str] | None = None
95
- expiration: int | None = None
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] = []
@@ -23,6 +23,46 @@ class AddEditGetEventGalaxyClusterMeta(BaseModel):
23
23
  kill_chain: str | None = None
24
24
 
25
25
 
26
+ class FreeTextImportWorkerData(BaseModel):
27
+ data: str
28
+
29
+
30
+ class FreeTextImportWorkerUser(BaseModel):
31
+ user_id: int
32
+
33
+
34
+ class FreeTextImportWorkerBody(BaseModel):
35
+ user: FreeTextImportWorkerUser
36
+ data: FreeTextImportWorkerData
37
+
38
+ class Config:
39
+ orm_mode = True
40
+
41
+
42
+ class AddAttributeViaFreeTextImportEventResponse(BaseModel):
43
+ comment: str | None = None
44
+ value: str
45
+ original_value: str
46
+ to_ids: str
47
+ type: str
48
+ category: str
49
+ distribution: str
50
+
51
+ class Config:
52
+ orm_mode = True
53
+
54
+
55
+ class AddAttributeViaFreeTextImportEventAttributes(BaseModel):
56
+ value: str
57
+
58
+
59
+ class AddAttributeViaFreeTextImportEventBody(BaseModel):
60
+ Attribute: AddAttributeViaFreeTextImportEventAttributes
61
+
62
+ class Config:
63
+ orm_mode = True
64
+
65
+
26
66
  class GetAllEventsGalaxyCluster(BaseModel):
27
67
  id: str
28
68
  uuid: str
@@ -130,7 +170,7 @@ class AddEditGetEventGalaxy(BaseModel):
130
170
  class AddEditGetEventOrg(BaseModel):
131
171
  id: str
132
172
  name: str
133
- uuid: str
173
+ uuid: str | None = None
134
174
  local: bool | None = None
135
175
 
136
176
 
@@ -254,7 +294,7 @@ class AddEditGetEventResponse(BaseModel):
254
294
  class GetAllEventsOrg(BaseModel):
255
295
  id: str
256
296
  name: str
257
- uuid: str
297
+ uuid: str | None = None
258
298
 
259
299
 
260
300
  class UnpublishEventResponse(BaseModel):
@@ -330,11 +370,19 @@ class PublishEventResponse(BaseModel):
330
370
  orm_mode = True
331
371
 
332
372
 
373
+ class GetAllEventsEventTagTag(BaseModel):
374
+ id: str
375
+ name: str
376
+ colour: str
377
+ is_galaxy: bool
378
+
379
+
333
380
  class IndexEventsEventTag(BaseModel):
334
381
  id: str
335
382
  event_id: str
336
383
  tag_id: str
337
384
  local: bool
385
+ Tag: GetAllEventsEventTagTag
338
386
 
339
387
 
340
388
  class IndexEventsAttributes(BaseModel):
@@ -403,20 +451,13 @@ class ObjectEventResponse(BaseModel):
403
451
  orgc_id: str | None = None
404
452
 
405
453
 
406
- class GetAllEventsEventTagTag(BaseModel):
407
- id: str
408
- name: str
409
- colour: str
410
- is_galaxy: bool
411
-
412
-
413
454
  class GetAllEventsEventTag(BaseModel):
414
455
  id: str
415
456
  event_id: str
416
457
  tag_id: str
417
458
  local: bool
418
- relationship_type: str
419
- Tag: GetAllEventsEventTagTag
459
+ relationship_type: str | None = None
460
+ Tag: GetAllEventsEventTagTag | None = None
420
461
 
421
462
 
422
463
  class GetAllEventsResponse(BaseModel):
@@ -439,7 +480,7 @@ class GetAllEventsResponse(BaseModel):
439
480
  sighting_timestamp: str
440
481
  disable_correlation: bool
441
482
  extends_uuid: str
442
- event_creator_email: str # omitted
483
+ event_creator_email: str | None = None # omitted
443
484
  protected: str | None = None
444
485
  Org: GetAllEventsOrg
445
486
  Orgc: GetAllEventsOrg
@@ -450,22 +491,6 @@ class GetAllEventsResponse(BaseModel):
450
491
  orm_mode = True
451
492
 
452
493
 
453
- class FreeTextImportWorkerData(BaseModel):
454
- data: str
455
-
456
-
457
- class FreeTextImportWorkerUser(BaseModel):
458
- user_id: int
459
-
460
-
461
- class FreeTextImportWorkerBody(BaseModel):
462
- user: FreeTextImportWorkerUser
463
- data: FreeTextImportWorkerData
464
-
465
- class Config:
466
- orm_mode = True
467
-
468
-
469
494
  class EditEventBody(BaseModel):
470
495
  info: str | None = None
471
496
  org_id: str | None = None
@@ -545,30 +570,6 @@ class AddEventTag(BaseModel):
545
570
  name: str
546
571
 
547
572
 
548
- class AddAttributeViaFreeTextImportEventResponse(BaseModel):
549
- comment: str | None = None
550
- value: str
551
- original_value: str
552
- to_ids: str
553
- type: str
554
- category: str
555
- distribution: str
556
-
557
- class Config:
558
- orm_mode = True
559
-
560
-
561
- class AddAttributeViaFreeTextImportEventAttributes(BaseModel):
562
- value: str
563
-
564
-
565
- class AddAttributeViaFreeTextImportEventBody(BaseModel):
566
- Attribute: AddAttributeViaFreeTextImportEventAttributes
567
-
568
- class Config:
569
- orm_mode = True
570
-
571
-
572
573
  class AddEditGetEventRelatedEventAttributesOrg(BaseModel):
573
574
  id: str
574
575
  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]
@@ -0,0 +1,9 @@
1
+ from pydantic import BaseModel
2
+
3
+
4
+ class LogsRequest(BaseModel):
5
+ model: str | None = None
6
+ action: str | None = None
7
+ model_id: int | None = None
8
+ page: int = 1
9
+ limit: int = 50