81 lines
2.7 KiB
Python
Executable File
81 lines
2.7 KiB
Python
Executable File
import os
|
|
from pathlib import Path
|
|
from typing import Any, Optional
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
from sqlalchemy import text
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
class Settings(BaseSettings):
|
|
# --- Paths ---
|
|
BASE_DIR: Path = Path(__file__).resolve().parent.parent.parent
|
|
STATIC_DIR: str = os.path.join(str(BASE_DIR), "static")
|
|
|
|
# --- General ---
|
|
PROJECT_NAME: str = "Service Finder Ecosystem"
|
|
VERSION: str = "2.1.0"
|
|
API_V1_STR: str = "/api/v1"
|
|
DEBUG: bool = False
|
|
|
|
# --- Security / JWT ---
|
|
SECRET_KEY: str = "NOT_SET_DANGER"
|
|
ALGORITHM: str = "HS256"
|
|
ACCESS_TOKEN_EXPIRE_MINUTES: int = 30
|
|
REFRESH_TOKEN_EXPIRE_DAYS: int = 7
|
|
|
|
# --- Initial Admin ---
|
|
INITIAL_ADMIN_EMAIL: str = "admin@servicefinder.hu"
|
|
INITIAL_ADMIN_PASSWORD: str = "Admin123!"
|
|
|
|
# --- Database & Cache ---
|
|
DATABASE_URL: str
|
|
REDIS_URL: str = "redis://service_finder_redis:6379/0"
|
|
|
|
# --- Email ---
|
|
EMAIL_PROVIDER: str = "auto"
|
|
EMAILS_FROM_EMAIL: str = "info@profibot.hu"
|
|
EMAILS_FROM_NAME: str = "Profibot"
|
|
|
|
SENDGRID_API_KEY: Optional[str] = None
|
|
SMTP_HOST: Optional[str] = None
|
|
SMTP_PORT: int = 587
|
|
SMTP_USER: Optional[str] = None
|
|
SMTP_PASSWORD: Optional[str] = None
|
|
|
|
# --- External URLs ---
|
|
FRONTEND_BASE_URL: str = "https://dev.profibot.hu"
|
|
|
|
# --- Google OAuth ---
|
|
GOOGLE_CLIENT_ID: str = ""
|
|
GOOGLE_CLIENT_SECRET: str = ""
|
|
GOOGLE_CALLBACK_URL: str = "https://dev.profibot.hu/api/v1/auth/callback/google"
|
|
|
|
# --- Brute-Force & Security ---
|
|
LOGIN_RATE_LIMIT_ANON: str = "5/minute"
|
|
AUTH_MIN_PASSWORD_LENGTH: int = 8
|
|
|
|
# --- Dinamikus Admin Motor (Javított) ---
|
|
async def get_db_setting(self, db: AsyncSession, key_name: str, default: Any = None) -> Any:
|
|
"""
|
|
Lekér egy beállítást a data.system_parameters táblából.
|
|
Ha a tábla még nem létezik (migráció előtt), elkapja a hibát és default-ot ad.
|
|
"""
|
|
try:
|
|
# A lekérdezés a system_parameters táblát és a 'key' mezőt használja
|
|
query = text("SELECT value FROM data.system_parameters WHERE key = :key")
|
|
result = await db.execute(query, {"key": key_name})
|
|
row = result.fetchone()
|
|
if row and row[0] is not None:
|
|
return row[0]
|
|
return default
|
|
except Exception:
|
|
# Adatbázis hiba vagy hiányzó tábla esetén fallback az alapértelmezett értékre
|
|
return default
|
|
|
|
model_config = SettingsConfigDict(
|
|
env_file=".env",
|
|
env_file_encoding="utf-8",
|
|
case_sensitive=True,
|
|
extra="ignore"
|
|
)
|
|
|
|
settings = Settings() |