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
- 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>
75 lines
2.3 KiB
React
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>
|
|
);
|
|
}
|