feat(config): JWT + ACS + admin initial vars for Phase 3
Replace old JWT_SECRET/JWT_REFRESH_SECRET scalar vars with flask-jwt-extended compatible timedelta-based JWT_ACCESS_TOKEN_EXPIRES / JWT_REFRESH_TOKEN_EXPIRES, and add ACS connection settings and ADMIN_EMAIL/ADMIN_PASSWORD bootstrap vars. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
fddf2d4636
commit
6a31af082d
|
|
@ -4,6 +4,7 @@ Loads config uniformly from the .env file at the project root
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
from datetime import timedelta
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
# Load the .env file from the project root
|
# Load the .env file from the project root
|
||||||
|
|
@ -62,7 +63,10 @@ class Config:
|
||||||
|
|
||||||
# File upload settings
|
# File upload settings
|
||||||
MAX_CONTENT_LENGTH = 50 * 1024 * 1024 # 50MB
|
MAX_CONTENT_LENGTH = 50 * 1024 * 1024 # 50MB
|
||||||
UPLOAD_FOLDER = os.path.join(os.path.dirname(__file__), '../uploads')
|
UPLOAD_FOLDER = os.environ.get(
|
||||||
|
'UPLOAD_FOLDER',
|
||||||
|
os.path.join(os.path.dirname(__file__), '../uploads')
|
||||||
|
)
|
||||||
ALLOWED_EXTENSIONS = {'pdf', 'md', 'txt', 'markdown'}
|
ALLOWED_EXTENSIONS = {'pdf', 'md', 'txt', 'markdown'}
|
||||||
|
|
||||||
# Text processing settings
|
# Text processing settings
|
||||||
|
|
@ -75,7 +79,10 @@ class Config:
|
||||||
|
|
||||||
# OASIS simulation settings
|
# OASIS simulation settings
|
||||||
OASIS_DEFAULT_MAX_ROUNDS = int(os.environ.get('OASIS_DEFAULT_MAX_ROUNDS', '10'))
|
OASIS_DEFAULT_MAX_ROUNDS = int(os.environ.get('OASIS_DEFAULT_MAX_ROUNDS', '10'))
|
||||||
OASIS_SIMULATION_DATA_DIR = os.path.join(os.path.dirname(__file__), '../uploads/simulations')
|
OASIS_SIMULATION_DATA_DIR = os.environ.get(
|
||||||
|
'OASIS_SIMULATION_DATA_DIR',
|
||||||
|
os.path.join(os.path.dirname(__file__), '../uploads/simulations')
|
||||||
|
)
|
||||||
|
|
||||||
# OASIS platform available actions
|
# OASIS platform available actions
|
||||||
OASIS_TWITTER_ACTIONS = [
|
OASIS_TWITTER_ACTIONS = [
|
||||||
|
|
@ -105,11 +112,27 @@ class Config:
|
||||||
AZURE_STORAGE_CONNECTION_STRING = os.environ.get('AZURE_STORAGE_CONNECTION_STRING', '')
|
AZURE_STORAGE_CONNECTION_STRING = os.environ.get('AZURE_STORAGE_CONNECTION_STRING', '')
|
||||||
AZURE_STORAGE_CONTAINER = os.environ.get('AZURE_STORAGE_CONTAINER', 'mirofish')
|
AZURE_STORAGE_CONTAINER = os.environ.get('AZURE_STORAGE_CONTAINER', 'mirofish')
|
||||||
|
|
||||||
# JWT (per a la Fase 2 d'autenticació — definits aquí perquè flask-jwt-extended els necessita en create_app)
|
# Auth JWT (flask-jwt-extended)
|
||||||
JWT_SECRET_KEY = os.environ.get('JWT_SECRET', 'change-me-in-production')
|
JWT_SECRET_KEY = os.environ.get('JWT_SECRET_KEY', 'change-me-in-production')
|
||||||
JWT_REFRESH_SECRET_KEY = os.environ.get('JWT_REFRESH_SECRET', 'change-me-refresh-in-production')
|
JWT_ACCESS_TOKEN_EXPIRES = timedelta(
|
||||||
JWT_ACCESS_TOKEN_EXPIRES_HOURS = int(os.environ.get('JWT_ACCESS_TOKEN_EXPIRES_HOURS', '8'))
|
seconds=int(os.environ.get('JWT_ACCESS_TOKEN_EXPIRES', '28800')) # 8h
|
||||||
JWT_REFRESH_TOKEN_EXPIRES_DAYS = int(os.environ.get('JWT_REFRESH_TOKEN_EXPIRES_DAYS', '7'))
|
)
|
||||||
|
JWT_REFRESH_TOKEN_EXPIRES = timedelta(
|
||||||
|
seconds=int(os.environ.get('JWT_REFRESH_TOKEN_EXPIRES', '604800')) # 7d
|
||||||
|
)
|
||||||
|
JWT_COOKIE_SECURE = os.environ.get('FLASK_DEBUG', 'True').lower() != 'true'
|
||||||
|
JWT_COOKIE_CSRF_PROTECT = False
|
||||||
|
JWT_REFRESH_COOKIE_PATH = '/api/auth/refresh'
|
||||||
|
|
||||||
|
# Admin inicial (per init_system.py)
|
||||||
|
ADMIN_EMAIL = os.environ.get('ADMIN_EMAIL', '')
|
||||||
|
ADMIN_PASSWORD = os.environ.get('ADMIN_PASSWORD', '')
|
||||||
|
|
||||||
|
# Azure Communication Services
|
||||||
|
ACS_CONNECTION_STRING = os.environ.get('ACS_CONNECTION_STRING', '')
|
||||||
|
ACS_SENDER_ADDRESS = os.environ.get('ACS_SENDER_ADDRESS', 'donotreply@mirofish.local')
|
||||||
|
ACS_INVITATION_TTL_HOURS = int(os.environ.get('ACS_INVITATION_TTL_HOURS', '48'))
|
||||||
|
ACS_RESET_PASSWORD_TTL_HOURS = int(os.environ.get('ACS_RESET_PASSWORD_TTL_HOURS', '1'))
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_graph_config_errors(cls) -> list:
|
def get_graph_config_errors(cls) -> list:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue