Browse Source

Require confirmation during Save if Secret Key (#271)

Vishnu Mohandas 1 year ago
parent
commit
c53ac484fa
2 changed files with 45 additions and 26 deletions
  1. 2 1
      lib/l10n/arb/app_en.arb
  2. 43 25
      lib/onboarding/view/setup_enter_secret_key_page.dart

+ 2 - 1
lib/l10n/arb/app_en.arb

@@ -331,5 +331,6 @@
   "offlineModeWarning": "You have chosen to proceed without backups. Please take manual backups to make sure your codes are safe.",
   "showLargeIcons": "Show large icons",
   "shouldHideCode": "Hide codes",
-  "focusOnSearchBar": "Focus search on app start"
+  "focusOnSearchBar": "Focus search on app start",
+  "confirmUpdatingkey": "Are you sure you want to update the secret key?"
 }

+ 43 - 25
lib/onboarding/view/setup_enter_secret_key_page.dart

@@ -1,5 +1,7 @@
 import "package:ente_auth/l10n/l10n.dart";
 import 'package:ente_auth/models/code.dart';
+import 'package:ente_auth/ui/components/buttons/button_widget.dart';
+import 'package:ente_auth/ui/components/models/button_result.dart';
 import 'package:ente_auth/utils/dialog_util.dart';
 import 'package:ente_auth/utils/totp_util.dart';
 import "package:flutter/material.dart";
@@ -10,7 +12,8 @@ class SetupEnterSecretKeyPage extends StatefulWidget {
   SetupEnterSecretKeyPage({this.code, Key? key}) : super(key: key);
 
   @override
-  State<SetupEnterSecretKeyPage> createState() => _SetupEnterSecretKeyPageState();
+  State<SetupEnterSecretKeyPage> createState() =>
+      _SetupEnterSecretKeyPageState();
 }
 
 class _SetupEnterSecretKeyPageState extends State<SetupEnterSecretKeyPage> {
@@ -25,7 +28,8 @@ class _SetupEnterSecretKeyPageState extends State<SetupEnterSecretKeyPage> {
       text: widget.code != null ? safeDecode(widget.code!.issuer).trim() : null,
     );
     _accountController = TextEditingController(
-      text: widget.code != null ? safeDecode(widget.code!.account).trim() : null,
+      text:
+          widget.code != null ? safeDecode(widget.code!.account).trim() : null,
     );
     _secretController = TextEditingController(
       text: widget.code != null ? widget.code!.secret : null,
@@ -110,7 +114,7 @@ class _SetupEnterSecretKeyPageState extends State<SetupEnterSecretKeyPage> {
                 SizedBox(
                   width: 400,
                   child: OutlinedButton(
-                    onPressed: () {
+                    onPressed: () async {
                       if ((_accountController.text.trim().isEmpty &&
                               _issuerController.text.trim().isEmpty) ||
                           _secretController.text.trim().isEmpty) {
@@ -118,31 +122,45 @@ class _SetupEnterSecretKeyPageState extends State<SetupEnterSecretKeyPage> {
                         if (_secretController.text.trim().isEmpty) {
                           message = context.l10n.secretCanNotBeEmpty;
                         } else {
-                          message = context.l10n.bothIssuerAndAccountCanNotBeEmpty;
+                          message =
+                              context.l10n.bothIssuerAndAccountCanNotBeEmpty;
                         }
                         _showIncorrectDetailsDialog(context, message: message);
                         return;
                       }
-                      try {
-                        final account = _accountController.text.trim();
-                        final issuer = _issuerController.text.trim();
-                        final secret = _secretController.text.trim().replaceAll(' ', '');
-                        final Code newCode = widget.code == null
-                            ? Code.fromAccountAndSecret(
-                                account,
-                                issuer,
-                                secret,
-                              )
-                            : widget.code!.copyWith(
-                                account: account,
-                                issuer: issuer,
-                                secret: secret,
-                              );
-                        // Verify the validity of the code
-                        getOTP(newCode);
-                        Navigator.of(context).pop(newCode);
-                      } catch (e) {
-                        _showIncorrectDetailsDialog(context);
+                      ButtonResult? result = await showChoiceActionSheet(
+                        context,
+                        title: context.l10n.warning,
+                        body: context.l10n.confirmUpdatingkey,
+                        firstButtonLabel: context.l10n.yes,
+                        secondButtonAction: ButtonAction.cancel,
+                        secondButtonLabel: context.l10n.cancel,
+                      );
+
+                      if (result == null) return;
+                      if (result.action == ButtonAction.first) {
+                        try {
+                          final account = _accountController.text.trim();
+                          final issuer = _issuerController.text.trim();
+                          final secret =
+                              _secretController.text.trim().replaceAll(' ', '');
+                          final Code newCode = widget.code == null
+                              ? Code.fromAccountAndSecret(
+                                  account,
+                                  issuer,
+                                  secret,
+                                )
+                              : widget.code!.copyWith(
+                                  account: account,
+                                  issuer: issuer,
+                                  secret: secret,
+                                );
+                          // Verify the validity of the code
+                          getOTP(newCode);
+                          Navigator.of(context).pop(newCode);
+                        } catch (e) {
+                          _showIncorrectDetailsDialog(context);
+                        }
                       }
                     },
                     child: Padding(
@@ -153,7 +171,7 @@ class _SetupEnterSecretKeyPageState extends State<SetupEnterSecretKeyPage> {
                       child: Text(l10n.saveAction),
                     ),
                   ),
-                )
+                ),
               ],
             ),
           ),