maskedEmail = MaskedEmail::fromString($this->email); } public function getOWASPEventIdentifier(): OWASPEventIdentifier { return OWASPEventIdentifier::authenticationFailure($this->maskedEmail->toString()); } public function getOWASPLogLevel(): OWASPLogLevel { return OWASPLogLevel::WARN; } public function getDescription(): string { return "User {$this->maskedEmail->toString()} login failed" . ($this->reason ? " - {$this->reason}" : ''); } public function getEventData(): array { return [ 'email' => $this->maskedEmail->toString(), 'reason' => $this->reason, 'failed_attempts' => $this->failedAttempts, 'failure_reason' => $this->reason ?? 'invalid_credentials', ]; } public function getMaskedEmail(): MaskedEmail { return $this->maskedEmail; } }