private async Task <bool> sendError(Dictionary <string, string> parameters, string idUser, string error) { bool resultado = false; try { //cargamos el servlet de storage para almacenar la operacion de cancelacion string rsServlet = null; bool rsServletLoaded = parameters.TryGetValue(ConstantsAfirmaMetro.SERVLET_STORAGE, out rsServlet); if (!rsServletLoaded) { AfirmaMetroUtils.showMessageAndClose(labels.GetString("Iniciar_aplicacion_adecuado"), "TITULO"); } // Asegurarse de que la ventana actual está activa. string result = await AfirmaMetroUtils.SendErrorServlet(rsServlet, idUser, error); //Se trata la respuesta del servidor. if (result.Equals("OK")) { AfirmaMetroUtils.showMessageAndClose(labels.GetString("Error_cancelled_opperation"), "TITULO"); resultado = true; } else { AfirmaMetroUtils.showMessageAndClose(labels.GetString("Error_communicating_with_web") + ".\n" + labels.GetString("Info_regreso_navegador"), "TITULO"); } } catch (WebException) { AfirmaMetroUtils.showMessageAndClose(labels.GetString("Error_communicating_with_web") + ".\n" + labels.GetString("Info_regreso_navegador"), "TITULO"); } return(resultado); }
/// <summary> /// Método que se ejecuta cuando se pulsa el botón de firma. Genera la propia firma /// y la manda al servidor. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void Button_Sign_Click(object sender, RoutedEventArgs e) { DisableComponents(); if (!aliasList.SelectedItem.Equals(labels.GetString("Etiqueta_seleccion_alias"))) { //Obtenemos la firma de los datos. byte[] firma = null; bool isError = false; try { firma = CriptoManager.getCades( signParameters.GetData(), this.rsaKeyParameter, store.GetCertificate((string)aliasList.SelectedItem).Certificate.GetEncoded(), signParameters.GetSignatureAlgorithm(), signParameters.GetSignatureFormat() ); } catch { // Se produce un error en la operación de firma. isError = true; } // Se informa sobre el error de la firma. if (isError) { try { await AfirmaMetroUtils.SendErrorServlet( signParameters.GetStorageServletUrl().ToString(), signParameters.GetContentId(), ConstantsAfirmaMetro.ERROR_SIGNING + ConstantsAfirmaMetro.ERROR_SEPARATOR + ConstantsAfirmaMetro.DESC_ERROR_SIGNING ); } finally { AfirmaMetroUtils.showMessageAndClose(labels.GetString("Info_operacion_finalizada"), "Error en la firma electrónica"); } } // Se cifran los datos bool isErrorCiphering = false; int firmaSize = firma.Length; try { firma = CriptoManager.getDES(firma, signParameters.GetCipherKey()); } catch { isErrorCiphering = true; } if (isErrorCiphering) { try { await AfirmaMetroUtils.SendErrorServlet( signParameters.GetStorageServletUrl().ToString(), signParameters.GetContentId(), ConstantsAfirmaMetro.ERROR_INVALID_CIPHER_KEY + ConstantsAfirmaMetro.ERROR_SEPARATOR + ConstantsAfirmaMetro.DESC_ERROR_INVALID_CIPHER_KEY ); } finally { AfirmaMetroUtils.showMessageAndClose(labels.GetString("Info_operacion_finalizada"), "Operación finalizada correctamente (1)"); } } //Se envian los datos al servidor y se espera su respuesta. try { int padding = (8 - firmaSize); string response = AsyncHelpers.RunSync <string>(() => AfirmaMetroUtils.SendDataServlet( signParameters.GetStorageServletUrl().ToString(), signParameters.GetContentId(), firma, padding )); //Se trata la respuesta del servidor. if (response.Equals("OK")) { if (signParameters.IsWindowsNewUi()) { try { AfirmaMetroUtils.showMessageAndClose("La operación ha finalizado correctamente.\nPara continuar, vuelva al navegador desde el que inició la operación (interfaz 'moderno' de Windows).", "Operación finalizada correctamente"); } catch (Exception) { Application.Current.Exit(); } } else { AfirmaMetroUtils.showMessageAndClose("La operación ha finalizado correctamente.\nPara continuar, vuelva al navegador desde el que inició la operación (escritorio clásico de Windows).", "Operación finalizada correctamente"); } } else { AfirmaMetroUtils.showMessageAndClose(labels.GetString("Error_communicating_with_web") + ".\n" + labels.GetString("Info_regreso_navegador"), "TITULO"); } } catch (WebException) { AfirmaMetroUtils.showMessageAndClose(labels.GetString("Error_communicating_with_web") + ".\n" + labels.GetString("Info_regreso_navegador"), "TITULO"); } } EnableComponents(); }