mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-20 13:54:36 +01:00
* improve chip tooltip display - use formatList to use i18n separators instead of commas - ensure the correct event type is used so sublabels are not run through normalization - remove smart-capitalization classes as translated labels use i18n (which includes capitalization) - give icons an optional key so that the console doesn't complain about duplication when rendering * Add grace period for recording segment checks to prevent spurious ffmpeg restarts * add admin precedence to proxy role_map resolution to prevent downgrade * clean up * formatting * work around radix pointer events issue when dialog is opened from drawer fixes https://github.com/blakeblackshear/frigate/discussions/21940 * prevent console warnings about missing titles and descriptions make these invisible with sr-only * remove duplicate language * Adjust handling for device sizes * Cleanup --------- Co-authored-by: Nicolas Mowen <nickmowen213@gmail.com>
94 lines
3.6 KiB
Python
94 lines
3.6 KiB
Python
import unittest
|
|
|
|
from frigate.api.auth import resolve_role
|
|
from frigate.config import HeaderMappingConfig, ProxyConfig
|
|
|
|
|
|
class TestProxyRoleResolution(unittest.TestCase):
|
|
def setUp(self):
|
|
self.proxy_config = ProxyConfig(
|
|
auth_secret=None,
|
|
default_role="viewer",
|
|
separator="|",
|
|
header_map=HeaderMappingConfig(
|
|
user="x-remote-user",
|
|
role="x-remote-role",
|
|
role_map={
|
|
"admin": ["group_admin"],
|
|
"viewer": ["group_viewer"],
|
|
},
|
|
),
|
|
)
|
|
self.config_roles = list(["admin", "viewer"])
|
|
|
|
def test_role_map_single_group_match(self):
|
|
headers = {"x-remote-role": "group_admin"}
|
|
role = resolve_role(headers, self.proxy_config, self.config_roles)
|
|
self.assertEqual(role, "admin")
|
|
|
|
def test_role_map_multiple_groups(self):
|
|
headers = {"x-remote-role": "group_admin|group_viewer"}
|
|
role = resolve_role(headers, self.proxy_config, self.config_roles)
|
|
self.assertEqual(role, "admin")
|
|
|
|
def test_role_map_or_matching(self):
|
|
config = self.proxy_config
|
|
config.header_map.role_map = {
|
|
"admin": ["group_admin", "group_privileged"],
|
|
}
|
|
|
|
# OR semantics: a single matching group should map to the role
|
|
headers = {"x-remote-role": "group_admin"}
|
|
role = resolve_role(headers, config, self.config_roles)
|
|
self.assertEqual(role, "admin")
|
|
|
|
headers = {"x-remote-role": "group_admin|group_privileged"}
|
|
role = resolve_role(headers, config, self.config_roles)
|
|
self.assertEqual(role, "admin")
|
|
|
|
def test_direct_role_header_with_separator(self):
|
|
config = self.proxy_config
|
|
config.header_map.role_map = None # disable role_map
|
|
headers = {"x-remote-role": "admin|viewer"}
|
|
role = resolve_role(headers, config, self.config_roles)
|
|
self.assertEqual(role, "admin")
|
|
|
|
def test_invalid_role_header(self):
|
|
config = self.proxy_config
|
|
config.header_map.role_map = None
|
|
headers = {"x-remote-role": "notarole"}
|
|
role = resolve_role(headers, config, self.config_roles)
|
|
self.assertEqual(role, config.default_role)
|
|
|
|
def test_missing_role_header(self):
|
|
headers = {}
|
|
role = resolve_role(headers, self.proxy_config, self.config_roles)
|
|
self.assertEqual(role, self.proxy_config.default_role)
|
|
|
|
def test_empty_role_header(self):
|
|
headers = {"x-remote-role": ""}
|
|
role = resolve_role(headers, self.proxy_config, self.config_roles)
|
|
self.assertEqual(role, self.proxy_config.default_role)
|
|
|
|
def test_whitespace_groups(self):
|
|
headers = {"x-remote-role": " | group_admin | "}
|
|
role = resolve_role(headers, self.proxy_config, self.config_roles)
|
|
self.assertEqual(role, "admin")
|
|
|
|
def test_mixed_valid_and_invalid_groups(self):
|
|
headers = {"x-remote-role": "bogus|group_viewer"}
|
|
role = resolve_role(headers, self.proxy_config, self.config_roles)
|
|
self.assertEqual(role, "viewer")
|
|
|
|
def test_case_insensitive_role_direct(self):
|
|
config = self.proxy_config
|
|
config.header_map.role_map = None
|
|
headers = {"x-remote-role": "AdMiN"}
|
|
role = resolve_role(headers, config, self.config_roles)
|
|
self.assertEqual(role, "admin")
|
|
|
|
def test_role_map_no_match_falls_back(self):
|
|
headers = {"x-remote-role": "group_unknown"}
|
|
role = resolve_role(headers, self.proxy_config, self.config_roles)
|
|
self.assertEqual(role, self.proxy_config.default_role)
|