Save test environment changes
This commit is contained in:
BIN
backend/app/core/__pycache__/config.cpython-312.pyc
Executable file → Normal file
BIN
backend/app/core/__pycache__/config.cpython-312.pyc
Executable file → Normal file
Binary file not shown.
BIN
backend/app/core/__pycache__/security.cpython-312.pyc
Executable file → Normal file
BIN
backend/app/core/__pycache__/security.cpython-312.pyc
Executable file → Normal file
Binary file not shown.
@@ -1,48 +1,61 @@
|
||||
from typing import Optional
|
||||
import os
|
||||
import json
|
||||
from typing import Any, Optional, List
|
||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||
from pydantic import computed_field
|
||||
from sqlalchemy import text
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
class Settings(BaseSettings):
|
||||
# --- General ---
|
||||
PROJECT_NAME: str = "Traffic Ecosystem SuperApp"
|
||||
VERSION: str = "2.0.0"
|
||||
VERSION: str = "1.0.0"
|
||||
API_V1_STR: str = "/api/v1"
|
||||
DEBUG: bool = False
|
||||
DEBUG: bool = os.getenv("DEBUG", "False").lower() == "true"
|
||||
|
||||
# --- Security / JWT ---
|
||||
SECRET_KEY: str
|
||||
# Szigorúan .env-ből!
|
||||
SECRET_KEY: str = os.getenv("SECRET_KEY", "NOT_SET_DANGER")
|
||||
ALGORITHM: str = "HS256"
|
||||
ACCESS_TOKEN_EXPIRE_MINUTES: int = 60
|
||||
ACCESS_TOKEN_EXPIRE_MINUTES: int = 60 * 24 * 7 # 7 nap
|
||||
|
||||
# --- Password policy (TEST -> laza, PROD -> szigorú) ---
|
||||
PASSWORD_MIN_LENGTH: int = 4 # TESZT: 4, ÉLES: 10-12
|
||||
# --- Database & Cache ---
|
||||
DATABASE_URL: str = os.getenv("DATABASE_URL")
|
||||
REDIS_URL: str = os.getenv("REDIS_URL", "redis://service_finder_redis:6379/0")
|
||||
|
||||
# --- Database ---
|
||||
DATABASE_URL: str # már nálad compose-ban meg van adva
|
||||
|
||||
# --- Redis ---
|
||||
REDIS_URL: str = "redis://service_finder_redis:6379/0"
|
||||
|
||||
# --- Email sending ---
|
||||
# auto = ha van SENDGRID_API_KEY -> sendgrid api, különben smtp
|
||||
EMAIL_PROVIDER: str = "auto" # auto | sendgrid | smtp | disabled
|
||||
|
||||
EMAILS_FROM_EMAIL: str = "info@profibot.hu"
|
||||
# --- Email (Auto Provider) ---
|
||||
EMAIL_PROVIDER: str = os.getenv("EMAIL_PROVIDER", "auto")
|
||||
EMAILS_FROM_EMAIL: str = os.getenv("EMAILS_FROM_EMAIL", "info@profibot.hu")
|
||||
EMAILS_FROM_NAME: str = "Profibot"
|
||||
|
||||
# SMTP & SendGrid (Szigorúan .env-ből)
|
||||
SENDGRID_API_KEY: Optional[str] = os.getenv("SENDGRID_API_KEY")
|
||||
SMTP_HOST: Optional[str] = os.getenv("SMTP_HOST")
|
||||
SMTP_PORT: int = int(os.getenv("SMTP_PORT", 587))
|
||||
SMTP_USER: Optional[str] = os.getenv("SMTP_USER")
|
||||
SMTP_PASSWORD: Optional[str] = os.getenv("SMTP_PASSWORD")
|
||||
|
||||
# SendGrid API
|
||||
SENDGRID_API_KEY: Optional[str] = None
|
||||
# --- External URLs ---
|
||||
# .env-ben legyen átírva a .10-es IP-re!
|
||||
FRONTEND_BASE_URL: str = os.getenv("FRONTEND_BASE_URL", "http://localhost:3000")
|
||||
|
||||
# SMTP fallback (pl. Gmail App Password vagy más szolgáltató)
|
||||
SMTP_HOST: Optional[str] = None
|
||||
SMTP_PORT: int = 587
|
||||
SMTP_USER: Optional[str] = None
|
||||
SMTP_PASSWORD: Optional[str] = None
|
||||
SMTP_USE_TLS: bool = True
|
||||
|
||||
# Frontend base URL a linkekhez (később NPM/domain)
|
||||
FRONTEND_BASE_URL: str = "http://192.168.100.43:3000"
|
||||
# --- Dinamikus Admin Motor ---
|
||||
async def get_db_setting(self, db: AsyncSession, key_name: str, default: Any = None) -> Any:
|
||||
"""
|
||||
Lekéri a paramétert a data.system_settings táblából.
|
||||
Ezzel érjük el, hogy a kód újraírása nélkül, adminból lehessen
|
||||
állítani a jutalom napokat, százalékokat, stb.
|
||||
"""
|
||||
try:
|
||||
query = text("SELECT value_json FROM data.system_settings WHERE key_name = :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:
|
||||
return default
|
||||
|
||||
# .env fájl konfigurációja
|
||||
model_config = SettingsConfigDict(
|
||||
env_file=".env",
|
||||
env_file_encoding="utf-8",
|
||||
@@ -50,4 +63,4 @@ class Settings(BaseSettings):
|
||||
extra="ignore"
|
||||
)
|
||||
|
||||
settings = Settings()
|
||||
settings = Settings()
|
||||
@@ -6,28 +6,44 @@ from jose import jwt, JWTError
|
||||
|
||||
from app.core.config import settings
|
||||
|
||||
# --- JELSZÓ ---
|
||||
# --- JELSZÓ KEZELÉS ---
|
||||
|
||||
def verify_password(plain_password: str, hashed_password: str) -> bool:
|
||||
"""
|
||||
Összehasonlítja a nyers jelszót a hash-elt változattal.
|
||||
"""
|
||||
try:
|
||||
if not hashed_password:
|
||||
return False
|
||||
return bcrypt.checkpw(
|
||||
plain_password.encode("utf-8"),
|
||||
hashed_password.encode("utf-8"),
|
||||
hashed_password.encode("utf-8")
|
||||
)
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
def get_password_hash(password: str) -> str:
|
||||
"""
|
||||
Biztonságos hash-t generál a jelszóból.
|
||||
"""
|
||||
salt = bcrypt.gensalt()
|
||||
return bcrypt.hashpw(password.encode("utf-8"), salt).decode("utf-8")
|
||||
|
||||
# --- JWT ---
|
||||
# --- JWT TOKEN KEZELÉS ---
|
||||
|
||||
def create_access_token(data: Dict[str, Any], expires_delta: Optional[timedelta] = None) -> str:
|
||||
"""
|
||||
JWT Access tokent generál a megadott adatokkal és lejárati idővel.
|
||||
"""
|
||||
to_encode = dict(data)
|
||||
expire = datetime.now(timezone.utc) + (expires_delta or timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES))
|
||||
expire = datetime.now(timezone.utc) + (
|
||||
expires_delta or timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES)
|
||||
)
|
||||
to_encode.update({"exp": expire})
|
||||
return jwt.encode(to_encode, settings.SECRET_KEY, algorithm=settings.ALGORITHM)
|
||||
|
||||
def decode_token(token: str) -> Dict[str, Any]:
|
||||
return jwt.decode(token, settings.SECRET_KEY, algorithms=[settings.ALGORITHM])
|
||||
"""
|
||||
Dekódolja a JWT tokent.
|
||||
"""
|
||||
return jwt.decode(token, settings.SECRET_KEY, algorithms=[settings.ALGORITHM])
|
||||
Reference in New Issue
Block a user