44 Zeilen
1.5 KiB
Python
44 Zeilen
1.5 KiB
Python
"""
|
|
Login Credentials Value Object - Repräsentiert Login-Daten mit Session-Status
|
|
"""
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Optional
|
|
from datetime import datetime
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class LoginCredentials:
|
|
"""Unveränderliche Login-Daten für einen Account"""
|
|
|
|
username: str
|
|
password: str
|
|
platform: str
|
|
session_status: str # ACTIVE, EXPIRED, LOCKED, REQUIRES_2FA, UNKNOWN
|
|
last_successful_login: Optional[datetime] = None
|
|
session_id: Optional[str] = None
|
|
fingerprint_id: Optional[str] = None
|
|
|
|
def is_session_active(self) -> bool:
|
|
"""Prüft ob die Session aktiv ist"""
|
|
return self.session_status == "ACTIVE"
|
|
|
|
def requires_manual_login(self) -> bool:
|
|
"""Prüft ob manueller Login erforderlich ist"""
|
|
return self.session_status in ["EXPIRED", "LOCKED", "REQUIRES_2FA", "UNKNOWN"]
|
|
|
|
def has_session_data(self) -> bool:
|
|
"""Prüft ob Session-Daten vorhanden sind"""
|
|
return self.session_id is not None and self.fingerprint_id is not None
|
|
|
|
def to_dict(self) -> dict:
|
|
"""Konvertiert zu Dictionary für Serialisierung"""
|
|
return {
|
|
'username': self.username,
|
|
'password': self.password,
|
|
'platform': self.platform,
|
|
'session_status': self.session_status,
|
|
'last_successful_login': self.last_successful_login.isoformat() if self.last_successful_login else None,
|
|
'session_id': self.session_id,
|
|
'fingerprint_id': self.fingerprint_id
|
|
} |