Files
frigate/frigate/config/proxy.py
T
Nicolas MowenandGitHub 4ee12e6237
CI / AMD64 Build (push) Waiting to run
CI / ARM Build (push) Waiting to run
CI / AMD64 Extra Build (push) Blocked by required conditions
CI / ARM Extra Build (push) Blocked by required conditions
CI / Synaptics Build (push) Blocked by required conditions
CI / Assemble and push default build (push) Blocked by required conditions
CI / Jetson Jetpack 6 (push) Waiting to run
Increase ruff coverage (#23644)
* Pin ruff

* Add python upgrade fixes

This enables python upgrade checks in ruff to look for deprecated types and patterns. This namely fixes:
- usage of deprecated `Typing` which is now built in
- some specific exceptions which are caught and have new aliases

Some specific UP checks were also ignored as they are stylistic / unimportant and likely to cause bugs

* Remove async blocking calls

Use asyncio.to_thread on two remaining blocking calls to fix hanging event thread loop. Enable this specific rule to block it in the future.

* Use proper logging mechanism

* Correctly format logs

* Raise with context

When raising an exception include the from context to improve debugging

* Cleanup
2026-07-06 12:28:02 -05:00

60 lines
2.0 KiB
Python

from pydantic import Field, field_validator
from .base import FrigateBaseModel
from .env import EnvString
__all__ = ["ProxyConfig", "HeaderMappingConfig"]
class HeaderMappingConfig(FrigateBaseModel):
user: str = Field(
default=None,
title="User header",
description="Header containing the authenticated username provided by the upstream proxy.",
)
role: str = Field(
default=None,
title="Role header",
description="Header containing the authenticated user's role or groups from the upstream proxy.",
)
role_map: dict[str, list[str]] | None = Field(
default_factory=dict,
title=("Role mapping"),
description="Map upstream group values to Frigate roles (for example map admin groups to the admin role).",
)
class ProxyConfig(FrigateBaseModel):
header_map: HeaderMappingConfig = Field(
default_factory=HeaderMappingConfig,
title="Header mapping",
description="Map incoming proxy headers to Frigate user and role fields for proxy-based auth.",
)
logout_url: str | None = Field(
default=None,
title="Logout URL",
description="URL to redirect users to when logging out via the proxy.",
)
auth_secret: EnvString | None = Field(
default=None,
title="Proxy secret",
description="Optional secret checked against the X-Proxy-Secret header to verify trusted proxies.",
)
default_role: str | None = Field(
default="viewer",
title="Default role",
description="Default role assigned to proxy-authenticated users when no role mapping applies.",
)
separator: str | None = Field(
default=",",
title="Separator character",
description="Character used to split multiple values provided in proxy headers.",
)
@field_validator("separator", mode="before")
@classmethod
def validate_separator_length(cls, v):
if v is not None and len(v) != 1:
raise ValueError("Separator must be exactly one character")
return v