Files
omsorg/omsorgapp/src/modules/auth/ForgotPasswordUsernamePage.jsx
T
Felix KemmlerandClaude Sonnet 5 598dfcd38a
Docker-Images bauen und veröffentlichen / build (, omsorgCore/Dockerfile, omsorgcore) (push) Successful in 3s
Docker-Images bauen und veröffentlichen / build (, omsorgWeb/Dockerfile, omsorgweb) (push) Failing after 4s
Docker-Images bauen und veröffentlichen / build (VITE_OMSORG_CORE_URL=${{ vars.OMSORG_CORE_PUBLIC_URL }}, omsorgapp/Dockerfile, omsorgapp) (push) Successful in 3s
Migrate omsorgapp to browser SPA, add Docker/CI build setup
- omsorgapp: drop Electron, run as a plain Vite/React browser app; refresh
  token moves to an HttpOnly cookie (omsorgCore), CORS added for the new
  browser origin, document download/preview switched to Blob-based browser
  APIs.
- Add Dockerfiles for omsorgCore, omsorgapp, and omsorgWeb, a docker-compose.yml
  wiring Postgres/MySQL/all three apps together, and a Gitea Actions workflow
  that builds and pushes images to the repo's container registry on push to
  main and on version tags.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-10 17:42:45 +02:00

75 lines
2.3 KiB
React

import { useState } from "react";
import { Mail } from "lucide-react";
import OmsorgCard from "../../components/OmsorgCard";
import OmsorgButton from "../../components/ui/OmsorgButton";
export default function ForgotPasswordUsernamePage({ onNext, onBackToLogin }) {
const [username, setUsername] = useState("");
const [error, setError] = useState(null);
const [cannotReset, setCannotReset] = useState(false);
const [isSubmitting, setIsSubmitting] = useState(false);
async function handleSubmit(event) {
event.preventDefault();
setError(null);
setCannotReset(false);
setIsSubmitting(true);
const result = await window.omsorg.auth.requestPasswordReset(username);
setIsSubmitting(false);
if (!result.success) {
setError("Server nicht erreichbar. Bitte Verbindung prüfen und erneut versuchen.");
return;
}
if (result.status === "sent") {
onNext(username);
} else if (result.status === "email_unavailable") {
setError("Der E-Mail-Versand ist gerade nicht verfügbar. Bitte später erneut versuchen oder einen Administrator kontaktieren.");
} else {
setCannotReset(true);
}
}
return (
<div className="login-screen">
<OmsorgCard>
<h2>
Passwort
<span className="accent"> vergessen</span>
</h2>
<form onSubmit={handleSubmit} className="login-form">
<label>
Benutzername
<input
type="text"
value={username}
onChange={(e) => setUsername(e.target.value)}
autoFocus
required
/>
</label>
{error && <p className="login-error">{error}</p>}
{cannotReset && (
<p className="login-error">
Für diesen Account ist kein Passwort-Reset per E-Mail möglich. Bitte wende dich an einen Administrator.
</p>
)}
<OmsorgButton type="submit" icon={Mail} disabled={isSubmitting}>
{isSubmitting ? "Wird gesendet..." : "Code anfordern"}
</OmsorgButton>
<div className="login-form-links">
<button type="button" onClick={onBackToLogin}>
Zurück zum Login
</button>
</div>
</form>
</OmsorgCard>
</div>
);
}