added support for 2fa login with browser flow

This commit is contained in:
2026-08-10 20:00:38 +02:00
parent 889d8f67c5
commit ccb22a497d
13 changed files with 805 additions and 35 deletions
@@ -1,3 +1,5 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
@@ -167,10 +169,35 @@ class _AccountSectionState extends State<AccountSection> {
],
),
),
// Nur für Login-Flow-Konten (2FA) sichtbar — Passwort-Konten heilen
// sich still über das App-Passwort-Minting und sollen von dem ganzen
// Flow-Mechanismus nichts mitbekommen.
if (!AccountData().isDemo && AccountData().usesLoginFlow)
AsyncListTile(
leading: const Icon(Icons.cloud_sync_outlined),
title: const Text('Nextcloud neu verbinden'),
subtitle: const Text(
'Bei Anmeldeproblemen in Talk oder Dateien',
),
closeOnSuccess: false,
onPressed: _reconnectNextcloud,
),
],
);
}
/// Erneuert die Nextcloud-Zugangsdaten über den Login Flow v2 (inkl. des
/// zweiten Talk-Durchlaufs) und bindet die Push-Subscription neu.
Future<void> _reconnectNextcloud() async {
final ok = await AppRoutes.openNextcloudLoginFlow(context);
if (!ok || !mounted) return;
// Neues App-Passwort = neue NC-Session: die Push-Subscription neu binden.
unawaited(PushRegistration().register());
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('Nextcloud-Verbindung erneuert.')),
);
}
Future<void> _showLogoutDialog(BuildContext context) async {
// Flip AccountBloc state only after the dialog fully closes: doing it from
// inside removeData (the previous approach) raced AsyncDialogAction's