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;
}