impersonate method

Implementation

Future<GenericServerResponse<ImpersonateOutput>> impersonate(BeaImpersonateInput input) async {

  GenericServerResponse<ImpersonateOutput> genericServerResponse = new GenericServerResponse();
  genericServerResponse.data = new ImpersonateOutput();

  try{

    String url = UrlUtils.getUrl(_baseUrl, UrlUtils.URL_IMPERSONATE);

    url = "$url?userId=${input.userId}";

    Response response = await bsm!.genericBeaHttpPost(url, "");
    int? statusCode = response.statusCode;

    if(statusCode == 200){
      String? impersonateToken = response.data['result'];

      if(impersonateToken == null || impersonateToken.isEmpty){
        throw new Exception('Impossibile reperire il token di impersonificazione');
      }

      //leggo l'attuale token e lo salvo da parte per poterlo
      //ripristinare dopo
      String? currentToken = await storage.read(key: KeyUtils.KEY_TOKEN_SESSION);
      await storage.write(key: KeyUtils.KEY_TOKEN_SESSION_BEFORE_IMPERSONATE, value: currentToken);
      await storage.write(key: KeyUtils.KEY_TOKEN_SESSION, value: impersonateToken);

      genericServerResponse.data.userId = input.userId;
      genericServerResponse.data.token = impersonateToken;
      genericServerResponse.data.isImpersonated = true;

    }else if(statusCode == 500){
       var res = response.data['error'];
        BeaError? error = res == null ? res : BeaError.fromJson(res);
      if (error != null) {
        genericServerResponse.data.userId = input.userId;
        genericServerResponse.data.token = "";
        genericServerResponse.data.isImpersonated = false;
        genericServerResponse.beaError = error;
      } else {
        genericServerResponse.beaError = new BeaError("Unknown Error", 0, "");
      }
    }else{
      genericServerResponse.beaError = new BeaError('Codice $statusCode ricevuto dal server non gestito!', 0, "");
      throw new Exception('Codice $statusCode ricevuto dal server non gestito!');
    }
  }on Exception catch (e){
    print('BEA Impersonate error');
    FLog.error(
        className: this.runtimeType.toString(),
        methodName: "impersonate",
        text: 'BEA Impersonate error - $e');
    throw e;
  }

  return genericServerResponse;
}