diff --git a/lib/app/shared/enum/message/response_string/response_string.dart b/lib/app/shared/enum/message/response_string/response_string.dart index 083998b10..d0f874a1e 100644 --- a/lib/app/shared/enum/message/response_string/response_string.dart +++ b/lib/app/shared/enum/message/response_string/response_string.dart @@ -147,4 +147,5 @@ enum ResponseString { RESPONSE_STRING_errorGeneratingProof, RESPONSE_STRING_successfullyGeneratingProof, RESPONSE_STRING_pleaseAddXtoConnectToTheDapp, + RESPONSE_STRING_pleaseSwitchPolygonNetwork, } diff --git a/lib/app/shared/enum/message/response_string/response_string_extension.dart b/lib/app/shared/enum/message/response_string/response_string_extension.dart index 034dc0b96..5596a37b1 100644 --- a/lib/app/shared/enum/message/response_string/response_string_extension.dart +++ b/lib/app/shared/enum/message/response_string/response_string_extension.dart @@ -460,6 +460,11 @@ extension ResponseStringX on ResponseString { return globalMessage.RESPONSE_STRING_pleaseAddXtoConnectToTheDapp( injectedMessage ?? '', ); + + case ResponseString.RESPONSE_STRING_pleaseSwitchPolygonNetwork: + return globalMessage.RESPONSE_STRING_pleaseSwitchPolygonNetwork( + injectedMessage ?? '', + ); } } } diff --git a/lib/app/shared/enum/polygon_id_network.dart b/lib/app/shared/enum/polygon_id_network.dart index 4d31f4d14..2458dbac0 100644 --- a/lib/app/shared/enum/polygon_id_network.dart +++ b/lib/app/shared/enum/polygon_id_network.dart @@ -12,4 +12,22 @@ extension PolygonIdNetworkX on PolygonIdNetwork { return 'Polygon Mumbai'; } } + + String get tester { + switch (this) { + case PolygonIdNetwork.PolygonMainnet: + return 'polygon:main'; + case PolygonIdNetwork.PolygonMumbai: + return 'polygon:mumbai'; + } + } + + String get oppositeNetwork { + switch (this) { + case PolygonIdNetwork.PolygonMainnet: + return 'mumbai(testnet)'; + case PolygonIdNetwork.PolygonMumbai: + return 'mainnet'; + } + } } diff --git a/lib/app/shared/message_handler/global_message.dart b/lib/app/shared/message_handler/global_message.dart index 313e5e2fb..68903b6bf 100644 --- a/lib/app/shared/message_handler/global_message.dart +++ b/lib/app/shared/message_handler/global_message.dart @@ -369,4 +369,6 @@ class GlobalMessage { l10n.successfullyGeneratingProof; String RESPONSE_STRING_pleaseAddXtoConnectToTheDapp(String value) => l10n.pleaseAddXtoConnectToTheDapp(value); + String RESPONSE_STRING_pleaseSwitchPolygonNetwork(String value) => + l10n.pleaseSwitchPolygonNetwork(value); } diff --git a/lib/app/shared/message_handler/response_message.dart b/lib/app/shared/message_handler/response_message.dart index 7eb9bf3a5..12f405cef 100644 --- a/lib/app/shared/message_handler/response_message.dart +++ b/lib/app/shared/message_handler/response_message.dart @@ -682,6 +682,12 @@ class ResponseMessage with MessageHandler { context, injectedMessage: injectedMessage, ); + case ResponseString.RESPONSE_STRING_pleaseSwitchPolygonNetwork: + return ResponseString.RESPONSE_STRING_pleaseSwitchPolygonNetwork + .localise( + context, + injectedMessage: injectedMessage, + ); } } return ''; diff --git a/lib/dashboard/drawer/ssi/backup/backup_polygon_identity/cubit/backup_polygon_identity_cubit.dart b/lib/dashboard/drawer/ssi/backup/backup_polygon_identity/cubit/backup_polygon_identity_cubit.dart index 618aadc0b..39532339f 100644 --- a/lib/dashboard/drawer/ssi/backup/backup_polygon_identity/cubit/backup_polygon_identity_cubit.dart +++ b/lib/dashboard/drawer/ssi/backup/backup_polygon_identity/cubit/backup_polygon_identity_cubit.dart @@ -49,12 +49,10 @@ class BackupPolygonIdIdentityCubit extends Cubit { await polygonIdCubit.initialise(); - final polygonIdNetwork = - await secureStorageProvider.get(SecureStorageKeys.polygonIdNetwork); - String network = Parameters.POLYGON_MAIN_NETWORK; - if (polygonIdNetwork == PolygonIdNetwork.PolygonMainnet.toString()) { + if (polygonIdCubit.state.currentNetwork == + PolygonIdNetwork.PolygonMainnet) { network = Parameters.POLYGON_MAIN_NETWORK; } else { network = Parameters.POLYGON_TEST_NETWORK; diff --git a/lib/l10n/arb/app_en.arb b/lib/l10n/arb/app_en.arb index 99458ba82..4af8afebe 100644 --- a/lib/l10n/arb/app_en.arb +++ b/lib/l10n/arb/app_en.arb @@ -917,5 +917,12 @@ "placeholders": { "chain": {} } + }, + "pleaseSwitchPolygonNetwork": "Please switch to polygon {networkType} to perform this action.", + "@pleaseSwitchPolygonNetwork": { + "description": "", + "placeholders": { + "networkType": {} + } } } \ No newline at end of file diff --git a/lib/l10n/untranslated.json b/lib/l10n/untranslated.json index 1b81652c6..a61cfaa62 100644 --- a/lib/l10n/untranslated.json +++ b/lib/l10n/untranslated.json @@ -835,7 +835,8 @@ "noInformationWillBeSharedFromThisCredentialMessage", "burn", "wouldYouLikeToConfirmThatYouIntendToBurnThisNFT", - "pleaseAddXtoConnectToTheDapp" + "pleaseAddXtoConnectToTheDapp", + "pleaseSwitchPolygonNetwork" ], "es": [ @@ -1674,7 +1675,8 @@ "noInformationWillBeSharedFromThisCredentialMessage", "burn", "wouldYouLikeToConfirmThatYouIntendToBurnThisNFT", - "pleaseAddXtoConnectToTheDapp" + "pleaseAddXtoConnectToTheDapp", + "pleaseSwitchPolygonNetwork" ], "fr": [ @@ -1816,7 +1818,8 @@ "noInformationWillBeSharedFromThisCredentialMessage", "burn", "wouldYouLikeToConfirmThatYouIntendToBurnThisNFT", - "pleaseAddXtoConnectToTheDapp" + "pleaseAddXtoConnectToTheDapp", + "pleaseSwitchPolygonNetwork" ], "it": [ @@ -2655,6 +2658,7 @@ "noInformationWillBeSharedFromThisCredentialMessage", "burn", "wouldYouLikeToConfirmThatYouIntendToBurnThisNFT", - "pleaseAddXtoConnectToTheDapp" + "pleaseAddXtoConnectToTheDapp", + "pleaseSwitchPolygonNetwork" ] } diff --git a/lib/polygon_id/cubit/polygon_id_cubit.dart b/lib/polygon_id/cubit/polygon_id_cubit.dart index c0290ee4b..5df956625 100644 --- a/lib/polygon_id/cubit/polygon_id_cubit.dart +++ b/lib/polygon_id/cubit/polygon_id_cubit.dart @@ -67,6 +67,7 @@ class PolygonIdCubit extends Cubit { 'https://$ipfsApiKey:$ipfsApiKeySecret@ipfs.infura.io:5001'; String network = Parameters.POLYGON_MAIN_NETWORK; + PolygonIdNetwork currentNetwork = PolygonIdNetwork.PolygonMainnet; // set polygon main network a first if (polygonIdNetwork == null) { @@ -80,6 +81,7 @@ class PolygonIdCubit extends Cubit { if (polygonIdNetwork == PolygonIdNetwork.PolygonMainnet.toString()) { network = Parameters.POLYGON_MAIN_NETWORK; + currentNetwork = PolygonIdNetwork.PolygonMainnet; await polygonId.init( network: network, web3Url: Parameters.INFURA_URL, @@ -91,6 +93,7 @@ class PolygonIdCubit extends Cubit { ); } else { network = Parameters.POLYGON_TEST_NETWORK; + currentNetwork = PolygonIdNetwork.PolygonMumbai; await polygonId.init( network: network, web3Url: Parameters.INFURA_MUMBAI_URL, @@ -108,7 +111,13 @@ class PolygonIdCubit extends Cubit { //addIdentity await polygonId.addIdentity(mnemonic: mnemonic!, network: network); log.i('$network - get Identity'); - emit(state.copyWith(status: AppStatus.init, isInitialised: true)); + emit( + state.copyWith( + status: AppStatus.init, + isInitialised: true, + currentNetwork: currentNetwork, + ), + ); } catch (e) { emit(state.copyWith(status: AppStatus.error, isInitialised: false)); throw Exception('INIT_ISSUE - $e'); @@ -159,7 +168,12 @@ class PolygonIdCubit extends Cubit { //addIdentity await polygonId.addIdentity(mnemonic: mnemonic!, network: network); log.i('$network - get Identity'); - emit(state.copyWith(status: AppStatus.idle)); + emit( + state.copyWith( + status: AppStatus.idle, + currentNetwork: polygonIdNetwork, + ), + ); } catch (e) { emit(state.copyWith(status: AppStatus.error)); throw Exception('UPDATE_ISSUE - $e'); @@ -245,6 +259,33 @@ class PolygonIdCubit extends Cubit { final Iden3MessageEntity iden3MessageEntity = await getIden3Message(message: state.scannedResponse!); + bool checkNetwork = true; + + if (iden3MessageEntity.messageType == Iden3MessageType.authRequest) { + final body = iden3MessageEntity.body as AuthBodyRequest; + + if (body.scope!.isNotEmpty) { + log.i('do not consider network for verifier'); + checkNetwork = false; + } + } + + if (checkNetwork && + !iden3MessageEntity.from.contains(state.currentNetwork.tester)) { + emit( + state.copyWith( + status: AppStatus.error, + message: StateMessage.error( + messageHandler: ResponseMessage( + ResponseString.RESPONSE_STRING_pleaseSwitchPolygonNetwork, + ), + injectedMessage: state.currentNetwork.oppositeNetwork, + ), + ), + ); + return; + } + if (iden3MessageEntity.messageType == Iden3MessageType.authRequest) { final body = iden3MessageEntity.body as AuthBodyRequest; @@ -345,12 +386,9 @@ class PolygonIdCubit extends Cubit { final mnemonic = await secureStorageProvider.get(SecureStorageKeys.ssiMnemonic); - final polygonIdNetwork = - await secureStorageProvider.get(SecureStorageKeys.polygonIdNetwork); - String network = Parameters.POLYGON_MAIN_NETWORK; - if (polygonIdNetwork == PolygonIdNetwork.PolygonMainnet.toString()) { + if (state.currentNetwork == PolygonIdNetwork.PolygonMainnet) { network = Parameters.POLYGON_MAIN_NETWORK; } else { network = Parameters.POLYGON_TEST_NETWORK; @@ -422,12 +460,9 @@ class PolygonIdCubit extends Cubit { }) async { final mnemonic = await getSecureStorage.get(SecureStorageKeys.ssiMnemonic); - final polygonIdNetwork = - await secureStorageProvider.get(SecureStorageKeys.polygonIdNetwork); - String network = Parameters.POLYGON_MAIN_NETWORK; - if (polygonIdNetwork == PolygonIdNetwork.PolygonMainnet.toString()) { + if (state.currentNetwork == PolygonIdNetwork.PolygonMainnet) { network = Parameters.POLYGON_MAIN_NETWORK; } else { network = Parameters.POLYGON_TEST_NETWORK; @@ -505,12 +540,9 @@ class PolygonIdCubit extends Cubit { required Iden3MessageEntity iden3MessageEntity, required String mnemonic, }) async { - final polygonIdNetwork = - await secureStorageProvider.get(SecureStorageKeys.polygonIdNetwork); - String network = Parameters.POLYGON_MAIN_NETWORK; - if (polygonIdNetwork == PolygonIdNetwork.PolygonMainnet.toString()) { + if (state.currentNetwork == PolygonIdNetwork.PolygonMainnet) { network = Parameters.POLYGON_MAIN_NETWORK; } else { network = Parameters.POLYGON_TEST_NETWORK; diff --git a/lib/polygon_id/cubit/polygon_id_state.dart b/lib/polygon_id/cubit/polygon_id_state.dart index 5d0e5e650..5d153cae3 100644 --- a/lib/polygon_id/cubit/polygon_id_state.dart +++ b/lib/polygon_id/cubit/polygon_id_state.dart @@ -11,6 +11,7 @@ class PolygonIdState extends Equatable { this.scannedResponse, this.claims, this.credentialManifests, + this.currentNetwork = PolygonIdNetwork.PolygonMainnet, }); factory PolygonIdState.fromJson(Map json) => @@ -25,6 +26,7 @@ class PolygonIdState extends Equatable { final String? scannedResponse; final List? claims; final List? credentialManifests; + final PolygonIdNetwork currentNetwork; PolygonIdState error({required StateMessage message}) { return copyWith( @@ -43,6 +45,7 @@ class PolygonIdState extends Equatable { String? scannedResponse, List? claims, List? credentialManifests, + PolygonIdNetwork? currentNetwork, }) { return PolygonIdState( status: status, @@ -53,6 +56,7 @@ class PolygonIdState extends Equatable { scannedResponse: scannedResponse ?? this.scannedResponse, claims: claims ?? this.claims, credentialManifests: credentialManifests ?? this.credentialManifests, + currentNetwork: currentNetwork ?? this.currentNetwork, ); } @@ -65,6 +69,7 @@ class PolygonIdState extends Equatable { message, isInitialised, scannedResponse, + currentNetwork, loadingText, credentialManifests, ];