howler-api 3.4.0.dev933__py3-none-any.whl → 3.4.0.dev950__py3-none-any.whl

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.
howler/helper/discover.py CHANGED
@@ -17,6 +17,9 @@ def get_apps_list(discovery_url: Optional[str]) -> list[dict[str, str]]:
17
17
  Returns:
18
18
  list[dict[str, str]]: A list of other apps
19
19
  """
20
+ if not config.discovery.enabled or discovery_url is None:
21
+ return []
22
+
20
23
  if discovery_url not in DISCO_CACHE:
21
24
  apps = []
22
25
 
@@ -25,7 +28,7 @@ def get_apps_list(discovery_url: Optional[str]) -> list[dict[str, str]]:
25
28
 
26
29
  try:
27
30
  resp = requests.get(
28
- typing.cast(str, discovery_url or config.ui.discover_url),
31
+ typing.cast(str, discovery_url or config.discovery.url),
29
32
  headers={"accept": "application/json"},
30
33
  timeout=5,
31
34
  )
howler/odm/helper.py CHANGED
@@ -31,7 +31,7 @@ from howler.security.utils import get_password_hash
31
31
  from howler.utils.constants import TESTING
32
32
  from howler.utils.uid import get_random_id
33
33
 
34
- APPS = get_apps_list(discovery_url=config.ui.discover_url)
34
+ APPS = get_apps_list(discovery_url=config.discovery.url)
35
35
  ESCALATIONS = Escalation.list()
36
36
  EXAMPLE_ANALYTICS = ["Password Checker", "Bad Guy Finder", "Exploit Patcher"]
37
37
 
@@ -471,6 +471,18 @@ class Telemetry(BaseModel):
471
471
  )
472
472
 
473
473
 
474
+ class Discovery(BaseModel):
475
+ """Service discovery configuration for Howler.
476
+
477
+ Defines settings for enabling and configuring service discovery,
478
+ allowing Howler instances to locate and communicate with each other
479
+ in distributed deployments.
480
+ """
481
+
482
+ url: Optional[str] = Field(default=None, description="Discovery URL")
483
+ enabled: bool = Field(default=False, description="Should discovery be enabled?")
484
+
485
+
474
486
  class Core(BaseModel):
475
487
  """Core application configuration for Howler.
476
488
 
@@ -553,6 +565,8 @@ class Config(BaseSettings):
553
565
  logging: Logging = Logging()
554
566
  system: System = System()
555
567
  ui: UI = UI()
568
+ discovery: Discovery = Discovery()
569
+
556
570
  mapping: dict[str, str] = Field(description="Mapping of alert keys to clue types", default={})
557
571
 
