152 Zeilen
4.4 KiB
Python
152 Zeilen
4.4 KiB
Python
"""
|
|
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 |