Skip to content

Commit 770fb87

Browse files
committed
fix: atSign activation
1 parent 8531b4a commit 770fb87

File tree

3 files changed

+111
-44
lines changed

3 files changed

+111
-44
lines changed

packages/at_onboarding_flutter/lib/screen/at_onboarding_activate_screen.dart

+14-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'dart:convert';
22
import 'dart:io';
33

4+
import 'package:at_auth/at_auth.dart';
45
import 'package:at_client_mobile/at_client_mobile.dart';
56
import 'package:at_onboarding_flutter/at_onboarding_result.dart';
67
import 'package:at_onboarding_flutter/localizations/generated/l10n.dart';
@@ -103,7 +104,8 @@ class _AtOnboardingActivateScreenState
103104
),
104105
const SizedBox(height: 10),
105106
Text(
106-
AtOnboardingLocalizations.current.msg_wait_fetching_atSign,
107+
AtOnboardingLocalizations
108+
.current.msg_wait_fetching_atSign,
107109
),
108110
],
109111
),
@@ -146,7 +148,7 @@ class _AtOnboardingActivateScreenState
146148
data = jsonDecode(data);
147149

148150
AtOnboardingOTPResult? result;
149-
if(context.mounted) {
151+
if (context.mounted) {
150152
result = await AtOnboardingOTPScreen.push(
151153
context: context,
152154
atSign: atsign ?? (widget.atSign ?? ''),
@@ -219,8 +221,11 @@ class _AtOnboardingActivateScreenState
219221
_onboardingService.setAtClientPreference =
220222
widget.config.atClientPreference;
221223

222-
authResponse = await _onboardingService.authenticate(atsign,
223-
cramSecret: secret, status: OnboardingStatus.ACTIVATE);
224+
String? previousAtsign = _onboardingService.currentAtsign;
225+
_onboardingService.setAtsign = atsign;
226+
authResponse = await _onboardingService.onboard(
227+
cramSecret: secret,
228+
);
224229

225230
int round = 1;
226231
atSignStatus = await _onboardingService.checkAtSignServerStatus(atsign);
@@ -235,6 +240,11 @@ class _AtOnboardingActivateScreenState
235240
debugPrint("currentAtSignStatus: $atSignStatus");
236241
}
237242

243+
if (authResponse != AtOnboardingResponseStatus.authSuccess ||
244+
atSignStatus == ServerStatus.teapot) {
245+
_onboardingService.setAtsign = previousAtsign;
246+
}
247+
238248
if (authResponse == AtOnboardingResponseStatus.authSuccess) {
239249
if (atSignStatus == ServerStatus.teapot) {
240250
await _showAlertDialog(

packages/at_onboarding_flutter/lib/screen/at_onboarding_generate_screen.dart

+10-5
Original file line numberDiff line numberDiff line change
@@ -474,11 +474,12 @@ class _AtOnboardingGenerateScreenState
474474

475475
await Future.delayed(const Duration(seconds: 10));
476476

477-
authResponse = await _onboardingService.authenticate(
478-
verifiedAtSign,
479-
cramSecret: cramSecret,
480-
status: OnboardingStatus.ACTIVATE,
477+
String? previousAtsign = _onboardingService.currentAtsign;
478+
_onboardingService.setAtsign = verifiedAtSign;
479+
authResponse = await _onboardingService.onboard(
480+
cramSecret: secret,
481481
);
482+
482483
_inprogressDialog.close();
483484
if (authResponse == AtOnboardingResponseStatus.authSuccess) {
484485
if (!mounted) return;
@@ -494,7 +495,11 @@ class _AtOnboardingGenerateScreenState
494495
if (!mounted) return;
495496
Navigator.pop(
496497
context, AtOnboardingResult.success(atsign: verifiedAtSign));
497-
} else if (authResponse == AtOnboardingResponseStatus.serverNotReached) {
498+
} else {
499+
_onboardingService.setAtsign = previousAtsign;
500+
}
501+
502+
if (authResponse == AtOnboardingResponseStatus.serverNotReached) {
498503
await _showAlertDialog(
499504
AtOnboardingLocalizations.current.msg_atSign_unreachable,
500505
);

packages/at_onboarding_flutter/lib/screen/at_onboarding_home_screen.dart

+87-35
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,10 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
8282
String? _pairingAtsign;
8383

8484
ServerStatus? atSignStatus;
85-
final String _incorrectKeyFile = AtOnboardingLocalizations.current.msg_cannot_fetch_keys_from_chosen_file;
86-
final String _failedFileProcessing = AtOnboardingLocalizations.current.error_processing_files;
85+
final String _incorrectKeyFile =
86+
AtOnboardingLocalizations.current.msg_cannot_fetch_keys_from_chosen_file;
87+
final String _failedFileProcessing =
88+
AtOnboardingLocalizations.current.error_processing_files;
8789

8890
late AtSyncDialog _inprogressDialog;
8991

@@ -142,7 +144,8 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
142144
// width: _dialogWidth,
143145
decoration: BoxDecoration(
144146
color: theme.primaryColor.withOpacity(0.1),
145-
borderRadius: BorderRadius.circular(AtOnboardingDimens.borderRadius)),
147+
borderRadius:
148+
BorderRadius.circular(AtOnboardingDimens.borderRadius)),
146149
padding: const EdgeInsets.all(AtOnboardingDimens.paddingNormal),
147150
margin: const EdgeInsets.all(AtOnboardingDimens.paddingNormal),
148151
constraints: const BoxConstraints(
@@ -165,7 +168,9 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
165168
key: keyUploadAtSign,
166169
height: 48,
167170
borderRadius: 24,
168-
onPressed: (Platform.isMacOS || Platform.isLinux || Platform.isWindows)
171+
onPressed: (Platform.isMacOS ||
172+
Platform.isLinux ||
173+
Platform.isWindows)
169174
? _uploadKeyFileForDesktop
170175
: _uploadKeyFile,
171176
isLoading: loading,
@@ -206,8 +211,10 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
206211
mainAxisAlignment: MainAxisAlignment.center,
207212
children: [
208213
Text(
209-
AtOnboardingLocalizations.current.btn_activate_atSign,
210-
style: const TextStyle(fontSize: AtOnboardingDimens.fontLarge),
214+
AtOnboardingLocalizations
215+
.current.btn_activate_atSign,
216+
style: const TextStyle(
217+
fontSize: AtOnboardingDimens.fontLarge),
211218
),
212219
const Icon(Icons.arrow_right_alt_rounded)
213220
],
@@ -228,7 +235,9 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
228235
required String secret,
229236
}) {
230237
String cramSecret = secret.split(':').last;
231-
String atsign = atSign.startsWith('@') ? atSign : '@$atSign';
238+
String atsign = atSign.startsWith('@')
239+
? atSign
240+
: '@$atSign';
232241
_processSharedSecret(atsign, cramSecret);
233242
},
234243
config: widget.config,
@@ -291,8 +300,8 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
291300
String decodeQrCode(String imagepath) {
292301
var image = img.decodePng(File(imagepath).readAsBytesSync())!;
293302

294-
LuminanceSource source = RGBLuminanceSource(
295-
image.width, image.height, image.getBytes(order: img.ChannelOrder.abgr).buffer.asInt32List());
303+
LuminanceSource source = RGBLuminanceSource(image.width, image.height,
304+
image.getBytes(order: img.ChannelOrder.abgr).buffer.asInt32List());
296305
var bitmap = BinaryBitmap(HybridBinarizer(source));
297306

298307
var reader = QRCodeReader();
@@ -350,7 +359,8 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
350359
child: Text(
351360
(Platform.isAndroid || Platform.isIOS)
352361
? AtOnboardingLocalizations.current.tutorial_scan_QRCode
353-
: AtOnboardingLocalizations.current.tutorial_upload_image_QRCode,
362+
: AtOnboardingLocalizations
363+
.current.tutorial_upload_image_QRCode,
354364
style: const TextStyle(
355365
color: Colors.white,
356366
fontWeight: FontWeight.w500,
@@ -378,7 +388,8 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
378388
builder: (context, controller) {
379389
return Center(
380390
child: Text(
381-
AtOnboardingLocalizations.current.tutorial_activate_your_atSign,
391+
AtOnboardingLocalizations
392+
.current.tutorial_activate_your_atSign,
382393
style: const TextStyle(
383394
color: Colors.white,
384395
fontWeight: FontWeight.w500,
@@ -425,7 +436,8 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
425436
}
426437

427438
Future<void> showErrorDialog(String? errorMessage) async {
428-
return AtOnboardingDialog.showError(context: context, message: errorMessage ?? '');
439+
return AtOnboardingDialog.showError(
440+
context: context, message: errorMessage ?? '');
429441
}
430442

431443
bool skipTutorial() {
@@ -437,13 +449,15 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
437449
if (widget.config.tutorialDisplay == AtOnboardingTutorialDisplay.always) {
438450
await Future.delayed(const Duration(milliseconds: 300));
439451
_showTutorial();
440-
} else if (widget.config.tutorialDisplay == AtOnboardingTutorialDisplay.never) {
452+
} else if (widget.config.tutorialDisplay ==
453+
AtOnboardingTutorialDisplay.never) {
441454
return;
442455
} else {
443456
final result = await AtOnboardingTutorialService.checkShowTutorial();
444457
if (!result) {
445458
await Future.delayed(const Duration(milliseconds: 300));
446-
final result = await AtOnboardingTutorialService.hasShowTutorialSignIn();
459+
final result =
460+
await AtOnboardingTutorialService.hasShowTutorialSignIn();
447461
if (!result) {
448462
_showTutorial();
449463
}
@@ -477,7 +491,8 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
477491
await _checkShowTutorial();
478492
}
479493

480-
Future<void> _processAESKey(String? atsign, String? aesKey, String contents) async {
494+
Future<void> _processAESKey(
495+
String? atsign, String? aesKey, String contents) async {
481496
dynamic authResponse;
482497
assert(aesKey != null || aesKey != '');
483498
assert(atsign != null || atsign != '');
@@ -494,7 +509,8 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
494509
return;
495510
}
496511

497-
_onboardingService.setAtClientPreference = widget.config.atClientPreference;
512+
_onboardingService.setAtClientPreference =
513+
widget.config.atClientPreference;
498514

499515
authResponse = await _onboardingService.authenticate(
500516
atsign,
@@ -549,16 +565,22 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
549565
bool isExist = await _onboardingService.isExistingAtsign(atsign);
550566
if (isExist) {
551567
_inprogressDialog.close();
552-
await _showAlertDialog(AtOnboardingErrorToString().pairedAtsign(atsign));
568+
await _showAlertDialog(
569+
AtOnboardingErrorToString().pairedAtsign(atsign));
553570
return;
554571
}
555572

556573
//Delay for waiting for ServerStatus change to teapot when activating an atsign
557574
await Future.delayed(const Duration(seconds: 10));
558575

559-
_onboardingService.setAtClientPreference = widget.config.atClientPreference;
576+
_onboardingService.setAtClientPreference =
577+
widget.config.atClientPreference;
560578

561-
authResponse = await _onboardingService.authenticate(atsign, cramSecret: secret, status: widget.onboardStatus);
579+
String? previousAtsign = _onboardingService.currentAtsign;
580+
_onboardingService.setAtsign = atsign;
581+
authResponse = await _onboardingService.onboard(
582+
cramSecret: secret,
583+
);
562584

563585
int round = 1;
564586
atSignStatus = await _onboardingService.checkAtSignServerStatus(atsign);
@@ -574,6 +596,12 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
574596
}
575597

576598
_inprogressDialog.close();
599+
600+
if (authResponse != AtOnboardingResponseStatus.authSuccess ||
601+
atSignStatus == ServerStatus.teapot) {
602+
_onboardingService.setAtsign = previousAtsign;
603+
}
604+
577605
if (authResponse == AtOnboardingResponseStatus.authSuccess) {
578606
if (atSignStatus == ServerStatus.teapot) {
579607
await _showAlertDialog(
@@ -615,7 +643,8 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
615643
e,
616644
title: AtOnboardingLocalizations.current.msg_auth_failed,
617645
);
618-
} else if (e == AtOnboardingResponseStatus.serverNotReached && _isContinue) {
646+
} else if (e == AtOnboardingResponseStatus.serverNotReached &&
647+
_isContinue) {
619648
await _processSharedSecret(atsign, secret);
620649
} else if (e == AtOnboardingResponseStatus.timeOut) {
621650
await _showAlertDialog(
@@ -670,8 +699,10 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
670699
}
671700

672701
Future<void> _showAlertDialog(dynamic errorMessage, {String? title}) async {
673-
String? messageString = AtOnboardingErrorToString().getErrorMessage(errorMessage);
674-
return AtOnboardingDialog.showError(context: context, title: title, message: messageString);
702+
String? messageString =
703+
AtOnboardingErrorToString().getErrorMessage(errorMessage);
704+
return AtOnboardingDialog.showError(
705+
context: context, title: title, message: messageString);
675706
}
676707

677708
void _showReferenceWebview() {
@@ -717,7 +748,8 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
717748
}
718749
_isContinue = true;
719750
String? fileContents, aesKey, atsign;
720-
FilePickerResult? result = await FilePicker.platform.pickFiles(type: FileType.any);
751+
FilePickerResult? result =
752+
await FilePicker.platform.pickFiles(type: FileType.any);
721753
if ((result?.files ?? []).isEmpty) {
722754
//User cancelled => do nothing
723755
return;
@@ -745,7 +777,9 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
745777
for (ArchiveFile file in archive) {
746778
if (file.name.contains('atKeys')) {
747779
fileContents = String.fromCharCodes(file.content);
748-
} else if (aesKey == null && atsign == null && file.name.contains('_private_key.png')) {
780+
} else if (aesKey == null &&
781+
atsign == null &&
782+
file.name.contains('_private_key.png')) {
749783
List<int> bytes = file.content as List<int>;
750784
String path = (await path_provider.getTemporaryDirectory()).path;
751785
File file1 = await File('${path}test').create();
@@ -760,7 +794,9 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
760794
}
761795
} else if (pickedFile.name.contains('atKeys')) {
762796
fileContents = File(path.toString()).readAsStringSync();
763-
} else if (aesKey == null && atsign == null && pickedFile.name.contains('_private_key.png')) {
797+
} else if (aesKey == null &&
798+
atsign == null &&
799+
pickedFile.name.contains('_private_key.png')) {
764800
//read scan QRcode and extract atsign,aeskey
765801
var result = decodeQrCode(path);
766802

@@ -783,7 +819,10 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
783819
}
784820
if (aesKey == null && atsign == null && fileContents != null) {
785821
List<String> keyData = fileContents.split(',"@');
786-
List<String> params = keyData[1].toString().substring(0, keyData[1].length - 2).split('":"');
822+
List<String> params = keyData[1]
823+
.toString()
824+
.substring(0, keyData[1].length - 2)
825+
.split('":"');
787826
atsign = "@${params[0]}";
788827
Map<String, dynamic> keyMap = jsonDecode(fileContents);
789828
aesKey = keyMap[AtOnboardingConstants.atSelfEncryptionKey];
@@ -794,8 +833,11 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
794833
loading = false;
795834
});
796835
return;
797-
} else if (OnboardingService.getInstance().formatAtSign(atsign) != _pairingAtsign && _pairingAtsign != null) {
798-
await showErrorDialog(AtOnboardingErrorToString().atsignMismatch(_pairingAtsign));
836+
} else if (OnboardingService.getInstance().formatAtSign(atsign) !=
837+
_pairingAtsign &&
838+
_pairingAtsign != null) {
839+
await showErrorDialog(
840+
AtOnboardingErrorToString().atsignMismatch(_pairingAtsign));
799841
setState(() {
800842
loading = false;
801843
});
@@ -841,7 +883,10 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
841883
// ignore: unnecessary_null_comparison
842884
if (aesKey == null && atsign == null && fileContents.isNotEmpty) {
843885
List<String> keyData = fileContents.split(',"@');
844-
List<String> params = keyData[1].toString().substring(0, keyData[1].length - 2).split('":"');
886+
List<String> params = keyData[1]
887+
.toString()
888+
.substring(0, keyData[1].length - 2)
889+
.split('":"');
845890
atsign = "@${params[0]}";
846891
Map<String, dynamic> keyMap = jsonDecode(fileContents);
847892
aesKey = keyMap[AtOnboardingConstants.atSelfEncryptionKey];
@@ -852,8 +897,11 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
852897
loading = false;
853898
});
854899
return;
855-
} else if (OnboardingService.getInstance().formatAtSign(atsign) != _pairingAtsign && _pairingAtsign != null) {
856-
await showErrorDialog(AtOnboardingErrorToString().atsignMismatch(_pairingAtsign));
900+
} else if (OnboardingService.getInstance().formatAtSign(atsign) !=
901+
_pairingAtsign &&
902+
_pairingAtsign != null) {
903+
await showErrorDialog(
904+
AtOnboardingErrorToString().atsignMismatch(_pairingAtsign));
857905
setState(() {
858906
loading = false;
859907
});
@@ -873,10 +921,14 @@ class _AtOnboardingHomeScreenState extends State<AtOnboardingHomeScreen> {
873921
}
874922

875923
bool _validatePickedFileContents(String fileContents) {
876-
bool result = fileContents.contains(BackupKeyConstants.PKAM_PRIVATE_KEY_FROM_KEY_FILE) &&
877-
fileContents.contains(BackupKeyConstants.PKAM_PUBLIC_KEY_FROM_KEY_FILE) &&
878-
fileContents.contains(BackupKeyConstants.ENCRYPTION_PRIVATE_KEY_FROM_FILE) &&
879-
fileContents.contains(BackupKeyConstants.ENCRYPTION_PUBLIC_KEY_FROM_FILE) &&
924+
bool result = fileContents
925+
.contains(BackupKeyConstants.PKAM_PRIVATE_KEY_FROM_KEY_FILE) &&
926+
fileContents
927+
.contains(BackupKeyConstants.PKAM_PUBLIC_KEY_FROM_KEY_FILE) &&
928+
fileContents
929+
.contains(BackupKeyConstants.ENCRYPTION_PRIVATE_KEY_FROM_FILE) &&
930+
fileContents
931+
.contains(BackupKeyConstants.ENCRYPTION_PUBLIC_KEY_FROM_FILE) &&
880932
fileContents.contains(BackupKeyConstants.SELF_ENCRYPTION_KEY_FROM_FILE);
881933
return result;
882934
}

0 commit comments

Comments
 (0)