Skip to content

Commit c2555c3

Browse files
authored
🔒️ Ensure the default values of "changethis" are not deployed (#698)
1 parent 6ed353a commit c2555c3

1 file changed

Lines changed: 23 additions & 1 deletion

File tree

backend/app/core/config.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import secrets
2+
import warnings
23
from typing import Annotated, Any, Literal
34

45
from pydantic import (
@@ -76,7 +77,7 @@ def SQLALCHEMY_DATABASE_URI(self) -> PostgresDsn:
7677
EMAILS_FROM_NAME: str | None = None
7778

7879
@model_validator(mode="after")
79-
def set_default_emails_from(self) -> Self:
80+
def _set_default_emails_from(self) -> Self:
8081
if not self.EMAILS_FROM_NAME:
8182
self.EMAILS_FROM_NAME = self.PROJECT_NAME
8283
return self
@@ -95,5 +96,26 @@ def emails_enabled(self) -> bool:
9596
FIRST_SUPERUSER_PASSWORD: str
9697
USERS_OPEN_REGISTRATION: bool = False
9798

99+
def _check_default_secret(self, var_name: str, value: str | None) -> None:
100+
if value == "changethis":
101+
message = (
102+
f'The value of {var_name} is "changethis", '
103+
"for security, please change it, at least for deployments."
104+
)
105+
if self.ENVIRONMENT == "local":
106+
warnings.warn(message, stacklevel=1)
107+
else:
108+
raise ValueError(message)
109+
110+
@model_validator(mode="after")
111+
def _enforce_non_default_secrets(self) -> Self:
112+
self._check_default_secret("SECRET_KEY", self.SECRET_KEY)
113+
self._check_default_secret("POSTGRES_PASSWORD", self.POSTGRES_PASSWORD)
114+
self._check_default_secret(
115+
"FIRST_SUPERUSER_PASSWORD", self.FIRST_SUPERUSER_PASSWORD
116+
)
117+
118+
return self
119+
98120

99121
settings = Settings() # type: ignore

0 commit comments

Comments
 (0)