Files
frigate/frigate/config/proxy.py
T

62 lines
2.1 KiB
Python
Raw Normal View History

from typing import Optional
from pydantic import Field, field_validator
from .base import FrigateBaseModel
from .env import EnvString
__all__ = ["ProxyConfig", "HeaderMappingConfig"]
class HeaderMappingConfig(FrigateBaseModel):
user: str = Field(
2026-02-27 09:55:36 -06:00
default=None,
title="User header",
description="Header containing the authenticated username provided by the upstream proxy.",
)
2025-03-08 10:01:08 -06:00
role: str = Field(
default=None,
2026-02-27 09:55:36 -06:00
title="Role header",
description="Header containing the authenticated user's role or groups from the upstream proxy.",
2025-03-08 10:01:08 -06:00
)
role_map: Optional[dict[str, list[str]]] = Field(
default_factory=dict,
2026-02-27 09:55:36 -06:00
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,
2026-02-27 09:55:36 -06:00
title="Header mapping",
description="Map incoming proxy headers to Frigate user and role fields for proxy-based auth.",
)
logout_url: Optional[str] = Field(
2026-02-27 09:55:36 -06:00
default=None,
title="Logout URL",
description="URL to redirect users to when logging out via the proxy.",
)
auth_secret: Optional[EnvString] = Field(
default=None,
2026-02-27 09:55:36 -06:00
title="Proxy secret",
description="Optional secret checked against the X-Proxy-Secret header to verify trusted proxies.",
)
2025-05-05 21:42:24 -05:00
default_role: Optional[str] = Field(
2026-02-27 09:55:36 -06:00
default="viewer",
title="Default role",
2026-05-31 16:09:10 -05:00
description="Default role assigned to proxy-authenticated users when no role mapping applies.",
2025-05-05 21:42:24 -05:00
)
separator: Optional[str] = Field(
default=",",
2026-02-27 09:55:36 -06:00
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