netviz/app/config.py
2025-03-25 23:41:13 +01:00

61 lines
No EOL
2 KiB
Python

"""
Configuration settings for the NetViz application.
"""
import os
from datetime import timedelta
from dotenv import load_dotenv
# Load environment variables from .env file
load_dotenv()
class Config:
"""Base configuration class."""
# Flask
SECRET_KEY = os.environ.get("SECRET_KEY", "dev-key-not-for-production")
SECURITY_PASSWORD_SALT = os.environ.get("SECURITY_PASSWORD_SALT", "dev-salt-not-for-production")
# Database
SQLALCHEMY_DATABASE_URI = os.environ.get("DATABASE_URL", "sqlite:///netviz.db")
SQLALCHEMY_TRACK_MODIFICATIONS = False
# Session
SESSION_TYPE = os.environ.get("SESSION_TYPE", "filesystem")
SESSION_PERMANENT = True
SESSION_USE_SIGNER = True
PERMANENT_SESSION_LIFETIME = timedelta(days=1)
if SESSION_TYPE == "redis":
SESSION_REDIS = os.environ.get("SESSION_REDIS")
# Security headers
SECURE_HEADERS_ENABLED = os.environ.get("SECURE_HEADERS_ENABLED", "False").lower() == "true"
# Rate limiting
RATELIMIT_STORAGE_URL = os.environ.get("RATELIMIT_STORAGE_URL", "memory://")
RATELIMIT_DEFAULT = os.environ.get("RATELIMIT_DEFAULT", "200/day;50/hour;10/minute")
RATELIMIT_HEADERS_ENABLED = True
# Mail
MAIL_SERVER = os.environ.get("MAIL_SERVER")
MAIL_PORT = int(os.environ.get("MAIL_PORT", 587))
MAIL_USE_TLS = os.environ.get("MAIL_USE_TLS", "True").lower() == "true"
MAIL_USE_SSL = os.environ.get("MAIL_USE_SSL", "False").lower() == "true"
MAIL_USERNAME = os.environ.get("MAIL_USERNAME")
MAIL_PASSWORD = os.environ.get("MAIL_PASSWORD")
MAIL_DEFAULT_SENDER = os.environ.get("MAIL_DEFAULT_SENDER")
# Application settings
MAX_NETWORKS_PER_USER = 50
MAX_HOSTS_PER_NETWORK = 500
PASSWORD_RESET_TIMEOUT = 3600 # seconds
ACCOUNT_LOCKOUT_THRESHOLD = 5 # attempts
ACCOUNT_LOCKOUT_DURATION = 1800 # seconds
class TestConfig(Config):
"""Test configuration."""
TESTING = True
SQLALCHEMY_DATABASE_URI = "sqlite:///:memory:"
WTF_CSRF_ENABLED = False
RATELIMIT_ENABLED = False