clue-api 1.4.0.dev184__tar.gz → 1.4.0.dev220__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.
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/PKG-INFO +3 -3
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/models/actions.py +13 -1
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/pyproject.toml +3 -3
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/LICENSE +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/README.md +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/.gitignore +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/api/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/api/base.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/api/v1/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/api/v1/actions.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/api/v1/auth.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/api/v1/configs.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/api/v1/fetchers.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/api/v1/lookup.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/api/v1/registration.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/api/v1/static.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/app.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/cache/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/common/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/common/bytes_utils.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/common/classification.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/common/classification.yml +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/common/dict_utils.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/common/exceptions.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/common/forge.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/common/json_utils.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/common/list_utils.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/common/logging/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/common/logging/audit.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/common/logging/format.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/common/regex.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/common/str_utils.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/common/swagger.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/common/uid.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/config.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/constants/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/constants/env.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/constants/supported_types.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/cronjobs/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/cronjobs/plugins.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/error.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/extensions/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/extensions/config.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/gunicorn_config.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/healthz.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/helper/discover.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/helper/headers.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/helper/oauth.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/models/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/models/config.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/models/fetchers.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/models/graph.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/models/model_list.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/models/network.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/models/results/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/models/results/base.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/models/results/file.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/models/results/graph.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/models/results/image.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/models/results/status.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/models/results/validation.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/models/selector.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/models/validators.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/patched.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/plugin/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/plugin/celery_app.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/plugin/helpers/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/plugin/helpers/central_server.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/plugin/helpers/email_render.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/plugin/helpers/token.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/plugin/helpers/trino.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/plugin/models.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/plugin/utils.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/py.typed +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/remote/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/remote/datatypes/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/remote/datatypes/cache.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/remote/datatypes/events.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/remote/datatypes/hash.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/remote/datatypes/queues/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/remote/datatypes/queues/comms.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/remote/datatypes/set.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/remote/datatypes/user_quota_tracker.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/security/__init__.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/security/obo.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/security/utils.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/services/action_service.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/services/auth_service.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/services/config_service.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/services/fetcher_service.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/services/jwt_service.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/services/lookup_service.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/services/type_service.py +0 -0
- {clue_api-1.4.0.dev184 → clue_api-1.4.0.dev220}/clue/services/user_service.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: clue-api
|
|
3
|
-
Version: 1.4.0.
|
|
3
|
+
Version: 1.4.0.dev220
|
|
4
4
|
Summary: Clue distributed enrichment service
|
|
5
5
|
License: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -27,14 +27,14 @@ Requires-Dist: cart (>=1.2.3,<2.0.0)
|
|
|
27
27
|
Requires-Dist: celery (>=5.6.2,<6.0.0)
|
|
28
28
|
Requires-Dist: elastic-apm (>=6.22.0,<7.0.0)
|
|
29
29
|
Requires-Dist: flasgger (>=0.9.7.1,<0.10.0.0) ; extra == "server"
|
|
30
|
-
Requires-Dist: flask (<
|
|
30
|
+
Requires-Dist: flask (<4.0.0)
|
|
31
31
|
Requires-Dist: flask-caching (>=2.1.0,<3.0.0)
|
|
32
32
|
Requires-Dist: flask-cors (>=4.0.1,<7.0.0) ; extra == "server"
|
|
33
33
|
Requires-Dist: gevent (>=24.2.1,<25.0.0)
|
|
34
34
|
Requires-Dist: gunicorn (>=22,<24)
|
|
35
35
|
Requires-Dist: imgkit (>=1.2.3,<2.0.0)
|
|
36
36
|
Requires-Dist: passlib (>=1.7.4,<2.0.0) ; extra == "server"
|
|
37
|
-
Requires-Dist: pillow (>=11.1
|
|
37
|
+
Requires-Dist: pillow (>=11.1,<13.0)
|
|
38
38
|
Requires-Dist: prometheus-client (>=0.20.0,<0.21.0) ; extra == "server"
|
|
39
39
|
Requires-Dist: pydantic (>=2.7.1,<3.0.0)
|
|
40
40
|
Requires-Dist: pydantic-settings[yaml] (>=2.3.4,<3.0.0)
|
|
@@ -34,12 +34,24 @@ from clue.models.validators import validate_classification
|
|
|
34
34
|
logger = get_logger(__file__)
|
|
35
35
|
|
|
36
36
|
|
|
37
|
+
class UrlData(BaseModel):
|
|
38
|
+
hash: str | None = Field(default=None, description="URL fragment identifier")
|
|
39
|
+
host: str | None = Field(default=None, description="Hostname and port")
|
|
40
|
+
hostname: str | None = Field(default=None, description="Hostname without port")
|
|
41
|
+
href: str | None = Field(default=None, description="Full URL string")
|
|
42
|
+
origin: str | None = Field(default=None, description="Origin (protocol + host)")
|
|
43
|
+
pathname: str | None = Field(default=None, description="URL path")
|
|
44
|
+
port: str | None = Field(default=None, description="Port number as string")
|
|
45
|
+
protocol: str | None = Field(default=None, description="URL protocol (e.g. 'https:')")
|
|
46
|
+
search: str | None = Field(default=None, description="Query string")
|
|
47
|
+
|
|
48
|
+
|
|
37
49
|
class ActionContextInformation(BaseModel):
|
|
38
50
|
"""Contextual information on where the action is being executed."""
|
|
39
51
|
|
|
40
52
|
model_config = ConfigDict(extra="allow")
|
|
41
53
|
|
|
42
|
-
url:
|
|
54
|
+
url: UrlData | None = Field(default=None, description="URL context for the action")
|
|
43
55
|
timestamp: str | None = Field(default=None, description="Timestamp when the action was initiated")
|
|
44
56
|
language: str | None = Field(default=None, description="Language context for the action")
|
|
45
57
|
|
|
@@ -139,7 +139,7 @@ log_cli_level = "WARN"
|
|
|
139
139
|
[tool.poetry]
|
|
140
140
|
package-mode = true
|
|
141
141
|
name = "clue-api"
|
|
142
|
-
version = "1.4.0.
|
|
142
|
+
version = "1.4.0.dev220"
|
|
143
143
|
description = "Clue distributed enrichment service"
|
|
144
144
|
authors = ["Canadian Centre for Cyber Security <contact@cyber.gc.ca>"]
|
|
145
145
|
license = "MIT"
|
|
@@ -172,7 +172,7 @@ repository = "https://github.com/CybercentreCanada/clue"
|
|
|
172
172
|
[tool.poetry.dependencies]
|
|
173
173
|
python = "^3.12"
|
|
174
174
|
elastic-apm = "^6.22.0"
|
|
175
|
-
flask = "<
|
|
175
|
+
flask = "<4.0.0"
|
|
176
176
|
flask-caching = "^2.1.0"
|
|
177
177
|
gunicorn = ">=22,<24"
|
|
178
178
|
gevent = "^24.2.1"
|
|
@@ -181,7 +181,7 @@ pydantic-settings = { extras = ["yaml"], version = "^2.3.4" }
|
|
|
181
181
|
redis = { version = "^5.0.3" }
|
|
182
182
|
beautifulsoup4 = "^4.13.3"
|
|
183
183
|
imgkit = "^1.2.3"
|
|
184
|
-
pillow = "
|
|
184
|
+
pillow = ">=11.1,<13.0"
|
|
185
185
|
cart = "^1.2.3"
|
|
186
186
|
setuptools = "<79.0.0"
|
|
187
187
|
requests = "^2.32.5"
|
|
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
|
|
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
|
|
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
|