Baida07 commited on
Commit
5e91d63
·
1 Parent(s): 28308b6

sync: 167 file da Baida98/AI@10cc1cf7 (2026-08-22 08:20 UTC) (#53)

Browse files

- sync: 167 file da Baida98/AI@10cc1cf7 (2026-08-22 08:20 UTC) (e169361ac7aea85fe2f6b7e0a2891ee384c66f6c)

Files changed (1) hide show
  1. api/auth_guard.py +8 -4
api/auth_guard.py CHANGED
@@ -201,6 +201,7 @@ def _get_token(env_var: str) -> str:
201
 
202
  async def _resolve_role(
203
  x_internal_token: Optional[str] = Header(None, alias="X-Internal-Token"),
 
204
  x_operator_token: Optional[str] = Header(None, alias="X-Operator-Token"),
205
  x_admin_token: Optional[str] = Header(None, alias="X-Admin-Token"),
206
  ) -> AuthRole:
@@ -218,9 +219,11 @@ async def _resolve_role(
218
  logger.debug("auth: OPERATOR role granted")
219
  return AuthRole.OPERATOR
220
 
221
- # MACHINE (INTERNAL_TOKEN, già generato al boot da main.py)
222
- int_tok = _get_token("INTERNAL_TOKEN")
223
- if int_tok and x_internal_token and _sec_comp.compare_digest(x_internal_token, int_tok):
 
 
224
  logger.debug("auth: MACHINE role granted")
225
  return AuthRole.MACHINE
226
 
@@ -280,7 +283,8 @@ def require_role(min_role: AuthRole):
280
  _token_hdr = (
281
  request.headers.get('X-Admin-Token') or
282
  request.headers.get('X-Operator-Token') or
283
- request.headers.get('X-Internal-Token')
 
284
  )
285
  # GAP-AUTH-FIX: estrai IP reale (Railway/HF dietro proxy → X-Forwarded-For)
286
  _client_ip: str | None = (
 
201
 
202
  async def _resolve_role(
203
  x_internal_token: Optional[str] = Header(None, alias="X-Internal-Token"),
204
+ x_machine_token: Optional[str] = Header(None, alias="X-Machine-Token"),
205
  x_operator_token: Optional[str] = Header(None, alias="X-Operator-Token"),
206
  x_admin_token: Optional[str] = Header(None, alias="X-Admin-Token"),
207
  ) -> AuthRole:
 
219
  logger.debug("auth: OPERATOR role granted")
220
  return AuthRole.OPERATOR
221
 
222
+ # MACHINE: supporta entrambi gli header per compatibilità tra runner e backend.
223
+ # Il valore resta confrontato esclusivamente con il secret server-side.
224
+ int_tok = _get_token("INTERNAL_TOKEN") or _get_token("MACHINE_TOKEN")
225
+ machine_header = x_internal_token or x_machine_token
226
+ if int_tok and machine_header and _sec_comp.compare_digest(machine_header, int_tok):
227
  logger.debug("auth: MACHINE role granted")
228
  return AuthRole.MACHINE
229
 
 
283
  _token_hdr = (
284
  request.headers.get('X-Admin-Token') or
285
  request.headers.get('X-Operator-Token') or
286
+ request.headers.get('X-Internal-Token') or
287
+ request.headers.get('X-Machine-Token')
288
  )
289
  # GAP-AUTH-FIX: estrai IP reale (Railway/HF dietro proxy → X-Forwarded-For)
290
  _client_ip: str | None = (