mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-07-28 06:39:01 +03:00
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
* 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
60 lines
2.0 KiB
Python
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
|