diff --git a/mealie/core/settings/db_providers.py b/mealie/core/settings/db_providers.py index fff25bdcc14a..9cd1a5aea101 100644 --- a/mealie/core/settings/db_providers.py +++ b/mealie/core/settings/db_providers.py @@ -1,5 +1,6 @@ from abc import ABC, abstractmethod from pathlib import Path +from urllib import parse as urlparse from pydantic import BaseModel, PostgresDsn from pydantic_settings import BaseSettings, SettingsConfigDict @@ -48,7 +49,7 @@ class PostgresProvider(AbstractDBProvider, BaseSettings): PostgresDsn.build( scheme="postgresql", username=self.POSTGRES_USER, - password=self.POSTGRES_PASSWORD, + password=urlparse.quote_plus(self.POSTGRES_PASSWORD), host=host, path=f"{self.POSTGRES_DB or ''}", ) diff --git a/tests/unit_tests/test_config.py b/tests/unit_tests/test_config.py index 3d7a17205f52..552733757c1c 100644 --- a/tests/unit_tests/test_config.py +++ b/tests/unit_tests/test_config.py @@ -38,6 +38,15 @@ def test_pg_connection_args(monkeypatch): assert app_settings.DB_URL == "postgresql://mealie:mealie@postgres:5432/mealie" +def test_pg_connection_url_encode_password(monkeypatch): + monkeypatch.setenv("DB_ENGINE", "postgres") + monkeypatch.setenv("POSTGRES_SERVER", "postgres") + monkeypatch.setenv("POSTGRES_PASSWORD", "please,url#encode/this?password") + get_app_settings.cache_clear() + app_settings = get_app_settings() + assert app_settings.DB_URL == "postgresql://mealie:please%2Curl%23encode%2Fthis%3Fpassword@postgres:5432/mealie" + + @dataclass(slots=True) class SMTPValidationCase: host: str