Migrate omsorgapp to browser SPA, add Docker/CI build setup
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>
This commit is contained in:
Felix Kemmler
2026-08-10 17:42:45 +02:00
co-authored by Claude Sonnet 5
parent e9e96a57dc
commit 598dfcd38a
461 changed files with 59753 additions and 2859 deletions
@@ -20,10 +20,21 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if ($username === '') {
$error = 'Bitte Benutzername eingeben.';
} else {
omsorgcore_forgot_password_request(_omsorgcore_config(), $username);
// Bewusst immer weiter zu Schritt 2, unabhängig vom Ergebnis - kein Rückschluss darauf,
// ob der Username existiert (siehe PasswordResetService.RequestResetAsync in omsorgCore).
$step = 'verify';
$result = omsorgcore_forgot_password_request(_omsorgcore_config(), $username);
$status = $result['ok'] ? ($result['data']['status'] ?? null) : null;
if ($status === 'email_unavailable') {
// Einzige Ausnahme vom "immer weiter"-Prinzip unten: der Code wurde zwar angelegt,
// aber die E-Mail kam nachweislich nicht raus (z.B. SMTP down) - kein Sinn, den Nutzer
// auf eine Code-Eingabe warten zu lassen, die nie ankommt. Kein zusätzliches
// Enumeration-Risiko: "sent" vs. "cannot_reset" unterscheidet bereits, ob der Username
// existiert (siehe AuthController.ForgotPasswordRequest in omsorgCore).
$error = 'Der E-Mail-Versand ist gerade nicht verfügbar. Bitte später erneut versuchen oder einen Administrator kontaktieren.';
} else {
// Bewusst immer weiter zu Schritt 2, unabhängig vom Ergebnis - kein Rückschluss darauf,
// ob der Username existiert (siehe PasswordResetService.RequestResetAsync in omsorgCore).
$step = 'verify';
}
}
} elseif ($step === 'verify') {
$username = trim($_POST['username'] ?? '');