feat(nextcloud-files): Anmeldung per Passwort und im Browser (Zwei-Faktor), Abmelden mit Widerruf

- Anmelde-Client (getapppassword, cloud/user, Widerruf, Login Flow v2 mit fester Abfrageadresse,
  Link aus Basis und Token neu gebaut), Anmeldebremse 3/15 min je Benutzer und 8/30 min je Server,
  Ablaufspeicher für Browser-Anmeldungen (20 min, höchstens 200, eine je Benutzer)
- Kontodienst: Verbinden, Trennen mit Widerruf, Sitzung mit Zugangsschlüssel-Sperre,
  frisch ausgestellte oder ersetzte App-Passwörter bleiben nie verwaist; jeder Kontozugriff
  über forTenant mit Mandant UND Benutzer aus dem Token
- Migration 20261008183000: Spalte ncLoginName (App-Passwort gilt nur für den Anmeldenamen der
  Ausstellung, gemessen mit E-Mail-Anmeldung gegen Nextcloud 34)
- Verbindungsbildschirm und Kontoleiste, Texte de/en, RLS-Inventar fortgeschrieben,
  E2E-Skript e2e-connect.sh

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-08 18:02:45 +02:00
parent 960696745f
commit d00b6ff79f
25 changed files with 3533 additions and 55 deletions
+40
View File
@@ -2337,6 +2337,46 @@
"main": {
"server": "Nextcloud: {host}"
},
"connect": {
"title": "Connect to Nextcloud",
"expiredNotice": "Your connection to Nextcloud has expired or was revoked in Nextcloud. Please sign in again.",
"explanation": "Sign in with your Nextcloud account. Tessera does not store your password; instead it has Nextcloud issue a separate access that you can revoke at any time.",
"loginName": "User name or email",
"password": "Password",
"submit": "Sign in",
"submitting": "Signing in …",
"or": "or",
"browser": "Sign in with the browser",
"starting": "Starting …",
"browserHint": "For accounts with two-factor authentication",
"waiting": {
"instruction": "Open the Nextcloud sign-in, log in there and confirm with “Grant access”.",
"open": "Open sign-in at Nextcloud",
"status": "Waiting for confirmation in Nextcloud …",
"cancel": "Cancel"
},
"errors": {
"generic": "Signing in failed. Please try again.",
"credentialsOrTwoFactor": "Signing in did not work. Either the user name or password is wrong, or your account uses two-factor authentication. In that case, please sign in with the browser.",
"useBrowserLogin": "Nextcloud does not allow password sign-in for this account. Please sign in with the browser.",
"tooManyAttempts": "Too many failed attempts. Please wait {minutes, plural, one {# minute} other {# minutes}}.",
"nextcloudLocked": "Nextcloud is temporarily blocking requests from the Tessera server. Please try again in {minutes, plural, one {# minute} other {# minutes}}.",
"flowExpired": "The sign-in has expired. Please start it again.",
"nextcloudUnavailable": "Nextcloud is unreachable or did not answer in time.",
"tooManyFlows": "Too many browser sign-ins are running right now. Please try again in a moment."
}
},
"account": {
"signedInAs": "Signed in as {name}",
"disconnect": "Sign out",
"disconnectFailed": "The connection could not be removed. Please try again.",
"confirm": {
"title": "Disconnect from Nextcloud?",
"body": "Tessera forgets the access. Your files in Nextcloud stay unchanged.",
"confirm": "Disconnect",
"cancel": "Cancel"
}
},
"errors": {
"request": "The request failed. Please try again.",
"loadStatus": "The state of the Nextcloud connection could not be loaded."