97 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""
 | 
						|
Configuration management for DNSRecon tool.
 | 
						|
Handles API key storage, rate limiting, and default settings.
 | 
						|
"""
 | 
						|
 | 
						|
import os
 | 
						|
from typing import Dict, Optional
 | 
						|
from dotenv import load_dotenv
 | 
						|
 | 
						|
# Load environment variables from .env file
 | 
						|
load_dotenv()
 | 
						|
 | 
						|
class Config:
 | 
						|
    """Configuration manager for DNSRecon application."""
 | 
						|
    
 | 
						|
    def __init__(self):
 | 
						|
        """Initialize configuration with default values."""
 | 
						|
        self.api_keys: Dict[str, Optional[str]] = {}
 | 
						|
        
 | 
						|
        # --- General Settings ---
 | 
						|
        self.default_recursion_depth = 2
 | 
						|
        self.default_timeout = 10
 | 
						|
        self.max_concurrent_requests = 5
 | 
						|
        self.large_entity_threshold = 100
 | 
						|
        self.max_retries_per_target = 3
 | 
						|
        self.cache_expiry_hours = 12
 | 
						|
        
 | 
						|
        # --- Rate Limiting (requests per minute) ---
 | 
						|
        self.rate_limits = {
 | 
						|
            'crtsh': 60,
 | 
						|
            'shodan': 60,
 | 
						|
            'dns': 100
 | 
						|
        }
 | 
						|
        
 | 
						|
        # --- Provider Settings ---
 | 
						|
        self.enabled_providers = {
 | 
						|
            'crtsh': True,
 | 
						|
            'dns': True,
 | 
						|
            'shodan': False
 | 
						|
        }
 | 
						|
        
 | 
						|
        # --- Logging ---
 | 
						|
        self.log_level = 'INFO'
 | 
						|
        self.log_format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
 | 
						|
        
 | 
						|
        # --- Flask & Session Settings ---
 | 
						|
        self.flask_host = '127.0.0.1'
 | 
						|
        self.flask_port = 5000
 | 
						|
        self.flask_debug = True
 | 
						|
        self.flask_secret_key = 'default-secret-key-change-me'
 | 
						|
        self.flask_permanent_session_lifetime_hours = 2
 | 
						|
        self.session_timeout_minutes = 60
 | 
						|
        
 | 
						|
        # Load environment variables to override defaults
 | 
						|
        self.load_from_env()
 | 
						|
        
 | 
						|
    def load_from_env(self):
 | 
						|
        """Load configuration from environment variables."""
 | 
						|
        self.set_api_key('shodan', os.getenv('SHODAN_API_KEY'))
 | 
						|
 | 
						|
        # Override settings from environment
 | 
						|
        self.default_recursion_depth = int(os.getenv('DEFAULT_RECURSION_DEPTH', self.default_recursion_depth))
 | 
						|
        self.default_timeout = int(os.getenv('DEFAULT_TIMEOUT', self.default_timeout))
 | 
						|
        self.max_concurrent_requests = int(os.getenv('MAX_CONCURRENT_REQUESTS', self.max_concurrent_requests))
 | 
						|
        self.large_entity_threshold = int(os.getenv('LARGE_ENTITY_THRESHOLD', self.large_entity_threshold))
 | 
						|
        self.max_retries_per_target = int(os.getenv('MAX_RETRIES_PER_TARGET', self.max_retries_per_target))
 | 
						|
        self.cache_expiry_hours = int(os.getenv('CACHE_EXPIRY_HOURS', self.cache_expiry_hours))
 | 
						|
        
 | 
						|
        # Override Flask and session settings
 | 
						|
        self.flask_host = os.getenv('FLASK_HOST', self.flask_host)
 | 
						|
        self.flask_port = int(os.getenv('FLASK_PORT', self.flask_port))
 | 
						|
        self.flask_debug = os.getenv('FLASK_DEBUG', str(self.flask_debug)).lower() == 'true'
 | 
						|
        self.flask_secret_key = os.getenv('FLASK_SECRET_KEY', self.flask_secret_key)
 | 
						|
        self.flask_permanent_session_lifetime_hours = int(os.getenv('FLASK_PERMANENT_SESSION_LIFETIME_HOURS', self.flask_permanent_session_lifetime_hours))
 | 
						|
        self.session_timeout_minutes = int(os.getenv('SESSION_TIMEOUT_MINUTES', self.session_timeout_minutes))
 | 
						|
 | 
						|
    def set_api_key(self, provider: str, api_key: Optional[str]) -> bool:
 | 
						|
        """Set API key for a provider."""
 | 
						|
        self.api_keys[provider] = api_key
 | 
						|
        if api_key:
 | 
						|
            self.enabled_providers[provider] = True
 | 
						|
        return True
 | 
						|
    
 | 
						|
    def get_api_key(self, provider: str) -> Optional[str]:
 | 
						|
        """Get API key for a provider."""
 | 
						|
        return self.api_keys.get(provider)
 | 
						|
    
 | 
						|
    def is_provider_enabled(self, provider: str) -> bool:
 | 
						|
        """Check if a provider is enabled."""
 | 
						|
        return self.enabled_providers.get(provider, False)
 | 
						|
    
 | 
						|
    def get_rate_limit(self, provider: str) -> int:
 | 
						|
        """Get rate limit for a provider."""
 | 
						|
        return self.rate_limits.get(provider, 60)
 | 
						|
 | 
						|
# Global configuration instance
 | 
						|
config = Config() |