Skip to content

Commit b652d38

Browse files
authored
Merge pull request #1136 from cypherstack/duress-pin
Duress pin
2 parents f5f4567 + 2bbe82d commit b652d38

File tree

41 files changed

+3163
-2187
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+3163
-2187
lines changed

lib/main.dart

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ import 'pages/pinpad_views/create_pin_view.dart';
5050
import 'pages/pinpad_views/lock_screen_view.dart';
5151
import 'pages/settings_views/global_settings_view/stack_backup_views/restore_from_encrypted_string_view.dart';
5252
import 'pages_desktop_specific/password/desktop_login_view.dart';
53-
import 'providers/db/main_db_provider.dart';
5453
import 'providers/desktop/storage_crypto_handler_provider.dart';
5554
import 'providers/global/auto_swb_service_provider.dart';
5655
import 'providers/global/base_currencies_provider.dart';
@@ -357,7 +356,7 @@ class _MaterialAppWithThemeState extends ConsumerState<MaterialAppWithTheme>
357356
}
358357
}
359358

360-
Future<void> load() async {
359+
Future<void> load(bool loadWallets) async {
361360
try {
362361
if (didLoad) {
363362
return;
@@ -387,12 +386,15 @@ class _MaterialAppWithThemeState extends ConsumerState<MaterialAppWithTheme>
387386
prefs: ref.read(prefsChangeNotifierProvider),
388387
);
389388
ref.read(priceAnd24hChangeNotifierProvider).start(true);
390-
await ref
391-
.read(pWallets)
392-
.load(
393-
ref.read(prefsChangeNotifierProvider),
394-
ref.read(mainDBProvider),
395-
);
389+
if (loadWallets) {
390+
await ref
391+
.read(pWallets)
392+
.load(
393+
ref.read(prefsChangeNotifierProvider),
394+
ref.read(mainDBProvider),
395+
false,
396+
);
397+
}
396398
loadingCompleter.complete();
397399
// TODO: this should probably run unawaited. Keep commented out for now as proper community nodes ui hasn't been implemented yet
398400
// unawaited(_nodeService.updateCommunityNodes());
@@ -445,6 +447,13 @@ class _MaterialAppWithThemeState extends ConsumerState<MaterialAppWithTheme>
445447

446448
@override
447449
void initState() {
450+
if (Util.isDesktop) {
451+
// set to false for desktop
452+
WidgetsBinding.instance.addPostFrameCallback((_) {
453+
ref.read(pDuress.notifier).state = false;
454+
});
455+
}
456+
448457
String themeId;
449458
if (ref.read(prefsChangeNotifierProvider).enableSystemBrightness) {
450459
final brightness = WidgetsBinding.instance.window.platformBrightness;
@@ -781,7 +790,7 @@ class _MaterialAppWithThemeState extends ConsumerState<MaterialAppWithTheme>
781790

782791
return DesktopLoginView(
783792
startupWalletId: startupWalletId,
784-
load: load,
793+
load: () => load(true),
785794
);
786795
} else {
787796
return const IntroView();
@@ -792,7 +801,7 @@ class _MaterialAppWithThemeState extends ConsumerState<MaterialAppWithTheme>
792801
},
793802
)
794803
: FutureBuilder(
795-
future: load(),
804+
future: load(false),
796805
builder: (
797806
BuildContext context,
798807
AsyncSnapshot<void> snapshot,

lib/pages/add_wallet_views/frost_ms/new/steps/frost_create_step_5.dart

Lines changed: 25 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,9 @@ import '../../../../../app_config.dart';
88
import '../../../../../frost_route_generator.dart';
99
import '../../../../../notifications/show_flush_bar.dart';
1010
import '../../../../../pages_desktop_specific/desktop_home_view.dart';
11-
import '../../../../../providers/db/main_db_provider.dart';
1211
import '../../../../../providers/frost_wallet/frost_wallet_providers.dart';
13-
import '../../../../../providers/global/node_service_provider.dart';
14-
import '../../../../../providers/global/prefs_provider.dart';
1512
import '../../../../../providers/global/secure_store_provider.dart';
16-
import '../../../../../providers/global/wallets_provider.dart';
13+
import '../../../../../providers/providers.dart';
1714
import '../../../../../services/frost.dart';
1815
import '../../../../../themes/stack_colors.dart';
1916
import '../../../../../utilities/assets.dart';
@@ -43,7 +40,8 @@ class FrostCreateStep5 extends ConsumerStatefulWidget {
4340
}
4441

4542
class _FrostCreateStep5State extends ConsumerState<FrostCreateStep5> {
46-
static const _warning = "These are your private keys. Please back them up, "
43+
static const _warning =
44+
"These are your private keys. Please back them up, "
4745
"keep them safe and never share it with anyone. Your private keys are the"
4846
" only way you can access your funds if you forget PIN, lose your phone, "
4947
"etc. ${AppConfig.prefix} does not keep nor is able to restore your private keys"
@@ -79,35 +77,30 @@ class _FrostCreateStep5State extends ConsumerState<FrostCreateStep5> {
7977
child: Text(
8078
_warning,
8179
style: STextStyles.w500_14(context).copyWith(
82-
color: Theme.of(context)
83-
.extension<StackColors>()!
84-
.warningForeground,
80+
color:
81+
Theme.of(
82+
context,
83+
).extension<StackColors>()!.warningForeground,
8584
),
8685
),
8786
),
8887
const SizedBox(height: 12),
8988
DetailItem(
9089
title: "Multisig Config",
9190
detail: multisigConfig,
92-
button: Util.isDesktop
93-
? IconCopyButton(
94-
data: multisigConfig,
95-
)
96-
: SimpleCopyButton(
97-
data: multisigConfig,
98-
),
91+
button:
92+
Util.isDesktop
93+
? IconCopyButton(data: multisigConfig)
94+
: SimpleCopyButton(data: multisigConfig),
9995
),
10096
const SizedBox(height: 12),
10197
DetailItem(
10298
title: "Keys",
10399
detail: serializedKeys,
104-
button: Util.isDesktop
105-
? IconCopyButton(
106-
data: serializedKeys,
107-
)
108-
: SimpleCopyButton(
109-
data: serializedKeys,
110-
),
100+
button:
101+
Util.isDesktop
102+
? IconCopyButton(data: serializedKeys)
103+
: SimpleCopyButton(data: serializedKeys),
111104
),
112105
if (!Util.isDesktop) const Spacer(),
113106
const SizedBox(height: 12),
@@ -133,10 +126,7 @@ class _FrostCreateStep5State extends ConsumerState<FrostCreateStep5> {
133126
useSafeArea: true,
134127
builder: (ctx) {
135128
return const Center(
136-
child: LoadingIndicator(
137-
width: 50,
138-
height: 50,
139-
),
129+
child: LoadingIndicator(width: 50, height: 50),
140130
);
141131
},
142132
),
@@ -177,6 +167,13 @@ class _FrostCreateStep5State extends ConsumerState<FrostCreateStep5> {
177167
isar: ref.read(mainDBProvider).isar,
178168
);
179169

170+
if (ref.read(pDuress)) {
171+
await wallet.info.updateDuressVisibilityStatus(
172+
isDuressVisible: true,
173+
isar: ref.read(mainDBProvider).isar,
174+
);
175+
}
176+
180177
ref.read(pWallets).addWallet(wallet);
181178

182179
// pop progress dialog
@@ -191,9 +188,7 @@ class _FrostCreateStep5State extends ConsumerState<FrostCreateStep5> {
191188

192189
if (Util.isDesktop) {
193190
nav.popUntil(
194-
ModalRoute.withName(
195-
DesktopHomeView.routeName,
196-
),
191+
ModalRoute.withName(DesktopHomeView.routeName),
197192
);
198193
} else {
199194
unawaited(
@@ -219,7 +214,7 @@ class _FrostCreateStep5State extends ConsumerState<FrostCreateStep5> {
219214
);
220215
}
221216
} catch (e, s) {
222-
Logging.instance.f("$e\n$s", error: e, stackTrace: s,);
217+
Logging.instance.f("$e\n$s", error: e, stackTrace: s);
223218

224219
// pop progress dialog
225220
if (context.mounted && !progressPopped) {

lib/pages/add_wallet_views/frost_ms/reshare/frost_reshare_step_5.dart

Lines changed: 47 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,9 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
44
import '../../../../frost_route_generator.dart';
55
import '../../../../pages_desktop_specific/desktop_home_view.dart';
66
import '../../../../pages_desktop_specific/my_stack_view/wallet_view/desktop_wallet_view.dart';
7-
import '../../../../providers/db/main_db_provider.dart';
87
import '../../../../providers/frost_wallet/frost_wallet_providers.dart';
9-
import '../../../../providers/global/node_service_provider.dart';
10-
import '../../../../providers/global/prefs_provider.dart';
118
import '../../../../providers/global/secure_store_provider.dart';
12-
import '../../../../providers/global/wallets_provider.dart';
9+
import '../../../../providers/providers.dart';
1310
import '../../../../utilities/logger.dart';
1411
import '../../../../utilities/show_loading.dart';
1512
import '../../../../utilities/text_styles.dart';
@@ -68,12 +65,20 @@ class _FrostReshareStep5State extends ConsumerState<FrostReshareStep5> {
6865
isar: ref.read(mainDBProvider).isar,
6966
);
7067

68+
if (ref.read(pDuress)) {
69+
await wallet.info.updateDuressVisibilityStatus(
70+
isDuressVisible: true,
71+
isar: ref.read(mainDBProvider).isar,
72+
);
73+
}
74+
7175
ref.read(pWallets).addWallet(wallet);
7276
} else {
73-
wallet = ref
74-
.read(pWallets)
75-
.getWallet(ref.read(pFrostScaffoldArgs)!.walletId!)
76-
as BitcoinFrostWallet;
77+
wallet =
78+
ref
79+
.read(pWallets)
80+
.getWallet(ref.read(pFrostScaffoldArgs)!.walletId!)
81+
as BitcoinFrostWallet;
7782
}
7883

7984
if (mounted) {
@@ -96,34 +101,32 @@ class _FrostReshareStep5State extends ConsumerState<FrostReshareStep5> {
96101
if (mounted) {
97102
ref.read(pFrostResharingData).reset();
98103
ref.read(pFrostScaffoldCanPopDesktop.notifier).state = true;
99-
ref.read(pFrostScaffoldArgs)?.parentNav.popUntil(
100-
ModalRoute.withName(
101-
_popUntilPath,
102-
),
103-
);
104+
ref
105+
.read(pFrostScaffoldArgs)
106+
?.parentNav
107+
.popUntil(ModalRoute.withName(_popUntilPath));
104108
}
105109
}
106110
} catch (e, s) {
107-
Logging.instance.f("$e\n$s", error: e, stackTrace: s,);
111+
Logging.instance.f("$e\n$s", error: e, stackTrace: s);
108112
if (mounted) {
109113
await showDialog<void>(
110114
context: context,
111-
builder: (_) => FrostErrorDialog(
112-
title: "Error",
113-
message: e.toString(),
114-
),
115+
builder:
116+
(_) => FrostErrorDialog(title: "Error", message: e.toString()),
115117
);
116118
}
117119
} finally {
118120
_buttonLock = false;
119121
}
120122
}
121123

122-
String get _popUntilPath => isNew
123-
? Util.isDesktop
124-
? DesktopHomeView.routeName
125-
: HomeView.routeName
126-
: Util.isDesktop
124+
String get _popUntilPath =>
125+
isNew
126+
? Util.isDesktop
127+
? DesktopHomeView.routeName
128+
: HomeView.routeName
129+
: Util.isDesktop
127130
? DesktopWalletView.routeName
128131
: WalletView.routeName;
129132

@@ -134,7 +137,8 @@ class _FrostReshareStep5State extends ConsumerState<FrostReshareStep5> {
134137
ref.read(pFrostResharingData).newWalletData!.serializedKeys;
135138
reshareId = ref.read(pFrostResharingData).newWalletData!.resharedId;
136139

137-
isNew = ref.read(pFrostResharingData).incompleteWallet != null &&
140+
isNew =
141+
ref.read(pFrostResharingData).incompleteWallet != null &&
138142
ref.read(pFrostResharingData).incompleteWallet!.walletId ==
139143
ref.read(pFrostScaffoldArgs)!.walletId!;
140144

@@ -151,66 +155,42 @@ class _FrostReshareStep5State extends ConsumerState<FrostReshareStep5> {
151155
"Ensure your reshare ID matches that of each other participant",
152156
style: STextStyles.pageTitleH2(context),
153157
),
154-
const SizedBox(
155-
height: 12,
156-
),
158+
const SizedBox(height: 12),
157159
DetailItem(
158160
title: "ID",
159161
detail: reshareId,
160-
button: Util.isDesktop
161-
? IconCopyButton(
162-
data: reshareId,
163-
)
164-
: SimpleCopyButton(
165-
data: reshareId,
166-
),
167-
),
168-
const SizedBox(
169-
height: 12,
170-
),
171-
const SizedBox(
172-
height: 12,
162+
button:
163+
Util.isDesktop
164+
? IconCopyButton(data: reshareId)
165+
: SimpleCopyButton(data: reshareId),
173166
),
167+
const SizedBox(height: 12),
168+
const SizedBox(height: 12),
174169
Text(
175170
"Back up your keys and config",
176171
style: STextStyles.pageTitleH2(context),
177172
),
178-
const SizedBox(
179-
height: 12,
180-
),
173+
const SizedBox(height: 12),
181174
DetailItem(
182175
title: "Config",
183176
detail: config,
184-
button: Util.isDesktop
185-
? IconCopyButton(
186-
data: config,
187-
)
188-
: SimpleCopyButton(
189-
data: config,
190-
),
191-
),
192-
const SizedBox(
193-
height: 12,
177+
button:
178+
Util.isDesktop
179+
? IconCopyButton(data: config)
180+
: SimpleCopyButton(data: config),
194181
),
182+
const SizedBox(height: 12),
195183
DetailItem(
196184
title: "Keys",
197185
detail: serializedKeys,
198-
button: Util.isDesktop
199-
? IconCopyButton(
200-
data: serializedKeys,
201-
)
202-
: SimpleCopyButton(
203-
data: serializedKeys,
204-
),
186+
button:
187+
Util.isDesktop
188+
? IconCopyButton(data: serializedKeys)
189+
: SimpleCopyButton(data: serializedKeys),
205190
),
206191
if (!Util.isDesktop) const Spacer(),
207-
const SizedBox(
208-
height: 12,
209-
),
210-
PrimaryButton(
211-
label: "Confirm",
212-
onPressed: _onPressed,
213-
),
192+
const SizedBox(height: 12),
193+
PrimaryButton(label: "Confirm", onPressed: _onPressed),
214194
],
215195
),
216196
);

0 commit comments

Comments
 (0)