From 69aaf1f8e65c4797209bbbe2c37593d3563ac67f Mon Sep 17 00:00:00 2001 From: Blake Blackshear Date: Wed, 2 Feb 2022 07:21:03 -0600 Subject: [PATCH] require url safe camera names --- frigate/config.py | 2 +- frigate/test/test_config.py | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/frigate/config.py b/frigate/config.py index a78c0f3a5..71cf27c9e 100644 --- a/frigate/config.py +++ b/frigate/config.py @@ -473,7 +473,7 @@ class CameraLiveConfig(FrigateBaseModel): class CameraConfig(FrigateBaseModel): - name: Optional[str] = Field(title="Camera name.") + name: Optional[str] = Field(title="Camera name.", regex="^[a-zA-Z0-9_]+$") ffmpeg: CameraFfmpegConfig = Field(title="FFmpeg configuration for the camera.") best_image_timeout: int = Field( default=60, diff --git a/frigate/test/test_config.py b/frigate/test/test_config.py index 76325385f..0052c6f28 100644 --- a/frigate/test/test_config.py +++ b/frigate/test/test_config.py @@ -1244,6 +1244,30 @@ class TestConfig(unittest.TestCase): runtime_config = frigate_config.runtime_config assert runtime_config.cameras["back"].snapshots.retain.default == 1.5 + def test_fails_on_bad_camera_name(self): + config = { + "mqtt": {"host": "mqtt"}, + "snapshots": {"retain": {"default": 1.5}}, + "cameras": { + "back camer#": { + "ffmpeg": { + "inputs": [ + { + "path": "rtsp://10.0.0.1:554/video", + "roles": ["detect"], + }, + ] + }, + } + }, + } + + frigate_config = FrigateConfig(**config) + + self.assertRaises( + ValidationError, lambda: frigate_config.runtime_config.cameras + ) + if __name__ == "__main__": unittest.main(verbosity=2)