Files
MileVault/backend/app/core/config.py
T
owain 3c97595093
Build and push images / validate (push) Successful in 2s
Build and push images / build-backend (push) Successful in 7s
Build and push images / build-worker (push) Successful in 6s
Build and push images / build-frontend (push) Successful in 9s
feat: persist map tile settings (provider/style/API keys) server-side on user record; unbake Thunderforest default key into backend config (THUNDERFOREST_DEFAULT_KEY) served via profile
2026-06-23 12:37:27 +01:00

46 lines
2.0 KiB
Python

from pydantic_settings import BaseSettings
from pydantic import Field
from typing import Optional
class Settings(BaseSettings):
# Database
database_url: str = Field(..., env="DATABASE_URL")
# Redis
redis_url: str = Field("redis://localhost:6379/0", env="REDIS_URL")
# Auth
secret_key: str = Field(..., env="SECRET_KEY")
algorithm: str = "HS256"
access_token_expire_minutes: int = 60 * 24 * 7 # 7 days
# Admin account
admin_username: str = Field("admin", env="ADMIN_USERNAME")
admin_password: Optional[str] = Field(None, env="ADMIN_PASSWORD")
# Base URL - used for OAuth callbacks
base_url: str = Field("https://milevault.jarrett.eu", env="BASE_URL")
# PocketID OIDC (optional)
pocketid_issuer: Optional[str] = Field(None, env="POCKETID_ISSUER")
pocketid_client_id: Optional[str] = Field(None, env="POCKETID_CLIENT_ID")
pocketid_client_secret: Optional[str] = Field(None, env="POCKETID_CLIENT_SECRET")
pocketid_allowed_group: Optional[str] = Field(None, env="POCKETID_ALLOWED_GROUP")
# Garmin Connect — how often the beat scheduler runs the automatic sync
garmin_sync_interval_minutes: int = Field(30, env="GARMIN_SYNC_INTERVAL_MINUTES")
# Strava API (optional) — register an app at https://www.strava.com/settings/api.
# The Authorization Callback Domain there must match BASE_URL's host.
strava_client_id: Optional[str] = Field(None, env="STRAVA_CLIENT_ID")
strava_client_secret: Optional[str] = Field(None, env="STRAVA_CLIENT_SECRET")
# Default Thunderforest tile API key, served to clients that haven't set
# their own (a public, client-side tile key). Override per-deployment.
thunderforest_default_key: str = Field(
"872984f587484873a74ea454662ffacb", env="THUNDERFOREST_DEFAULT_KEY"
)
# Files
file_store_path: str = Field("/data/files", env="FILE_STORE_PATH")
# Environment
environment: str = Field("production", env="ENVIRONMENT")
class Config:
env_file = ".env"
case_sensitive = False
settings = Settings()