verifyOtp function

Future<void> verifyOtp(
  1. String otp,
  2. String accessToken,
  3. BuildContext context
)

Implementation

Future<void> verifyOtp(
    String otp, String accessToken, BuildContext context) async {
  Dio dio = Dio();
  final String authUrl = Configuration.AuthUrl;
  final String url = '$authUrl/otpverify';

  try {
    final response = await dio.post(
      url,
      data: {
        'otp': otp, // OTP provided by the user
      },
      options: Options(
        headers: {
          'Authorization':
              'Bearer $accessToken', // Include Bearer token in the header
        },
      ),
    );

    if (response.statusCode == 200) {
      final FlutterSecureStorage secureStorage = FlutterSecureStorage();
      await secureStorage.delete(key: "opt_access_token");
      print('Response from backend: ${response.data}');
      final responseData = AuthResponseModel.fromJson(response.data);
      print('ErrorDetails: ${responseData.errorDetails}');
      print('Username: ${responseData.username}');
      print('idpname: ${responseData.idpname_backend}');
      print('Entities: ${responseData.entities}');
      print('Entities Length: ${responseData.entities.length}');
      if (responseData.entities.length == 1) {
        final entityDta = responseData.entities[0];
        print('Single Entity tenant: ${entityDta.tenant}');
        print('Single Entity refreshtoken: ${entityDta.refreshToken}');

        String jsonString = jsonEncode(response.data);
        await secureStorage.write(key: "Entities_List", value: jsonString);
        await secureStorage.write(key: "idpname_backend", value: responseData.idpname_backend);
        String? deviceId = await secureStorage.read(key: "DeviceId");
        GmailSSO.getJwtFromBackend(responseData.username,responseData.idpname_backend, entityDta.tenant,
            entityDta.refreshToken, deviceId ?? '', context);
      } else {
        print('Multiple Entities');
        String jsonString = jsonEncode(response.data);
        await secureStorage.write(key: "Entities_List", value: jsonString);
        await secureStorage.delete(key: "JWT_Token");
        await secureStorage.write(key: "idpname_backend", value: responseData.idpname_backend);
        context.goNamed('/');
      }
    } else {
      throw response.data['message'] ?? 'Error during OTP verification';
    }
  } on DioException catch (e) {
    String errorMessage = 'Error during OTP verification';
    if (e.response != null && e.response?.data != null) {
      errorMessage = e.response?.data['message'] ?? errorMessage;
    }
    throw errorMessage; // Throw only the error message
  } catch (e) { // Catch any other unknown errors
     print('Error during OTP verification: $e');
    throw Exception('Error during OTP verification');
  }

}