clue-api 1.0.1.dev81__tar.gz → 1.0.1.dev89__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.0.1.dev81 → clue_api-1.0.1.dev89}/PKG-INFO +2 -2
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/api/v1/auth.py +1 -1
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/services/user_service.py +4 -2
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/pyproject.toml +2 -7
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/LICENSE +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/README.md +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/.gitignore +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/api/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/api/base.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/api/v1/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/api/v1/actions.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/api/v1/configs.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/api/v1/fetchers.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/api/v1/lookup.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/api/v1/registration.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/api/v1/static.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/app.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/cache/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/common/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/common/classification.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/common/classification.yml +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/common/dict_utils.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/common/exceptions.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/common/forge.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/common/json_utils.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/common/list_utils.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/common/logging/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/common/logging/audit.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/common/logging/format.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/common/regex.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/common/str_utils.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/common/swagger.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/common/uid.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/config.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/constants/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/constants/supported_types.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/cronjobs/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/cronjobs/plugins.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/error.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/extensions/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/extensions/config.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/gunicorn_config.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/healthz.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/helper/discover.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/helper/headers.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/helper/oauth.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/models/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/models/actions.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/models/config.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/models/fetchers.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/models/graph.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/models/model_list.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/models/network.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/models/results/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/models/results/base.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/models/results/graph.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/models/results/image.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/models/results/status.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/models/results/validation.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/models/selector.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/models/validators.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/patched.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/plugin/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/plugin/helpers/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/plugin/helpers/central_server.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/plugin/helpers/email_render.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/plugin/helpers/token.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/plugin/helpers/trino.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/plugin/models.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/plugin/utils.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/py.typed +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/remote/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/remote/datatypes/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/remote/datatypes/cache.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/remote/datatypes/events.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/remote/datatypes/hash.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/remote/datatypes/queues/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/remote/datatypes/queues/comms.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/remote/datatypes/set.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/remote/datatypes/user_quota_tracker.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/security/__init__.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/security/obo.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/security/utils.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/services/action_service.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/services/auth_service.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/services/config_service.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/services/fetcher_service.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/services/jwt_service.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/services/lookup_service.py +0 -0
- {clue_api-1.0.1.dev81 → clue_api-1.0.1.dev89}/clue/services/type_service.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: clue-api
|
|
3
|
-
Version: 1.0.1.
|
|
3
|
+
Version: 1.0.1.dev89
|
|
4
4
|
Summary: Clue distributed enrichment service
|
|
5
5
|
License: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -20,7 +20,7 @@ Provides-Extra: server
|
|
|
20
20
|
Requires-Dist: PyYAML (>=6.0.1,<7.0.0) ; extra == "server"
|
|
21
21
|
Requires-Dist: Werkzeug (>=3.0.2,<4.0.0) ; extra == "server"
|
|
22
22
|
Requires-Dist: apscheduler (>=3.10.4,<4.0.0) ; extra == "server"
|
|
23
|
-
Requires-Dist: authlib (<
|
|
23
|
+
Requires-Dist: authlib (<2.0.0) ; extra == "server"
|
|
24
24
|
Requires-Dist: bcrypt (>=4.1.2,<5.0.0) ; extra == "server"
|
|
25
25
|
Requires-Dist: beautifulsoup4 (>=4.13.3,<5.0.0)
|
|
26
26
|
Requires-Dist: cart (>=1.2.3,<2.0.0)
|
|
@@ -125,7 +125,7 @@ def login(**_) -> dict[str, Any]: # noqa: C901
|
|
|
125
125
|
uri = urlparse(referer if referer else request.host_url)
|
|
126
126
|
port_portion = ":" + str(uri.port) if uri.port else ""
|
|
127
127
|
redirect_uri = f"{uri.scheme}://{uri.hostname}{port_portion}/login?provider={oauth_provider}"
|
|
128
|
-
return provider.authorize_redirect(redirect_uri=redirect_uri)
|
|
128
|
+
return provider.authorize_redirect(redirect_uri=redirect_uri, nonce=request.args.get("nonce", None))
|
|
129
129
|
|
|
130
130
|
# At this point we know the code exists, so we're good to use that to exchange for an JSON Web Token with
|
|
131
131
|
# user data in it. token_data contains the access token, expiry, refresh token, and id token,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from typing import Any
|
|
2
2
|
|
|
3
3
|
import elasticapm
|
|
4
|
-
from flask import current_app
|
|
4
|
+
from flask import current_app, request
|
|
5
5
|
|
|
6
6
|
from clue.common.exceptions import (
|
|
7
7
|
AccessDeniedException,
|
|
@@ -49,7 +49,9 @@ def parse_user_data(
|
|
|
49
49
|
provider = oauth.create_client(oauth_provider)
|
|
50
50
|
|
|
51
51
|
if "id_token" in data:
|
|
52
|
-
data = provider.parse_id_token(
|
|
52
|
+
data = provider.parse_id_token(
|
|
53
|
+
data, nonce=request.args.get("nonce", data.get("userinfo", {}).get("nonce", None))
|
|
54
|
+
)
|
|
53
55
|
|
|
54
56
|
oauth_provider_config = config.auth.oauth.providers[oauth_provider]
|
|
55
57
|
|
|
@@ -131,9 +131,6 @@ suppress-none-returning = true
|
|
|
131
131
|
"clue/common/classification.py" = ["D", "ANN", "C901", "TRY301", "T203"]
|
|
132
132
|
"clue/remote/datatypes/*" = ["D", "ANN", "C901"]
|
|
133
133
|
"clue/security/__init__.py" = ["TRY301"]
|
|
134
|
-
"plugin/interactive.py" = ["T201"]
|
|
135
|
-
"plugin/create.py" = ["T201", "D103"]
|
|
136
|
-
"plugin/commands.py" = ["T201", "D103"]
|
|
137
134
|
"test/conftest.py" = ["E402"]
|
|
138
135
|
|
|
139
136
|
###################
|
|
@@ -149,7 +146,7 @@ log_cli_level = "WARN"
|
|
|
149
146
|
[tool.poetry]
|
|
150
147
|
package-mode = true
|
|
151
148
|
name = "clue-api"
|
|
152
|
-
version = "1.0.1.
|
|
149
|
+
version = "1.0.1.dev89"
|
|
153
150
|
description = "Clue distributed enrichment service"
|
|
154
151
|
authors = ["Canadian Centre for Cyber Security <contact@cyber.gc.ca>"]
|
|
155
152
|
license = "MIT"
|
|
@@ -208,7 +205,7 @@ prometheus-client = { version = "^0.20.0", optional = true }
|
|
|
208
205
|
apscheduler = { version = "^3.10.4", optional = true }
|
|
209
206
|
pytz = { version = "^2024.1", optional = true }
|
|
210
207
|
passlib = { version = "^1.7.4", optional = true }
|
|
211
|
-
authlib = { version = "<
|
|
208
|
+
authlib = { version = "<2.0.0", optional = true }
|
|
212
209
|
flask-cors = { version = ">=4.0.1,<7.0.0", optional = true }
|
|
213
210
|
flasgger = { version = "^0.9.7.1", optional = true }
|
|
214
211
|
trino = "^0.336.0"
|
|
@@ -241,8 +238,6 @@ last_success = "build_scripts.last_success:main"
|
|
|
241
238
|
check_changes = "build_scripts.check_changes:main"
|
|
242
239
|
type_check = "build_scripts.type_check:main"
|
|
243
240
|
coverage_report = "build_scripts.coverage_reports:main"
|
|
244
|
-
plugin = "plugin.interactive:main"
|
|
245
|
-
create = "plugin.create:main"
|
|
246
241
|
|
|
247
242
|
[tool.poetry.group.test.dependencies]
|
|
248
243
|
pytest = "^8.1.1"
|
|
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
|