/// <summary> /// Método que carga un almacén. Solicita la contraseña del almacén seleccionado y carga los alias de dicho /// alamacén en la lista de alias si la contraseña proporcionada fuera correcta. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void ComboBox_Stores_Selection_Changed(object sender, SelectionChangedEventArgs e) { if (pfxList.SelectedItem != null) { // Si no se ha seleccionado el elemento "dummy"... if (!pfxList.SelectedItem.Equals(labels.GetString("Etiqueta_seleccion_almacen"))) { IReadOnlyList <StorageFile> files = await ApplicationData.Current.LocalFolder.GetFilesAsync(); StorageFile fileSelected = null; foreach (StorageFile file in files) { if (file.Name.Equals((String)pfxList.SelectedItem)) { fileSelected = file; break; } } if (fileSelected != null) { using (StreamReader reader = new StreamReader(await fileSelected.OpenStreamForReadAsync())) { // Pedimos el PIN del almacén al usuario CredentialPanel2 cp2 = new CredentialPanel2(pfxList.SelectedItem.ToString()); cp2.Focus(Windows.UI.Xaml.FocusState.Programmatic); CustomDialog customDialog = new CustomDialog(cp2, labels.GetString("Etiqueta_peticion_pass")); customDialog.Commands.Add(new UICommand(labels.GetString("Boton_aceptar"))); customDialog.Commands.Add(new UICommand(labels.GetString("Boton_cancelar"))); customDialog.DefaultCommandIndex = 0; customDialog.CancelCommandIndex = 1; IUICommand com = await customDialog.ShowAsync(); // El usuario ha cancelado, si solo no estaba el elemento "dummy" // hay que añadirlo en la posición cero y seleccionarlo, para permitirle reintentar if (com.Label.Equals(labels.GetString("Boton_cancelar"))) { if (!pfxList.Items.Contains(labels.GetString("Etiqueta_seleccion_almacen"))) { pfxList.Items.Insert(0, labels.GetString("Etiqueta_seleccion_almacen")); } pfxList.SelectedIndex = 0; } // El usuario ha aceptado en el diálogo de PIN if (com.Label.Equals(labels.GetString("Boton_aceptar"))) { aliasList.Items.Clear(); try { store = new Pkcs12Store(reader.BaseStream, cp2.getPassword().ToCharArray()); foreach (string n in store.Aliases) { if (store.IsKeyEntry(n)) { AsymmetricKeyEntry key = store.GetKey(n); if (key.Key.IsPrivate) { aliasList.Items.Clear(); aliasList.IsEnabled = true; RsaPrivateCrtKeyParameters parameters = key.Key as RsaPrivateCrtKeyParameters; rsaKeyParameter = (RsaKeyParameters)key.Key; foreach (object s in store.Aliases) { aliasList.Items.Add((string)s); } } } } } catch { AfirmaMetroUtils.showMessage(labels.GetString("Error_carga_almacen"), "Error en el almacén de claves" + " (" + pfxList.SelectedItem + ")"); // Para permitirle reintentar insertamos el elemento "dummy" como primer elemento // y lo seleccionamos if (!pfxList.Items.Contains(labels.GetString("Etiqueta_seleccion_almacen"))) { pfxList.Items.Insert(0, labels.GetString("Etiqueta_seleccion_almacen")); } pfxList.SelectedIndex = 0; return; } // Se ha seleccionado correctamente un almacén, eliminamos el componente "dummy" if (pfxList.Items.Contains(labels.GetString("Etiqueta_seleccion_almacen"))) { pfxList.Items.Remove(labels.GetString("Etiqueta_seleccion_almacen")); } aliasList.SelectedIndex = 0; } } } } else { disableComboAlias(); } } }
/// <summary> /// Método que carga un almacén. Solicita la contraseña del almacén seleccionado y carga los alias de dicho /// alamacén en la lista de alias si la contraseña proporcionada fuera correcta. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void ComboBox_Stores_Selection_Changed(object sender, SelectionChangedEventArgs e) { if (pfxList.SelectedItem != null) { // Si no se ha seleccionado el elemento "dummy"... if (!pfxList.SelectedItem.Equals(labels.GetString("Etiqueta_seleccion_almacen"))) { IReadOnlyList<StorageFile> files = await ApplicationData.Current.LocalFolder.GetFilesAsync(); StorageFile fileSelected = null; foreach (StorageFile file in files) { if (file.Name.Equals((String)pfxList.SelectedItem)) { fileSelected = file; break; } } if (fileSelected != null) { using (StreamReader reader = new StreamReader(await fileSelected.OpenStreamForReadAsync())) { // Pedimos el PIN del almacén al usuario CredentialPanel2 cp2 = new CredentialPanel2(pfxList.SelectedItem.ToString()); cp2.Focus(Windows.UI.Xaml.FocusState.Programmatic); CustomDialog customDialog = new CustomDialog(cp2, labels.GetString("Etiqueta_peticion_pass")); customDialog.Commands.Add(new UICommand(labels.GetString("Boton_aceptar"))); customDialog.Commands.Add(new UICommand(labels.GetString("Boton_cancelar"))); customDialog.DefaultCommandIndex = 0; customDialog.CancelCommandIndex = 1; IUICommand com = await customDialog.ShowAsync(); // El usuario ha cancelado, si solo no estaba el elemento "dummy" // hay que añadirlo en la posición cero y seleccionarlo, para permitirle reintentar if (com.Label.Equals(labels.GetString("Boton_cancelar"))) { if (!pfxList.Items.Contains(labels.GetString("Etiqueta_seleccion_almacen"))) { pfxList.Items.Insert(0, labels.GetString("Etiqueta_seleccion_almacen")); } pfxList.SelectedIndex = 0; } // El usuario ha aceptado en el diálogo de PIN if (com.Label.Equals(labels.GetString("Boton_aceptar"))) { aliasList.Items.Clear(); try { store = new Pkcs12Store(reader.BaseStream, cp2.getPassword().ToCharArray()); foreach (string n in store.Aliases) { if (store.IsKeyEntry(n)) { AsymmetricKeyEntry key = store.GetKey(n); if (key.Key.IsPrivate) { aliasList.Items.Clear(); aliasList.IsEnabled = true; RsaPrivateCrtKeyParameters parameters = key.Key as RsaPrivateCrtKeyParameters; rsaKeyParameter = (RsaKeyParameters)key.Key; foreach (object s in store.Aliases) { aliasList.Items.Add((string)s); } } } } } catch { AfirmaMetroUtils.showMessage(labels.GetString("Error_carga_almacen"), "Error en el almacén de claves" + " (" + pfxList.SelectedItem + ")"); // Para permitirle reintentar insertamos el elemento "dummy" como primer elemento // y lo seleccionamos if (!pfxList.Items.Contains(labels.GetString("Etiqueta_seleccion_almacen"))) { pfxList.Items.Insert(0, labels.GetString("Etiqueta_seleccion_almacen")); } pfxList.SelectedIndex = 0; return; } // Se ha seleccionado correctamente un almacén, eliminamos el componente "dummy" if (pfxList.Items.Contains(labels.GetString("Etiqueta_seleccion_almacen"))) { pfxList.Items.Remove(labels.GetString("Etiqueta_seleccion_almacen")); } aliasList.SelectedIndex = 0; } } } } else { disableComboAlias(); } } }