""" Fingerprint Service Interface - Domain Service für Browser Fingerprinting """ from abc import ABC, abstractmethod from typing import List, Optional, Dict, Any from datetime import datetime from domain.entities.browser_fingerprint import BrowserFingerprint class IFingerprintService(ABC): """ Interface für Fingerprint Service. Definiert die Geschäftslogik für Browser Fingerprint Management. """ @abstractmethod def generate_fingerprint(self, profile_type: Optional[str] = None, platform: Optional[str] = None) -> BrowserFingerprint: """ Generiert einen neuen, realistischen Browser-Fingerprint. Args: profile_type: Optional - Typ des Profils (z.B. "mobile", "desktop") platform: Optional - Zielplattform (z.B. "instagram", "tiktok") Returns: Neuer Browser-Fingerprint """ pass @abstractmethod def rotate_fingerprint(self, current: BrowserFingerprint, rotation_strategy: str = "gradual") -> BrowserFingerprint: """ Rotiert einen bestehenden Fingerprint für mehr Anonymität. Args: current: Aktueller Fingerprint rotation_strategy: Strategie für Rotation ("gradual", "complete", "minimal") Returns: Neuer rotierter Fingerprint """ pass @abstractmethod def validate_fingerprint(self, fingerprint: BrowserFingerprint) -> tuple[bool, List[str]]: """ Validiert einen Fingerprint auf Konsistenz und Realismus. Args: fingerprint: Zu validierender Fingerprint Returns: Tuple aus (ist_valide, liste_von_problemen) """ pass @abstractmethod def save_fingerprint(self, fingerprint: BrowserFingerprint) -> None: """ Speichert einen Fingerprint für spätere Verwendung. Args: fingerprint: Zu speichernder Fingerprint """ pass @abstractmethod def load_fingerprint(self, fingerprint_id: str) -> Optional[BrowserFingerprint]: """ Lädt einen gespeicherten Fingerprint. Args: fingerprint_id: ID des Fingerprints Returns: Fingerprint oder None wenn nicht gefunden """ pass @abstractmethod def get_fingerprint_pool(self, count: int = 10, platform: Optional[str] = None) -> List[BrowserFingerprint]: """ Holt einen Pool von Fingerprints für Rotation. Args: count: Anzahl der gewünschten Fingerprints platform: Optional - Filter für spezifische Plattform Returns: Liste von Fingerprints """ pass @abstractmethod def apply_fingerprint(self, browser_context: Any, fingerprint: BrowserFingerprint) -> None: """ Wendet einen Fingerprint auf einen Browser-Kontext an. Args: browser_context: Playwright Browser Context fingerprint: Anzuwendender Fingerprint """ pass @abstractmethod def detect_fingerprinting(self, page_content: str) -> Dict[str, Any]: """ Erkennt Fingerprinting-Versuche auf einer Webseite. Args: page_content: HTML oder JavaScript Content der Seite Returns: Dictionary mit erkannten Fingerprinting-Techniken """ pass @abstractmethod def get_fingerprint_score(self, fingerprint: BrowserFingerprint) -> float: """ Bewertet die Qualität/Einzigartigkeit eines Fingerprints. Args: fingerprint: Zu bewertender Fingerprint Returns: Score zwischen 0.0 (schlecht) und 1.0 (gut) """ pass @abstractmethod def cleanup_old_fingerprints(self, older_than: datetime) -> int: """ Bereinigt alte, nicht mehr verwendete Fingerprints. Args: older_than: Lösche Fingerprints älter als dieses Datum Returns: Anzahl gelöschter Fingerprints """ pass