fluidattacks_core_models 14.1.0__tar.gz → 14.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.
- fluidattacks_core_models-14.3.0/.envrc +1 -0
- fluidattacks_core_models-14.3.0/.gitignore +11 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/PKG-INFO +1 -1
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/scanners/__init__.py +4 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/scanners/cspm_config.py +14 -4
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/scanners/loader.py +4 -1
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/scanners/scan_config.py +2 -0
- fluidattacks_core_models-14.3.0/fluidattacks_core/models/scanners/sspm_config.py +34 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/pyproject.toml +1 -1
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/tests/test_loader_env.py +74 -2
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/tests/test_model_scanner.py +18 -0
- fluidattacks_core_models-14.1.0/.envrc +0 -1
- fluidattacks_core_models-14.1.0/.gitignore +0 -9
- fluidattacks_core_models-14.1.0/build/default.nix +0 -19
- fluidattacks_core_models-14.1.0/build/filter.nix +0 -13
- fluidattacks_core_models-14.1.0/flake.lock +0 -303
- fluidattacks_core_models-14.1.0/flake.nix +0 -29
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/__init__.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/py.typed +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/scanners/apk_config.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/scanners/common_config.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/scanners/containers_sca_config.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/scanners/dast_config.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/scanners/resolves_config.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/scanners/sast_config.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/scanners/sbom_config.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/scanners/sca_config.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/scanners/sniffs_config.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/state_machines/__init__.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/state_machines/component_orchestrator.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/state_machines/root_scanner.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/fluidattacks_core/models/state_machines/types.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/import-linter.cfg +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/mypy.ini +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/ruff.toml +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/tests/__init__.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/tests/test_component_orchestrator.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/tests/test_root_scanner.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/tests/test_state_machines.py +0 -0
- {fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/uv.lock +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
use flake ../../..#fluidattacks-core-models
|
|
@@ -33,6 +33,7 @@ from fluidattacks_core.models.scanners.sbom_config import (
|
|
|
33
33
|
from fluidattacks_core.models.scanners.sca_config import ScaConfig
|
|
34
34
|
from fluidattacks_core.models.scanners.scan_config import ScanConfig
|
|
35
35
|
from fluidattacks_core.models.scanners.sniffs_config import SniffsConfig
|
|
36
|
+
from fluidattacks_core.models.scanners.sspm_config import GithubApp, GithubPat, SspmConfig
|
|
36
37
|
|
|
37
38
|
__all__ = [
|
|
38
39
|
"ApkConfig",
|
|
@@ -50,6 +51,8 @@ __all__ = [
|
|
|
50
51
|
"DockerCredentialsConfig",
|
|
51
52
|
"EcrCredentialsConfig",
|
|
52
53
|
"FalsePositivesConfig",
|
|
54
|
+
"GithubApp",
|
|
55
|
+
"GithubPat",
|
|
53
56
|
"LocalesEnum",
|
|
54
57
|
"OutputConfig",
|
|
55
58
|
"OutputFormat",
|
|
@@ -64,6 +67,7 @@ __all__ = [
|
|
|
64
67
|
"ScanConfig",
|
|
65
68
|
"SniffsConfig",
|
|
66
69
|
"SourceType",
|
|
70
|
+
"SspmConfig",
|
|
67
71
|
"build_config",
|
|
68
72
|
"load_yaml_mapping",
|
|
69
73
|
]
|
|
@@ -6,15 +6,20 @@ from fluidattacks_core.models.scanners.loader import LoaderValidationInfo, resol
|
|
|
6
6
|
class AwsCredentials(BaseModel):
|
|
7
7
|
model_config = {"extra": "forbid"}
|
|
8
8
|
access_key_id: str
|
|
9
|
-
secret_access_key: str
|
|
10
|
-
session_token: str | None = None
|
|
9
|
+
secret_access_key: str = Field(repr=False)
|
|
10
|
+
session_token: str | None = Field(default=None, repr=False)
|
|
11
11
|
environment_id: str | None = None
|
|
12
12
|
|
|
13
|
-
@field_validator("access_key_id", "secret_access_key",
|
|
13
|
+
@field_validator("access_key_id", "secret_access_key", mode="before")
|
|
14
14
|
@classmethod
|
|
15
15
|
def _resolve_credentials(cls, v: object, info: LoaderValidationInfo) -> object:
|
|
16
16
|
return resolve_env_var(v, info)
|
|
17
17
|
|
|
18
|
+
@field_validator("session_token", mode="before")
|
|
19
|
+
@classmethod
|
|
20
|
+
def _resolve_optional_credentials(cls, v: object, info: LoaderValidationInfo) -> object:
|
|
21
|
+
return resolve_env_var(v, info, required=False)
|
|
22
|
+
|
|
18
23
|
@model_validator(mode="after")
|
|
19
24
|
def _validate_key_session_token_pairing(self) -> "AwsCredentials":
|
|
20
25
|
is_temporary = self.access_key_id.startswith("ASIA")
|
|
@@ -33,11 +38,16 @@ class AwsRole(BaseModel):
|
|
|
33
38
|
external_id: str | None = Field(default=None, repr=False)
|
|
34
39
|
environment_id: str | None = None
|
|
35
40
|
|
|
36
|
-
@field_validator("role",
|
|
41
|
+
@field_validator("role", mode="before")
|
|
37
42
|
@classmethod
|
|
38
43
|
def _resolve_credentials(cls, v: object, info: LoaderValidationInfo) -> object:
|
|
39
44
|
return resolve_env_var(v, info)
|
|
40
45
|
|
|
46
|
+
@field_validator("external_id", mode="before")
|
|
47
|
+
@classmethod
|
|
48
|
+
def _resolve_optional_credentials(cls, v: object, info: LoaderValidationInfo) -> object:
|
|
49
|
+
return resolve_env_var(v, info, required=False)
|
|
50
|
+
|
|
41
51
|
|
|
42
52
|
class CspmConfig(BaseModel):
|
|
43
53
|
model_config = {"extra": "forbid"}
|
|
@@ -28,7 +28,7 @@ def _sub_env_var(m: re.Match[str]) -> str:
|
|
|
28
28
|
return value
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
def resolve_env_var(v: object, info: LoaderValidationInfo) -> object:
|
|
31
|
+
def resolve_env_var(v: object, info: LoaderValidationInfo, *, required: bool = True) -> object:
|
|
32
32
|
if not isinstance(v, str) or not (info.context or {}).get("resolve_env"):
|
|
33
33
|
return v
|
|
34
34
|
matches = list(_ENV_PLACEHOLDER.finditer(v))
|
|
@@ -39,6 +39,9 @@ def resolve_env_var(v: object, info: LoaderValidationInfo) -> object:
|
|
|
39
39
|
var_name = matches[0].group(1)
|
|
40
40
|
value = os.environ.get(var_name)
|
|
41
41
|
if value is None:
|
|
42
|
+
if required:
|
|
43
|
+
msg = f"environment variable '{var_name}' referenced in the scan config is not set"
|
|
44
|
+
raise ValueError(msg)
|
|
42
45
|
LOGGER.warning("env var '%s' not set; field will be None", var_name)
|
|
43
46
|
return None
|
|
44
47
|
LOGGER.info("env var '%s' set", var_name)
|
|
@@ -14,6 +14,7 @@ from fluidattacks_core.models.scanners.sast_config import SastConfig
|
|
|
14
14
|
from fluidattacks_core.models.scanners.sbom_config import SbomConfig
|
|
15
15
|
from fluidattacks_core.models.scanners.sca_config import ScaConfig
|
|
16
16
|
from fluidattacks_core.models.scanners.sniffs_config import SniffsConfig
|
|
17
|
+
from fluidattacks_core.models.scanners.sspm_config import SspmConfig
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
class ScanConfig(BaseModel):
|
|
@@ -35,6 +36,7 @@ class ScanConfig(BaseModel):
|
|
|
35
36
|
sbom: SbomConfig | None = None
|
|
36
37
|
dast: DastConfig | None = None
|
|
37
38
|
cspm: CspmConfig | None = None
|
|
39
|
+
sspm: SspmConfig | None = None
|
|
38
40
|
apk: ApkConfig | None = None
|
|
39
41
|
false_positives_identified: FalsePositivesConfig | None = None
|
|
40
42
|
ss: SniffsConfig | None = None
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
from pydantic import BaseModel, Field, field_validator
|
|
2
|
+
|
|
3
|
+
from fluidattacks_core.models.scanners.loader import LoaderValidationInfo, resolve_env_var
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class GithubPat(BaseModel):
|
|
7
|
+
model_config = {"extra": "forbid"}
|
|
8
|
+
organization: str
|
|
9
|
+
pat_token: str = Field(repr=False)
|
|
10
|
+
environment_id: str | None = None
|
|
11
|
+
|
|
12
|
+
@field_validator("pat_token", mode="before")
|
|
13
|
+
@classmethod
|
|
14
|
+
def _resolve_credentials(cls, v: object, info: LoaderValidationInfo) -> object:
|
|
15
|
+
return resolve_env_var(v, info)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class GithubApp(BaseModel):
|
|
19
|
+
model_config = {"extra": "forbid"}
|
|
20
|
+
organization: str
|
|
21
|
+
app_id: str
|
|
22
|
+
installation_id: str
|
|
23
|
+
private_key: str = Field(repr=False)
|
|
24
|
+
environment_id: str | None = None
|
|
25
|
+
|
|
26
|
+
@field_validator("private_key", mode="before")
|
|
27
|
+
@classmethod
|
|
28
|
+
def _resolve_credentials(cls, v: object, info: LoaderValidationInfo) -> object:
|
|
29
|
+
return resolve_env_var(v, info)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class SspmConfig(BaseModel):
|
|
33
|
+
model_config = {"extra": "forbid"}
|
|
34
|
+
github_credentials: list[GithubPat | GithubApp] = []
|
{fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/tests/test_loader_env.py
RENAMED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
|
|
3
3
|
import pytest
|
|
4
|
-
from pydantic import BaseModel, field_validator
|
|
4
|
+
from pydantic import BaseModel, ValidationError, field_validator
|
|
5
5
|
|
|
6
|
+
from fluidattacks_core.models.scanners import AwsCredentials, AwsRole, CspmConfig
|
|
6
7
|
from fluidattacks_core.models.scanners.loader import (
|
|
7
8
|
LoaderValidationInfo,
|
|
8
9
|
build_config,
|
|
@@ -22,6 +23,16 @@ class _SecretFixture(BaseModel):
|
|
|
22
23
|
value: str | None = None
|
|
23
24
|
namespace: str = ""
|
|
24
25
|
|
|
26
|
+
@field_validator("value", mode="before")
|
|
27
|
+
@classmethod
|
|
28
|
+
def _resolve_value(cls, v: object, info: LoaderValidationInfo) -> object:
|
|
29
|
+
return resolve_env_var(v, info, required=False)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class _RequiredSecretFixture(BaseModel):
|
|
33
|
+
model_config = {"extra": "forbid"}
|
|
34
|
+
value: str
|
|
35
|
+
|
|
25
36
|
@field_validator("value", mode="before")
|
|
26
37
|
@classmethod
|
|
27
38
|
def _resolve_value(cls, v: object, info: LoaderValidationInfo) -> object:
|
|
@@ -45,7 +56,7 @@ def test_build_config_resolves_sensitive_field(
|
|
|
45
56
|
assert cfg.value == "resolved-value"
|
|
46
57
|
|
|
47
58
|
|
|
48
|
-
def
|
|
59
|
+
def test_build_config_missing_var_on_optional_field_resolves_to_none(
|
|
49
60
|
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
50
61
|
) -> None:
|
|
51
62
|
monkeypatch.delenv("TOKEN", raising=False)
|
|
@@ -54,6 +65,58 @@ def test_build_config_missing_var_resolves_to_none(
|
|
|
54
65
|
assert cfg.value is None
|
|
55
66
|
|
|
56
67
|
|
|
68
|
+
def test_build_config_set_var_on_required_field_resolves(
|
|
69
|
+
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
70
|
+
) -> None:
|
|
71
|
+
monkeypatch.setenv("TOKEN", "resolved-value")
|
|
72
|
+
path = _write(tmp_path, "value: ${TOKEN}\n")
|
|
73
|
+
cfg = build_config(path, _RequiredSecretFixture)
|
|
74
|
+
assert cfg.value == "resolved-value"
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def test_build_config_missing_var_on_required_field_names_the_variable(
|
|
78
|
+
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
79
|
+
) -> None:
|
|
80
|
+
monkeypatch.delenv("TOKEN", raising=False)
|
|
81
|
+
path = _write(tmp_path, "value: ${TOKEN}\n")
|
|
82
|
+
with pytest.raises(ValidationError) as exc_info:
|
|
83
|
+
build_config(path, _RequiredSecretFixture)
|
|
84
|
+
assert "environment variable 'TOKEN' referenced in the scan config is not set" in str(
|
|
85
|
+
exc_info.value
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def test_build_config_missing_var_on_cspm_external_id_resolves_to_none(
|
|
90
|
+
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
91
|
+
) -> None:
|
|
92
|
+
monkeypatch.delenv("CSPM_AWS_EXTERNAL_ID", raising=False)
|
|
93
|
+
path = _write(
|
|
94
|
+
tmp_path,
|
|
95
|
+
"aws_credentials:\n"
|
|
96
|
+
" - role: arn:aws:iam::123456789012:role/MyRole\n"
|
|
97
|
+
" external_id: ${CSPM_AWS_EXTERNAL_ID}\n",
|
|
98
|
+
)
|
|
99
|
+
role = build_config(path, CspmConfig).aws_credentials[0]
|
|
100
|
+
assert isinstance(role, AwsRole)
|
|
101
|
+
assert role.external_id is None
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
def test_build_config_missing_var_on_cspm_session_token_resolves_to_none(
|
|
105
|
+
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
106
|
+
) -> None:
|
|
107
|
+
monkeypatch.delenv("CSPM_AWS_SESSION_TOKEN", raising=False)
|
|
108
|
+
path = _write(
|
|
109
|
+
tmp_path,
|
|
110
|
+
"aws_credentials:\n"
|
|
111
|
+
" - access_key_id: AKIA-fake-key\n"
|
|
112
|
+
" secret_access_key: secret\n"
|
|
113
|
+
" session_token: ${CSPM_AWS_SESSION_TOKEN}\n",
|
|
114
|
+
)
|
|
115
|
+
cred = build_config(path, CspmConfig).aws_credentials[0]
|
|
116
|
+
assert isinstance(cred, AwsCredentials)
|
|
117
|
+
assert cred.session_token is None
|
|
118
|
+
|
|
119
|
+
|
|
57
120
|
def test_build_config_non_sensitive_field_stays_literal(
|
|
58
121
|
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
59
122
|
) -> None:
|
|
@@ -87,6 +150,15 @@ def test_partial_missing_var_substitutes_empty_string(
|
|
|
87
150
|
assert cfg.value == "https:///api"
|
|
88
151
|
|
|
89
152
|
|
|
153
|
+
def test_partial_missing_var_on_required_field_substitutes_empty_string(
|
|
154
|
+
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
|
|
155
|
+
) -> None:
|
|
156
|
+
monkeypatch.delenv("HOST", raising=False)
|
|
157
|
+
path = _write(tmp_path, "value: https://${HOST}/api\n")
|
|
158
|
+
cfg = build_config(path, _RequiredSecretFixture)
|
|
159
|
+
assert cfg.value == "https:///api"
|
|
160
|
+
|
|
161
|
+
|
|
90
162
|
def test_multi_var_resolved(tmp_path: Path, monkeypatch: pytest.MonkeyPatch) -> None:
|
|
91
163
|
monkeypatch.setenv("A", "foo")
|
|
92
164
|
monkeypatch.setenv("B", "bar")
|
{fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/tests/test_model_scanner.py
RENAMED
|
@@ -99,6 +99,11 @@ cspm:
|
|
|
99
99
|
- role: arn:aws:iam::123456789012:role/ScanRole
|
|
100
100
|
external_id: ext-123
|
|
101
101
|
environment_id: prod
|
|
102
|
+
sspm:
|
|
103
|
+
github_credentials:
|
|
104
|
+
- organization: octo-org
|
|
105
|
+
pat_token: ghp-token
|
|
106
|
+
environment_id: scm
|
|
102
107
|
apk:
|
|
103
108
|
environments:
|
|
104
109
|
- apk_file_path: app.apk
|
|
@@ -230,6 +235,19 @@ def test_build_config_cspm(yaml_file: Path) -> None:
|
|
|
230
235
|
assert role.environment_id == "prod"
|
|
231
236
|
|
|
232
237
|
|
|
238
|
+
def test_build_config_sspm(yaml_file: Path) -> None:
|
|
239
|
+
config = build_config(str(yaml_file), ScanConfig)
|
|
240
|
+
assert config.sspm is not None
|
|
241
|
+
assert config.sspm.github_credentials[0].organization == "octo-org"
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
def test_unknown_nested_key_sspm(tmp_path: Path) -> None:
|
|
245
|
+
f = tmp_path / "config.yaml"
|
|
246
|
+
f.write_text("sspm:\n github_credentals: []\n")
|
|
247
|
+
with pytest.raises(ValidationError):
|
|
248
|
+
build_config(str(f), ScanConfig)
|
|
249
|
+
|
|
250
|
+
|
|
233
251
|
def test_build_config_apk(yaml_file: Path) -> None:
|
|
234
252
|
config = build_config(str(yaml_file), ScanConfig)
|
|
235
253
|
assert config.apk is not None
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
use_flake ".#python311.devShell"
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{ src, workspace_root }:
|
|
2
|
-
{
|
|
3
|
-
inherit src workspace_root;
|
|
4
|
-
root_path = "develops/fluidattacks-core/python/models";
|
|
5
|
-
module_name = "fluidattacks_core";
|
|
6
|
-
pypi_token = {
|
|
7
|
-
method = "oidc";
|
|
8
|
-
};
|
|
9
|
-
override = {
|
|
10
|
-
checks = {
|
|
11
|
-
basedpyright = false;
|
|
12
|
-
};
|
|
13
|
-
configs = {
|
|
14
|
-
import_linter = ../import-linter.cfg;
|
|
15
|
-
mypy = ../mypy.ini;
|
|
16
|
-
ruff = ../ruff.toml;
|
|
17
|
-
};
|
|
18
|
-
};
|
|
19
|
-
}
|
|
@@ -1,303 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"nodes": {
|
|
3
|
-
"flake-parts": {
|
|
4
|
-
"inputs": {
|
|
5
|
-
"nixpkgs-lib": "nixpkgs-lib"
|
|
6
|
-
},
|
|
7
|
-
"locked": {
|
|
8
|
-
"lastModified": 1762810396,
|
|
9
|
-
"narHash": "sha256-dxFVgQPG+R72dkhXTtqUm7KpxElw3u6E+YlQ2WaDgt8=",
|
|
10
|
-
"owner": "hercules-ci",
|
|
11
|
-
"repo": "flake-parts",
|
|
12
|
-
"rev": "0bdadb1b265fb4143a75bd1ec7d8c915898a9923",
|
|
13
|
-
"type": "github"
|
|
14
|
-
},
|
|
15
|
-
"original": {
|
|
16
|
-
"owner": "hercules-ci",
|
|
17
|
-
"repo": "flake-parts",
|
|
18
|
-
"type": "github"
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
"nix_filter": {
|
|
22
|
-
"locked": {
|
|
23
|
-
"lastModified": 1757882181,
|
|
24
|
-
"narHash": "sha256-+cCxYIh2UNalTz364p+QYmWHs0P+6wDhiWR4jDIKQIU=",
|
|
25
|
-
"owner": "numtide",
|
|
26
|
-
"repo": "nix-filter",
|
|
27
|
-
"rev": "59c44d1909c72441144b93cf0f054be7fe764de5",
|
|
28
|
-
"type": "github"
|
|
29
|
-
},
|
|
30
|
-
"original": {
|
|
31
|
-
"owner": "numtide",
|
|
32
|
-
"repo": "nix-filter",
|
|
33
|
-
"type": "github"
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
|
-
"nixpkgs": {
|
|
37
|
-
"locked": {
|
|
38
|
-
"lastModified": 1758690382,
|
|
39
|
-
"narHash": "sha256-NY3kSorgqE5LMm1LqNwGne3ZLMF2/ILgLpFr1fS4X3o=",
|
|
40
|
-
"owner": "nixos",
|
|
41
|
-
"repo": "nixpkgs",
|
|
42
|
-
"rev": "e643668fd71b949c53f8626614b21ff71a07379d",
|
|
43
|
-
"type": "github"
|
|
44
|
-
},
|
|
45
|
-
"original": {
|
|
46
|
-
"owner": "nixos",
|
|
47
|
-
"ref": "nixos-unstable",
|
|
48
|
-
"repo": "nixpkgs",
|
|
49
|
-
"type": "github"
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
"nixpkgs-lib": {
|
|
53
|
-
"locked": {
|
|
54
|
-
"lastModified": 1761765539,
|
|
55
|
-
"narHash": "sha256-b0yj6kfvO8ApcSE+QmA6mUfu8IYG6/uU28OFn4PaC8M=",
|
|
56
|
-
"owner": "nix-community",
|
|
57
|
-
"repo": "nixpkgs.lib",
|
|
58
|
-
"rev": "719359f4562934ae99f5443f20aa06c2ffff91fc",
|
|
59
|
-
"type": "github"
|
|
60
|
-
},
|
|
61
|
-
"original": {
|
|
62
|
-
"owner": "nix-community",
|
|
63
|
-
"repo": "nixpkgs.lib",
|
|
64
|
-
"type": "github"
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
"nixpkgs_2": {
|
|
68
|
-
"locked": {
|
|
69
|
-
"lastModified": 1758690382,
|
|
70
|
-
"narHash": "sha256-NY3kSorgqE5LMm1LqNwGne3ZLMF2/ILgLpFr1fS4X3o=",
|
|
71
|
-
"owner": "nixos",
|
|
72
|
-
"repo": "nixpkgs",
|
|
73
|
-
"rev": "e643668fd71b949c53f8626614b21ff71a07379d",
|
|
74
|
-
"type": "github"
|
|
75
|
-
},
|
|
76
|
-
"original": {
|
|
77
|
-
"owner": "nixos",
|
|
78
|
-
"ref": "nixos-unstable",
|
|
79
|
-
"repo": "nixpkgs",
|
|
80
|
-
"type": "github"
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
"nixpkgs_3": {
|
|
84
|
-
"locked": {
|
|
85
|
-
"lastModified": 1761373498,
|
|
86
|
-
"narHash": "sha256-Q/uhWNvd7V7k1H1ZPMy/vkx3F8C13ZcdrKjO7Jv7v0c=",
|
|
87
|
-
"owner": "nixos",
|
|
88
|
-
"repo": "nixpkgs",
|
|
89
|
-
"rev": "6a08e6bb4e46ff7fcbb53d409b253f6bad8a28ce",
|
|
90
|
-
"type": "github"
|
|
91
|
-
},
|
|
92
|
-
"original": {
|
|
93
|
-
"owner": "nixos",
|
|
94
|
-
"ref": "nixos-unstable",
|
|
95
|
-
"repo": "nixpkgs",
|
|
96
|
-
"type": "github"
|
|
97
|
-
}
|
|
98
|
-
},
|
|
99
|
-
"nixpkgs_flake": {
|
|
100
|
-
"locked": {
|
|
101
|
-
"lastModified": 1778253243,
|
|
102
|
-
"narHash": "sha256-KkH2QvU6iRLDTGGEwH5jnMqHWj4zMTuHxi1S1zdr01w=",
|
|
103
|
-
"owner": "nixos",
|
|
104
|
-
"repo": "nixpkgs",
|
|
105
|
-
"rev": "4fcda7103530b23c5ca44286344912082aad4220",
|
|
106
|
-
"type": "github"
|
|
107
|
-
},
|
|
108
|
-
"original": {
|
|
109
|
-
"owner": "nixos",
|
|
110
|
-
"repo": "nixpkgs",
|
|
111
|
-
"type": "github"
|
|
112
|
-
}
|
|
113
|
-
},
|
|
114
|
-
"pyproject-build-systems": {
|
|
115
|
-
"inputs": {
|
|
116
|
-
"nixpkgs": "nixpkgs",
|
|
117
|
-
"pyproject-nix": "pyproject-nix",
|
|
118
|
-
"uv2nix": "uv2nix"
|
|
119
|
-
},
|
|
120
|
-
"locked": {
|
|
121
|
-
"lastModified": 1761781027,
|
|
122
|
-
"narHash": "sha256-YDvxPAm2WnxrznRqWwHLjryBGG5Ey1ATEJXrON+TWt8=",
|
|
123
|
-
"owner": "pyproject-nix",
|
|
124
|
-
"repo": "build-system-pkgs",
|
|
125
|
-
"rev": "795a980d25301e5133eca37adae37283ec3c8e66",
|
|
126
|
-
"type": "github"
|
|
127
|
-
},
|
|
128
|
-
"original": {
|
|
129
|
-
"owner": "pyproject-nix",
|
|
130
|
-
"repo": "build-system-pkgs",
|
|
131
|
-
"type": "github"
|
|
132
|
-
}
|
|
133
|
-
},
|
|
134
|
-
"pyproject-nix": {
|
|
135
|
-
"inputs": {
|
|
136
|
-
"nixpkgs": [
|
|
137
|
-
"python_builder",
|
|
138
|
-
"pyproject-build-systems",
|
|
139
|
-
"nixpkgs"
|
|
140
|
-
]
|
|
141
|
-
},
|
|
142
|
-
"locked": {
|
|
143
|
-
"lastModified": 1758265079,
|
|
144
|
-
"narHash": "sha256-amLaLNwKSZPShQHzfgmc/9o76dU8xzN0743dWgvYlr8=",
|
|
145
|
-
"owner": "nix-community",
|
|
146
|
-
"repo": "pyproject.nix",
|
|
147
|
-
"rev": "02e9418fd4af638447dca4b17b1280da95527fc9",
|
|
148
|
-
"type": "github"
|
|
149
|
-
},
|
|
150
|
-
"original": {
|
|
151
|
-
"owner": "nix-community",
|
|
152
|
-
"repo": "pyproject.nix",
|
|
153
|
-
"type": "github"
|
|
154
|
-
}
|
|
155
|
-
},
|
|
156
|
-
"pyproject-nix_2": {
|
|
157
|
-
"inputs": {
|
|
158
|
-
"nixpkgs": "nixpkgs_2"
|
|
159
|
-
},
|
|
160
|
-
"locked": {
|
|
161
|
-
"lastModified": 1762427963,
|
|
162
|
-
"narHash": "sha256-CkPlAbIQ87wmjy5qHibfzk4DmMGBNqFer+lLfXjpP5M=",
|
|
163
|
-
"owner": "pyproject-nix",
|
|
164
|
-
"repo": "pyproject.nix",
|
|
165
|
-
"rev": "4540ea004e04fcd12dd2738d51383d10f956f7b9",
|
|
166
|
-
"type": "github"
|
|
167
|
-
},
|
|
168
|
-
"original": {
|
|
169
|
-
"owner": "pyproject-nix",
|
|
170
|
-
"repo": "pyproject.nix",
|
|
171
|
-
"type": "github"
|
|
172
|
-
}
|
|
173
|
-
},
|
|
174
|
-
"pyproject-nix_3": {
|
|
175
|
-
"inputs": {
|
|
176
|
-
"nixpkgs": [
|
|
177
|
-
"python_builder",
|
|
178
|
-
"uv2nix",
|
|
179
|
-
"nixpkgs"
|
|
180
|
-
]
|
|
181
|
-
},
|
|
182
|
-
"locked": {
|
|
183
|
-
"lastModified": 1760402624,
|
|
184
|
-
"narHash": "sha256-jF6UKLs2uGc2rtved8Vrt58oTWjTQoAssuYs/0578Z4=",
|
|
185
|
-
"owner": "pyproject-nix",
|
|
186
|
-
"repo": "pyproject.nix",
|
|
187
|
-
"rev": "84c4ea102127c77058ea1ed7be7300261fafc7d2",
|
|
188
|
-
"type": "github"
|
|
189
|
-
},
|
|
190
|
-
"original": {
|
|
191
|
-
"owner": "pyproject-nix",
|
|
192
|
-
"repo": "pyproject.nix",
|
|
193
|
-
"type": "github"
|
|
194
|
-
}
|
|
195
|
-
},
|
|
196
|
-
"python_builder": {
|
|
197
|
-
"inputs": {
|
|
198
|
-
"nix_filter": "nix_filter",
|
|
199
|
-
"nixpkgs_flake": "nixpkgs_flake",
|
|
200
|
-
"pyproject-build-systems": "pyproject-build-systems",
|
|
201
|
-
"pyproject-nix": "pyproject-nix_2",
|
|
202
|
-
"shell-helpers": "shell-helpers",
|
|
203
|
-
"uv2nix": "uv2nix_2"
|
|
204
|
-
},
|
|
205
|
-
"locked": {
|
|
206
|
-
"dir": "common/utils/python-builder",
|
|
207
|
-
"lastModified": 1787078362,
|
|
208
|
-
"narHash": "sha256-HYL7Rn6SuNjYxkt/PwFLksZjsauCiY+ENbOWryLsIlw=",
|
|
209
|
-
"ref": "refs/heads/trunk",
|
|
210
|
-
"rev": "09fd25a13309eb5e3b5b2a061bb340df3ae5d281",
|
|
211
|
-
"shallow": true,
|
|
212
|
-
"type": "git",
|
|
213
|
-
"url": "ssh://git@gitlab.com/fluidattacks/universe"
|
|
214
|
-
},
|
|
215
|
-
"original": {
|
|
216
|
-
"dir": "common/utils/python-builder",
|
|
217
|
-
"rev": "09fd25a13309eb5e3b5b2a061bb340df3ae5d281",
|
|
218
|
-
"shallow": true,
|
|
219
|
-
"type": "git",
|
|
220
|
-
"url": "ssh://git@gitlab.com/fluidattacks/universe"
|
|
221
|
-
}
|
|
222
|
-
},
|
|
223
|
-
"root": {
|
|
224
|
-
"inputs": {
|
|
225
|
-
"python_builder": "python_builder"
|
|
226
|
-
}
|
|
227
|
-
},
|
|
228
|
-
"shell-helpers": {
|
|
229
|
-
"inputs": {
|
|
230
|
-
"flake-parts": "flake-parts",
|
|
231
|
-
"nixpkgs": [
|
|
232
|
-
"python_builder",
|
|
233
|
-
"nixpkgs_flake"
|
|
234
|
-
]
|
|
235
|
-
},
|
|
236
|
-
"locked": {
|
|
237
|
-
"dir": "common/utils/shell-helpers",
|
|
238
|
-
"lastModified": 1762806066,
|
|
239
|
-
"narHash": "sha256-Wz99Fl7SpPU1NkTHJ36XOo6DjOEAMXCw3ThRABOS2Hs=",
|
|
240
|
-
"ref": "refs/heads/trunk",
|
|
241
|
-
"rev": "d73cfdc7ae9e7f547e22a4481d4c2ccce38b26a8",
|
|
242
|
-
"shallow": true,
|
|
243
|
-
"type": "git",
|
|
244
|
-
"url": "ssh://git@gitlab.com/fluidattacks/universe"
|
|
245
|
-
},
|
|
246
|
-
"original": {
|
|
247
|
-
"dir": "common/utils/shell-helpers",
|
|
248
|
-
"rev": "d73cfdc7ae9e7f547e22a4481d4c2ccce38b26a8",
|
|
249
|
-
"shallow": true,
|
|
250
|
-
"type": "git",
|
|
251
|
-
"url": "ssh://git@gitlab.com/fluidattacks/universe"
|
|
252
|
-
}
|
|
253
|
-
},
|
|
254
|
-
"uv2nix": {
|
|
255
|
-
"inputs": {
|
|
256
|
-
"nixpkgs": [
|
|
257
|
-
"python_builder",
|
|
258
|
-
"pyproject-build-systems",
|
|
259
|
-
"nixpkgs"
|
|
260
|
-
],
|
|
261
|
-
"pyproject-nix": [
|
|
262
|
-
"python_builder",
|
|
263
|
-
"pyproject-build-systems",
|
|
264
|
-
"pyproject-nix"
|
|
265
|
-
]
|
|
266
|
-
},
|
|
267
|
-
"locked": {
|
|
268
|
-
"lastModified": 1758933732,
|
|
269
|
-
"narHash": "sha256-HAmm1GBS1myZCFuog0DC2ZLaynvZtiUI2Crmo+cdQI0=",
|
|
270
|
-
"owner": "pyproject-nix",
|
|
271
|
-
"repo": "uv2nix",
|
|
272
|
-
"rev": "273ce18f913d8559e0d04f820d724308966d7c4d",
|
|
273
|
-
"type": "github"
|
|
274
|
-
},
|
|
275
|
-
"original": {
|
|
276
|
-
"owner": "pyproject-nix",
|
|
277
|
-
"repo": "uv2nix",
|
|
278
|
-
"type": "github"
|
|
279
|
-
}
|
|
280
|
-
},
|
|
281
|
-
"uv2nix_2": {
|
|
282
|
-
"inputs": {
|
|
283
|
-
"nixpkgs": "nixpkgs_3",
|
|
284
|
-
"pyproject-nix": "pyproject-nix_3"
|
|
285
|
-
},
|
|
286
|
-
"locked": {
|
|
287
|
-
"lastModified": 1761872265,
|
|
288
|
-
"narHash": "sha256-i25GRgp2vUOebY70L3NTAgkd+Pr1hnn5xM3qHxH0ONU=",
|
|
289
|
-
"owner": "pyproject-nix",
|
|
290
|
-
"repo": "uv2nix",
|
|
291
|
-
"rev": "74dfb62871be152ad3673b143b0cc56105a4f3c5",
|
|
292
|
-
"type": "github"
|
|
293
|
-
},
|
|
294
|
-
"original": {
|
|
295
|
-
"owner": "pyproject-nix",
|
|
296
|
-
"repo": "uv2nix",
|
|
297
|
-
"type": "github"
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
},
|
|
301
|
-
"root": "root",
|
|
302
|
-
"version": 7
|
|
303
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
description = "Fluid Attacks Core models package.";
|
|
3
|
-
|
|
4
|
-
inputs = {
|
|
5
|
-
python_builder = {
|
|
6
|
-
url = "git+ssh://git@gitlab.com/fluidattacks/universe?shallow=1&rev=09fd25a13309eb5e3b5b2a061bb340df3ae5d281&dir=common/utils/python-builder";
|
|
7
|
-
};
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
outputs =
|
|
11
|
-
{ self, ... }@inputs:
|
|
12
|
-
let
|
|
13
|
-
build_args =
|
|
14
|
-
{
|
|
15
|
-
system,
|
|
16
|
-
python_version,
|
|
17
|
-
nixpkgs,
|
|
18
|
-
builders,
|
|
19
|
-
scripts,
|
|
20
|
-
}:
|
|
21
|
-
import ./build {
|
|
22
|
-
src = import ./build/filter.nix nixpkgs.nix-filter self;
|
|
23
|
-
workspace_root = ./.;
|
|
24
|
-
};
|
|
25
|
-
in
|
|
26
|
-
{
|
|
27
|
-
packages = inputs.python_builder.outputs.build build_args;
|
|
28
|
-
};
|
|
29
|
-
}
|
|
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
|
{fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/tests/test_root_scanner.py
RENAMED
|
File without changes
|
{fluidattacks_core_models-14.1.0 → fluidattacks_core_models-14.3.0}/tests/test_state_machines.py
RENAMED
|
File without changes
|
|
File without changes
|