- Fixed a bug where missing 'id=0' in the 'cfg' table caused SMTP authentication to fail by defaulting to placeholder credentials. - Updated 'app/lib_email.py' to explicitly validate SMTP server and port settings before connecting, preventing crashes with 'please run connect() first'. - Added email fallback logic in 'app/methods/person_methods.py' to use 'user_email' or 'primary_email' if the primary contact email is missing. - Aligned 'app/config.py.default' with the production structure, explicitly re-adding 'SMTP' and 'FILES_PATH' dictionaries. - Added comprehensive unit tests in 'tests/test_email_configuration.py' to verify configuration handling.
72 lines
2.3 KiB
Plaintext
72 lines
2.3 KiB
Plaintext
# Configuration file for this FastAPI app.
|
|
import os
|
|
from pydantic import BaseSettings
|
|
from typing import Any, Dict, List, Optional, Union
|
|
|
|
class Settings(BaseSettings):
|
|
AETHER_CFG: Dict[str, Any] = {
|
|
"id": os.getenv('AE_CFG_ID', '0')
|
|
}
|
|
|
|
JWT_KEY: str = os.getenv('AE_API_JWT_KEY', 'fake-super-secret-token')
|
|
|
|
# Database Connection
|
|
DB_SERVER: str = os.getenv('AE_DB_SERVER', 'mariadb')
|
|
DB_PORT: str = os.getenv('AE_DB_PORT', '3306')
|
|
DB_NAME: str = os.getenv('AE_DB_NAME', 'aether_dev')
|
|
DB_USER: str = os.getenv('AE_DB_USERNAME', 'aether_dev')
|
|
DB_PASS: str = os.getenv('AE_DB_PASSWORD', '')
|
|
|
|
@property
|
|
def SQLALCHEMY_DB_URI(self) -> str:
|
|
return f"mysql://{self.DB_USER}:{self.DB_PASS}@{self.DB_SERVER}:{self.DB_PORT}/{self.DB_NAME}"
|
|
|
|
@property
|
|
def DB(self) -> Dict[str, Any]:
|
|
return {
|
|
"server": self.DB_SERVER,
|
|
"port": self.DB_PORT,
|
|
"name": self.DB_NAME,
|
|
"username": self.DB_USER,
|
|
"password": self.DB_PASS,
|
|
"connect_timeout": int(os.getenv('AE_DB_CONNECTION_TIMEOUT', 20)),
|
|
"pool_recycle": int(os.getenv('AE_DB_POOL_RECYCLE', 1800))
|
|
}
|
|
|
|
# Logging
|
|
LOG_PATH: Dict[str, str] = {
|
|
"app": os.getenv('AE_API_LOG_PATH', '/logs/aether_api.log')
|
|
}
|
|
|
|
# Redis
|
|
REDIS: Dict[str, str] = {
|
|
"server": os.getenv('AE_REDIS_SERVER', 'redis'),
|
|
"port": os.getenv('AE_REDIS_PORT', '6379')
|
|
}
|
|
|
|
# --- CRITICAL CONFIGURATIONS ---
|
|
# Send SMTP Email
|
|
SMTP: Dict[str, str] = {
|
|
"server": os.getenv('AE_SMTP_SERVER', ''),
|
|
"port": os.getenv('AE_SMTP_PORT', '465'),
|
|
"username": os.getenv('AE_SMTP_USERNAME', ''),
|
|
"password": os.getenv('AE_SMTP_PASSWORD', '')
|
|
}
|
|
|
|
# Server Hosted File Paths
|
|
FILES_PATH: Dict[str, str] = {
|
|
"hosted_files_root": os.getenv('AE_FILES_PATH_ROOT', '/srv/hosted_files'),
|
|
"hosted_tmp_root": os.getenv('AE_FILES_PATH_TMP', '/srv/hosted_tmp')
|
|
}
|
|
# --- END CRITICAL CONFIGURATIONS ---
|
|
|
|
# CORS
|
|
ORIGINS_REGEX: str = os.getenv('AE_API_ORIGINS_REGEX', '(https://.*\.oneskyit\.com)|(https://.*\.oneskyit\.com:4443)')
|
|
ORIGINS: List[str] = [
|
|
'https://oneskyit.com',
|
|
'http://fastapi.localhost',
|
|
'http://svelte.oneskyit.local:5555',
|
|
]
|
|
|
|
settings = Settings()
|