558
572
  model_config = SettingsConfigDict(
howler/security/utils.py CHANGED
@@ -182,6 +182,6 @@ def get_disco_url(host_url: Optional[str]):
182
182
 
183
183
  return f"https://{hostname}/eureka/apps"
184
184
  else:
185
- return config.ui.discover_url
185
+ return config.discovery.url
186
186
  else:
187
- return config.ui.discover_url
187
+ return config.discovery.url
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: howler-api
3
- Version: 3.4.0.dev933
3
+ Version: 3.4.0.dev950
4
4
  Summary: Howler - API server
5
5
  License: MIT
6
6
  Keywords: howler,alerting,gc,canada,cse-cst,cse,cst,cyber,cccs
@@ -42,7 +42,7 @@ Requires-Dist: prometheus-client (==0.25.0)
42
42
  Requires-Dist: pydantic (>=2.11.4,<3.0.0)
43
43
  Requires-Dist: pydantic-settings[yaml] (>=2.9.1,<3.0.0)
44
44
  Requires-Dist: pydash (>=8.0.5,<9.0.0)
45
- Requires-Dist: pyjwt (==2.12.1)
45
+ Requires-Dist: pyjwt (==2.13.0)
46
46
  Requires-Dist: pysigma (==0.11.23)
47
47
  Requires-Dist: pysigma-backend-elasticsearch (>=1.1.2,<2.0.0)
48
48
  Requires-Dist: python-baseconv (==1.2.2)
@@ -78,7 +78,7 @@ howler/gunicorn_config.py,sha256=0X7DPFcVDu3qAgMbNsdYGqCuvQGn5ZNx_eapOMyuXuI,750
78
78
  howler/healthz.py,sha256=nvb8MBBERYIkA_UxxLIyNEQazYOnPCcm0sH0Jm5nF0k,769
79
79
  howler/helper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
80
  howler/helper/azure.py,sha256=evI413uz-PdI6C5HIHh8LPRx83mTO8y6nad5ed_qJ5Y,1830
81
- howler/helper/discover.py,sha256=j1nPHOPZ9CwvcfLT2xd-uvvpEex-nhPscl9aZwutwDk,2221
81
+ howler/helper/discover.py,sha256=YMdfSnk6yUpifz0PNJqjfMURugAn-IawE4ZJNUFDY08,2300
82
82
  howler/helper/hit.py,sha256=Us2B4Dngu_ghWCZ40o7mZ0iLKKDr2onV6oB2OLuE5Fc,7863
83
83
  howler/helper/oauth.py,sha256=08yApXF9l-mCVFUodmcZDDj6Y0B4tFge10OrDYqnQmg,10725
84
84
  howler/helper/search.py,sha256=XQ_6ScHsmzfqXnQ3Rt-j9ADmddaSVsAcG6348L-WtPY,2882
@@ -88,7 +88,7 @@ howler/odm/README.md,sha256=Ihc_DyjVQlLaIOEbPoQNPkum9Ecn8kn37-PMFQsX77s,5645
88
88
  howler/odm/__init__.py,sha256=1n6vgBOrFcCHSBFysqgODERvqP7s5DIeJe8N8UeE5pM,44
89
89
  howler/odm/base.py,sha256=e90yzWXi7DB14FdRleCY2sn6WW_pSDw9yNIseY4WhFo,55794
90
90
  howler/odm/charter.txt,sha256=-Wgrv7nqugZmeQknJk0_m6klLJStjVbuqKbi_KaDinQ,15277
91
- howler/odm/helper.py,sha256=t12eFRnDfEELn4K2lpccXRWHAPdz2-f_pVFUp4lva2Q,13945
91
+ howler/odm/helper.py,sha256=JYNkWcQBsaWPidTYExXdElFTvsCJuw7PPxhsSnCjhoU,13943
92
92
  howler/odm/howler_enum.py,sha256=JzRK3_adlhvfkoGdMZD1jgOwlneZs8-x7OxGEj3zcpY,768
93
93
  howler/odm/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
94
  howler/odm/models/action.py,sha256=V9tgMCg1ewu8mOngTcA6QAPwaR0NIT71VHglpRFYmS4,1235
@@ -98,7 +98,7 @@ howler/odm/models/aws.py,sha256=pJVadJqubdgT27riCfp7bEKVP4XsMZB0ZUnKAbmCMd0,895
98
98
  howler/odm/models/azure.py,sha256=o7MZMMo9jh1SB8xXCajl_YSKP2nnnWsjx_DPT6LnQKg,710
99
99
  howler/odm/models/cbs.py,sha256=onUiJOGUxK3iy_-4XkGGwHxFiFq9Td_p59Kum4XaR-w,1366
100
100
  howler/odm/models/clue.py,sha256=TNJV1t9bEhRTcJuSC2qNKQ-XpwFqb5iQstRpvHOrTHE,636
101
- howler/odm/models/config.py,sha256=9xSSjDoGDHngP5L4SI_fNH_pP52JBWJWNG7UbtaWDck,23242
101
+ howler/odm/models/config.py,sha256=sjfOO9au__97NJYRHjiHIhmOSUkGJBQA2TX4IqwG1R8,23705
102
102
  howler/odm/models/dossier.py,sha256=Ob2qROrG2-DYzmVo2XVe4NJ8HjWGCoRAu2gPo6p9XGU,1244
103
103
  howler/odm/models/ecs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
104
  howler/odm/models/ecs/agent.py,sha256=idSooyFCLuQAB7_RyEWTYW4-x9w5a3wpy2ct_-EDRQs,713
@@ -169,7 +169,7 @@ howler/remote/datatypes/set.py,sha256=y3SS8_-goa6q-IDwQMTpBA6VtjMC833CSwySaawAO4
169
169
  howler/remote/datatypes/user_quota_tracker.py,sha256=v18t7xMZmUjuiOnyKRZGkdBQrGiVAn9Oaa4_mdog2-4,1949
170
170
  howler/security/__init__.py,sha256=iC7RLwfDcgBHdNMSHgQwweLdk-swh5SPVPuOsdgRWlI,11438
171
171
  howler/security/socket.py,sha256=ghpQj9fg0rGB1Ua8dTmiWIHRVHqGvhHYfpaKNdBzsrQ,3876
172
- howler/security/utils.py,sha256=ok7CV9X1s53ZhYWJ9aBNjC6WLY1cejf4cpSlKfLzLZc,5356
172
+ howler/security/utils.py,sha256=fYrz3UaBBA-evvMD03kZNBfBHA65irgZipeqcIJ9S6w,5352
173
173
  howler/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
174
174
  howler/services/action_service.py,sha256=aq3jaSlvxg4KigJLc4mi5efeO-QqtVGbubOws87r1uk,7572
175
175
  howler/services/analytic_service.py,sha256=6V_LD88bfDhdWN_47KFJ0y44X1mIE4xqGj834T2CfnM,4959
@@ -198,7 +198,7 @@ howler/utils/path.py,sha256=DfOU4i4zSs4wchHoE8iE7aWVLkTxiC_JRGepF2hBYBk,690
198
198
  howler/utils/socket_utils.py,sha256=nz1SklC9xBHUSfHyTJjpq3mbozX1GDf01WzdGxfaUII,2212
199
199
  howler/utils/str_utils.py,sha256=HE8Hqh2HlOLaj16w0H9zKOyDJLp-f1LQ50y_WeGZaEk,8389
200
200
  howler/utils/uid.py,sha256=p9dsqyvZ-lpiAuzZWCPCeEM99kdk0Ly9czf04HNdSuw,1341
201
- howler_api-3.4.0.dev933.dist-info/METADATA,sha256=ZWXl7ZWVGC7gjqrAkdAUJX4tABnc_s3eMfzCijabQzY,2879
202
- howler_api-3.4.0.dev933.dist-info/WHEEL,sha256=EGEvSphFYqXKs23-kQBeyNoJP1nrT8ZJKQoi5p5DYL8,88
203
- howler_api-3.4.0.dev933.dist-info/entry_points.txt,sha256=Lu9SBGvwe0wczJHmc-RudC24lmQk7tv3ZBXon9RIihg,259
204
- howler_api-3.4.0.dev933.dist-info/RECORD,,
201
+ howler_api-3.4.0.dev950.dist-info/METADATA,sha256=uG3saJNE8JiuNKMLd4BnqJEjLFR55w-jBcOOy6WSs6s,2879
202
+ howler_api-3.4.0.dev950.dist-info/WHEEL,sha256=EGEvSphFYqXKs23-kQBeyNoJP1nrT8ZJKQoi5p5DYL8,88
203
+ howler_api-3.4.0.dev950.dist-info/entry_points.txt,sha256=Lu9SBGvwe0wczJHmc-RudC24lmQk7tv3ZBXon9RIihg,259
204
+ howler_api-3.4.0.dev950.dist-info/RECORD,,