|
1 | 1 | from functools import lru_cache |
2 | 2 | from typing import Optional |
3 | 3 |
|
4 | | -from pydantic import Field |
| 4 | +from pydantic import Field, field_validator |
5 | 5 | from pydantic_settings import BaseSettings, SettingsConfigDict |
6 | 6 |
|
7 | 7 | class Settings(BaseSettings): |
@@ -35,16 +35,23 @@ class Settings(BaseSettings): |
35 | 35 | REPORT_CACHE_MINUTES: int = 60 |
36 | 36 | SHUTDOWN_TIMEOUT_SECONDS: int = 30 |
37 | 37 |
|
38 | | - SERVICE_API_KEY: str = "default_service_secret_change_me" |
39 | | - ADMIN_API_KEY: str = "default_admin_secret_change_me" |
| 38 | + SERVICE_API_KEY: str = Field(...) |
| 39 | + ADMIN_API_KEY: str = Field(...) |
| 40 | + |
| 41 | + @field_validator("SERVICE_API_KEY", "ADMIN_API_KEY") |
| 42 | + @classmethod |
| 43 | + def validate_api_keys(cls, v: str, info) -> str: |
| 44 | + forbidden = {"default_service_secret_change_me", "default_admin_secret_change_me"} |
| 45 | + if v in forbidden or len(v) < 32: |
| 46 | + raise ValueError( |
| 47 | + f"{info.field_name} must be at least 32 characters and must not use a default value" |
| 48 | + ) |
| 49 | + return v |
40 | 50 | KNOWN_LOCATIONS: str = ( |
41 | 51 | "lagos,abuja,port harcourt,kano,ibadan,benin,kaduna,jos,enugu,calabar," |
42 | 52 | "owerri,warri,uyo,akure,ilorin,sokoto,zaria,maiduguri,asaba,nnewi" |
43 | 53 | ) |
44 | 54 |
|
45 | | -settings = Settings() |
46 | | - |
47 | | - |
48 | 55 | @lru_cache |
49 | 56 | def get_settings() -> Settings: |
50 | 57 | return Settings() |
0 commit comments