Shuffle/app/lib/features/auth/domain/auth_failure.dart
cschlaefke 3805c71225
Some checks failed
CI / flutter (pull_request) Failing after 44s
CI / web-build (pull_request) Successful in 51s
CI / supabase (pull_request) Successful in 3s
CI / supabase-tests (pull_request) Successful in 29s
CI / e2e (pull_request) Successful in 2m44s
fix(auth): address review findings for smtp-neutral handling
Refs #37

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-03 12:24:25 +01:00

46 lines
1.9 KiB
Dart

import 'package:freezed_annotation/freezed_annotation.dart';
part 'auth_failure.freezed.dart';
/// Grund einer abgelehnten Passwortstärke (`weak_password.reasons`).
enum WeakPasswordReason { length, characters, pwned, unknown }
/// Grund einer serverseitig abgelehnten Registrierung (Trigger-Meldung).
///
/// Die Meldung entscheidet über Banner oder neutrale Seite (Spec #1 § 4.4,
/// F13): Nur ein HTTP 500 mit bekannter Trigger-Meldung wird zu
/// `registrationRejected` mit Grund, jedes andere 500 (z. B. SMTP-Ausfall)
/// zu `unexpected` und ist neutral. Das Format der Meldung ist nicht
/// zugesichert, unbekannte Meldungen ergeben [unknown].
enum RegistrationRejectionReason {
displayName,
ageConfirmation,
termsAcceptance,
termsVersion,
unknown,
}
/// Fachliche Fehler der Auth-Abläufe (Mapping: Spec #1 § 4.4).
@freezed
sealed class AuthFailure with _$AuthFailure {
const factory AuthFailure.invalidCredentials() = InvalidCredentials;
const factory AuthFailure.emailNotConfirmed() = EmailNotConfirmed;
/// `over_email_send_rate_limit`. Wo die Adresse frei eingegeben wird, wird
/// das wie Erfolg behandelt (F12), siehe `resendFailureFor`.
const factory AuthFailure.emailSendLimited() = EmailSendLimited;
/// `over_request_rate_limit` und sonstiges HTTP 429.
const factory AuthFailure.rateLimited() = RateLimited;
const factory AuthFailure.weakPassword(List<WeakPasswordReason> reasons) =
WeakPassword;
const factory AuthFailure.samePassword() = SamePassword;
const factory AuthFailure.linkInvalidOrExpired() = LinkInvalidOrExpired;
const factory AuthFailure.invalidEmail() = InvalidEmail;
const factory AuthFailure.registrationRejected({
@Default(RegistrationRejectionReason.unknown)
RegistrationRejectionReason reason,
}) = RegistrationRejected;
const factory AuthFailure.network() = NetworkFailure;
const factory AuthFailure.unexpected() = Unexpected;
}