|
2 | 2 | import os |
3 | 3 | import ssl |
4 | 4 | import urllib.request |
5 | | -from dataclasses import dataclass |
6 | 5 | from json import JSONDecodeError |
7 | | -from typing import Optional, Union |
| 6 | +from typing import Optional |
8 | 7 | from urllib.error import HTTPError |
9 | 8 |
|
| 9 | +from app.translator.core.models.query_container import MitreInfoContainer, MitreTacticContainer, MitreTechniqueContainer |
10 | 10 | from app.translator.tools.singleton_meta import SingletonMeta |
11 | 11 | from const import ROOT_PROJECT_PATH |
12 | 12 |
|
13 | 13 |
|
14 | | -@dataclass |
15 | | -class MitreTechniqueContainer: |
16 | | - technique_id: str |
17 | | - name: str |
18 | | - url: str |
19 | | - tactic: list[str] |
20 | | - |
21 | | - |
22 | | -@dataclass |
23 | | -class MitreTacticContainer: |
24 | | - external_id: str |
25 | | - url: str |
26 | | - name: str |
27 | | - |
28 | | - |
29 | | -@dataclass |
30 | | -class MitreInfoContainer: |
31 | | - tactics: Union[list[MitreTacticContainer], list] |
32 | | - techniques: Union[list[MitreTechniqueContainer], list] |
33 | | - |
34 | | - |
35 | 14 | class MitreConfig(metaclass=SingletonMeta): |
36 | 15 | config_url: str = "https://raw.githubusercontent.com/mitre/cti/master/enterprise-attack/enterprise-attack.json" |
37 | 16 | mitre_source_types: tuple = ("mitre-attack",) |
@@ -157,16 +136,13 @@ def get_technique(self, technique_id: str) -> Optional[MitreTechniqueContainer]: |
157 | 136 |
|
158 | 137 | def get_mitre_info( |
159 | 138 | self, tactics: Optional[list[str]] = None, techniques: Optional[list[str]] = None |
160 | | - ) -> Optional[MitreInfoContainer]: |
| 139 | + ) -> MitreInfoContainer: |
161 | 140 | tactics_list = [] |
162 | 141 | techniques_list = [] |
163 | | - if tactics: |
164 | | - for tactic in tactics: |
165 | | - if tactic_found := self.get_tactic(tactic=tactic.lower()): |
166 | | - tactics_list.append(tactic_found) |
167 | | - if techniques: |
168 | | - for technique in techniques: |
169 | | - if technique_found := self.get_technique(technique_id=technique.lower()): |
170 | | - techniques_list.append(technique_found) |
171 | | - if tactics_list or techniques_list: |
172 | | - return MitreInfoContainer(tactics=tactics_list, techniques=techniques_list) |
| 142 | + for tactic in tactics or []: |
| 143 | + if tactic_found := self.get_tactic(tactic=tactic.lower()): |
| 144 | + tactics_list.append(tactic_found) |
| 145 | + for technique in techniques or []: |
| 146 | + if technique_found := self.get_technique(technique_id=technique.lower()): |
| 147 | + techniques_list.append(technique_found) |
| 148 | + return MitreInfoContainer(tactics=tactics_list, techniques=techniques_list) |
0 commit comments