authMessages.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { ApiClientError } from "@/lib/frontend/apiClient";
  2. import { LOGIN_REASONS } from "@/lib/frontend/authRedirect";
  3. /**
  4. * Auth UI messages (RHL-020).
  5. *
  6. * Why this file exists:
  7. * - Keep user-facing auth messages consistent and centralized.
  8. * - Avoid string duplication across multiple UI components.
  9. * - Make mappings easy to test (pure functions, no UI dependencies).
  10. */
  11. /**
  12. * Return a user-facing login-page alert message for a known reason.
  13. *
  14. * @param {string|null} reason
  15. * @returns {{ title: string, description: string } | null}
  16. */
  17. export function getLoginReasonAlert(reason) {
  18. if (reason === LOGIN_REASONS.EXPIRED) {
  19. return {
  20. title: "Sitzung abgelaufen",
  21. description:
  22. "Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.",
  23. };
  24. }
  25. if (reason === LOGIN_REASONS.LOGGED_OUT) {
  26. return {
  27. title: "Abgemeldet",
  28. description: "Sie wurden erfolgreich abgemeldet.",
  29. };
  30. }
  31. return null;
  32. }
  33. /**
  34. * Map an error to a safe, user-friendly login error message.
  35. *
  36. * Principles:
  37. * - Do not leak internal server details to the UI.
  38. * - Use stable error codes (ApiClientError.code) for UX decisions.
  39. *
  40. * @param {unknown} err
  41. * @returns {string}
  42. */
  43. export function getLoginErrorMessage(err) {
  44. if (err instanceof ApiClientError) {
  45. if (err.code === "AUTH_INVALID_CREDENTIALS") {
  46. return "Benutzername oder Passwort ist falsch.";
  47. }
  48. if (err.code === "CLIENT_NETWORK_ERROR") {
  49. return "Netzwerkfehler. Bitte prüfen Sie Ihre Verbindung und versuchen Sie es erneut.";
  50. }
  51. return "Anmeldung fehlgeschlagen. Bitte erneut versuchen.";
  52. }
  53. return "Anmeldung fehlgeschlagen. Bitte erneut versuchen.";
  54. }