diff --git a/frigate/test/test_camera_pw_clean.py b/frigate/test/test_camera_pw.py similarity index 51% rename from frigate/test/test_camera_pw_clean.py rename to frigate/test/test_camera_pw.py index f7c273d34..37ce2fa86 100644 --- a/frigate/test/test_camera_pw_clean.py +++ b/frigate/test/test_camera_pw.py @@ -2,12 +2,13 @@ import unittest -from frigate.util import clean_camera_user_pass +from frigate.util import clean_camera_user_pass, escape_special_characters class TestUserPassCleanup(unittest.TestCase): def setUp(self) -> None: self.rtsp_with_pass = "rtsp://user:password@192.168.0.2:554/live" + self.rtsp_with_special_pass = "rtsp://user:password#$@@192.168.0.2:554/live" self.rtsp_no_pass = "rtsp://192.168.0.3:554/live" def test_cleanup(self): @@ -20,3 +21,13 @@ class TestUserPassCleanup(unittest.TestCase): """Test that nothing changes when no user / pass are defined.""" clean = clean_camera_user_pass(self.rtsp_no_pass) assert clean == self.rtsp_no_pass + + def test_special_char_password(self): + """Test that special characters in pw are escaped, but not others.""" + escaped = escape_special_characters(self.rtsp_with_special_pass) + assert escaped == "rtsp://user:password%23%24%40@192.168.0.2:554/live" + + def test_no_special_char_password(self): + """Test that no change is made to path with no special characters.""" + escaped = escape_special_characters(self.rtsp_with_pass) + assert escaped == self.rtsp_with_pass diff --git a/frigate/util.py b/frigate/util.py index 294e3b8dc..b6c7b9880 100755 --- a/frigate/util.py +++ b/frigate/util.py @@ -633,7 +633,6 @@ def escape_special_characters(path: str) -> str: try: found = re.search(REGEX_CAMERA_USER_PASS, path).group(0)[:-1] pw = found[(found.index(":") + 1) :] - logger.error(f"Found {found} and pw {pw}") return path.replace(pw, urllib.parse.quote_plus(pw)) except AttributeError: # path does not have user:pass