File size: 3,270 Bytes
dd8c8ac
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a6511ad
dd8c8ac
 
 
 
 
 
 
a6511ad
dd8c8ac
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
"""
Configuration module for DGaze Gradio application.
Loads settings from environment variables and .env file.
"""

import os
import sys
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()

class Settings:
    """Application settings loaded from environment variables."""
    
    def __init__(self):
        # Backend API Configuration - MANDATORY from .env
        self.API_BASE_URL = self._get_required_env("API_BASE_URL")
        self.API_ENDPOINT = f"{self.API_BASE_URL}/api/verify"
        self.HEALTH_ENDPOINT = f"{self.API_BASE_URL}/api/health"
        
        # Auth0 Configuration - MANDATORY for authentication
        # For Spaces deployment, these should be set as environment variables
        self.AUTH0_DOMAIN = self._get_required_env("AUTH0_DOMAIN")
        self.AUTH0_CLIENT_ID = self._get_required_env("AUTH0_CLIENT_ID")
        self.AUTH0_CLIENT_SECRET = self._get_required_env("AUTH0_CLIENT_SECRET")
        self.AUTH0_AUDIENCE = self._get_required_env("AUTH0_AUDIENCE")
        
        # Gradio Application Configuration
        self.GRADIO_SERVER_NAME = os.getenv("GRADIO_SERVER_NAME", "0.0.0.0")
        self.GRADIO_SERVER_PORT = int(os.getenv("GRADIO_SERVER_PORT", "7860"))  # Default to 7860 for Spaces
        self.GRADIO_SHARE = os.getenv("GRADIO_SHARE", "false").lower() == "true"
        
        # Health Check Configuration
        self.HEALTH_CHECK_ENABLED = os.getenv("HEALTH_CHECK_ENABLED", "true").lower() == "true"
        self.HEALTH_CHECK_INTERVAL = int(os.getenv("HEALTH_CHECK_INTERVAL", "30"))
        
        # Security
        self.SECRET_KEY = os.getenv("SECRET_KEY", "your-secret-key-for-sessions")
        
        # Logging Configuration
        self.LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO")
        self.DEBUG = os.getenv("DEBUG", "false").lower() == "true"
        
        # Rate Limiting
        self.RATE_LIMIT_ENABLED = os.getenv("RATE_LIMIT_ENABLED", "true").lower() == "true"
        self.RATE_LIMIT_REQUESTS = int(os.getenv("RATE_LIMIT_REQUESTS", "100"))
        self.RATE_LIMIT_WINDOW = int(os.getenv("RATE_LIMIT_WINDOW", "3600"))
        
        # Cache Configuration
        self.CACHE_ENABLED = os.getenv("CACHE_ENABLED", "true").lower() == "true"
        self.CACHE_TTL = int(os.getenv("CACHE_TTL", "3600"))
        
        # OAuth Configuration - Use from .env if provided, otherwise build dynamically
        self.OAUTH_REDIRECT_URI = os.getenv("AUTH0_REDIRECT_URI")
        if not self.OAUTH_REDIRECT_URI:
            self.OAUTH_REDIRECT_URI = f"http://localhost:{self.GRADIO_SERVER_PORT}/auth"
            if self.GRADIO_SERVER_NAME != "localhost" and self.GRADIO_SERVER_NAME != "127.0.0.1":
                self.OAUTH_REDIRECT_URI = f"http://{self.GRADIO_SERVER_NAME}:{self.GRADIO_SERVER_PORT}/auth"
    
    def _get_required_env(self, var_name: str) -> str:
        """Get a required environment variable or exit with error."""
        value = os.getenv(var_name)
        if not value:
            print(f"ERROR: Required environment variable '{var_name}' not found in .env file!")
            print(f"Please add '{var_name}=<your-value>' to your .env file")
            sys.exit(1)
        return value

# Create a settings instance
settings = Settings()