full-stack-fastapi-template icon indicating copy to clipboard operation
full-stack-fastapi-template copied to clipboard

Backend & celeryworker can't handle "complex" database passwords

Open Hultner opened this issue 5 years ago • 0 comments

Using a "complex" password containing any character that needs to be quoted/encoded crashes at import of backend/app/app/core/config.py at the assembly method https://github.com/tiangolo/full-stack-fastapi-postgresql/blob/490c554e23343eec0736b06e59b2108fdd057fdc/%7B%7Bcookiecutter.project_slug%7D%7D/backend/app/app/core/config.py#L43 when building DSN.

This is easily fixable by quoting the string before creating the DSN.

I patched my own instance like this:

--- a/{{cookiecutter.project_slug}}/backend/backend/app/app/core/config.py
+++ b/{{cookiecutter.project_slug}}/backend/backend/app/app/core/config.py
@@ -1,5 +1,6 @@
 import secrets
 from typing import Any, Dict, List, Optional, Union
+from urllib.parse import quote_plus

 from pydantic import AnyHttpUrl, BaseSettings, EmailStr, HttpUrl, PostgresDsn, validator

@@ -45,8 +46,8 @@ class Settings(BaseSettings):
             return v
         return PostgresDsn.build(
             scheme="postgresql",
-            user=values.get("POSTGRES_USER"),
-            password=values.get("POSTGRES_PASSWORD"),
+            user=quote_plus(values.get("POSTGRES_USER")),
+            password=quote_plus(values.get("POSTGRES_PASSWORD")),
             host=values.get("POSTGRES_SERVER"),
             path=f"/{values.get('POSTGRES_DB') or ''}",
         )

Before this patch the backend and celeryworker wouldn't start, after applying the patch everything seems to work fine and I can log into the application via the frontend ui.

Hultner avatar Sep 15 '20 14:09 Hultner