--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/securitysettings/cpeapuiplugins/cpeaptlsmethodsui/src/cpeappacstoreui.cpp Mon Oct 04 00:19:54 2010 +0300
@@ -0,0 +1,599 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ * Control Panel QT UI for PAC store configuration
+ *
+ */
+
+/*
+ * %version: 6 %
+ */
+
+// System includes
+#include <HbMessageBox>
+#include <HbInputDialog>
+#include <HbAction>
+#include <HbLineEdit>
+#include <cpsettingformitemdata.h>
+#include <cpitemdatahelper.h>
+#include <eapqtvalidator.h>
+#include <eapqtpacstoreconfig.h>
+
+// User includes
+#include "cpeaptlsmethodsui.h"
+#include "cpeappacstoreui.h"
+
+/*!
+ * \class CpEapPacStoreUi
+ * \brief Implementes PAC Store configuration group.
+ */
+
+// External function prototypes
+
+// Local constants
+
+/*!
+ * First lineEdit of the dialog
+ */
+static const int FirstRow = 0;
+/*
+ * Second lineEdit of the dialog
+ */
+static const int SecondRow = 1;
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+/*!
+ * Constructor.
+ *
+ * @param [in] configIf Pointer to EapQtConfigInterface
+ */
+
+CpEapPacStoreUi::CpEapPacStoreUi(EapQtConfigInterface *configIf) :
+ mConfigIf(configIf),
+ mItemDataHelper(NULL),
+ mPacStoreGroup(NULL),
+ mPacStorePassword(NULL),
+ mResetPacStore(NULL),
+ mPacStorePasswordState(0),
+ mExistPasswordDialog(NULL),
+ mNewPasswordDialog(NULL),
+ mMessageBox(NULL)
+{
+ qDebug("CpEapPacStoreUi::CpEapPacStoreUi()");
+}
+
+/*!
+ * Destructor.
+ */
+CpEapPacStoreUi::~CpEapPacStoreUi()
+{
+ qDebug("CpEapPacStoreUi::~CpEapPacStoreUi()");
+
+}
+
+/*!
+ * Returns PAC store UI group
+ *
+ * @param [in] dataHelper CpItemDataHelper to add Connections
+ *
+ * @return PAC store group
+ */
+CpSettingFormItemData* CpEapPacStoreUi::uiInstance(
+ CpItemDataHelper &dataHelpper)
+{
+ //Store the address of the Data Helper
+ mItemDataHelper = &dataHelpper;
+
+ mPacStoreGroup.reset(new CpSettingFormItemData(
+ HbDataFormModelItem::GroupItem,
+ hbTrId("txt_occ_subhead_pac_store")));
+ mPacStoreGroup->setContentWidgetData("objectName", "CpEapPacStoreUiGroupItem");
+
+ // Read PAC Store configuration
+ bool configurationRead = mConfigIf->readPacStoreConfiguration(
+ mPacStoreConfig);
+ if (!configurationRead) {
+ // Use default value - PAC store password prompt
+ qDebug("CpEapPacStoreUi::uiInstance - read PAC store configuration failed.");
+ }
+
+ // Create PAC store password selection comboBox
+ createPacStorePassword();
+
+ // Create Reset PAC store button
+ createResetPacStore();
+
+ return mPacStoreGroup.take();
+}
+
+/*!
+ * Creates PAC store password selection comboBox
+ */
+void CpEapPacStoreUi::createPacStorePassword()
+{
+ qDebug("CpEapPacStoreUi::createPacStorePassword()");
+ // Create PAC store password comboBox
+ mPacStorePassword = new CpSettingFormItemData(
+ HbDataFormModelItem::ComboBoxItem,
+ hbTrId("txt_occ_setlabel_pac_store_password"));
+ mPacStoreGroup->appendChild(mPacStorePassword);
+ mPacStorePassword->setContentWidgetData(
+ "objectName",
+ "CpEapPacStoreUiPassword");
+
+ // Add items to comboBox List
+ QStringList items;
+ items << hbTrId("txt_occ_setlabel_pac_store_password_val_prompt")
+ << hbTrId("txt_occ_setlabel_pac_store_password_val_user_defin");
+ mPacStorePassword->setContentWidgetData("items", items);
+
+ // Initialize selection from PAC store configuration
+ if (mPacStoreConfig.value(EapQtPacStoreConfig::PacStoreState).toInt()
+ == EapQtPacStoreConfig::PacStoreStatePasswordStored) {
+ mPacStorePassword->setContentWidgetData("currentIndex", PacStorePasswordUserDefined);
+ mPacStorePasswordState = PacStorePasswordUserDefined;
+ } else {
+ mPacStorePassword->setContentWidgetData("currentIndex", PacStorePasswordPrompt);
+ mPacStorePasswordState = PacStorePasswordPrompt;
+ }
+
+ // Connect signal for password state changed
+ mItemDataHelper->addConnection(mPacStorePassword, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(pacStorePasswordChanged(int)));
+}
+
+/*!
+ * Creates reset PAC store button
+ */
+void CpEapPacStoreUi::createResetPacStore()
+{
+ qDebug("CpEapPacStoreUi::createResetPacStore()");
+
+ // Create button
+ mResetPacStore = new CpSettingFormItemData(
+ HbDataFormModelItem::ToggleValueItem,
+ hbTrId(""));
+ mPacStoreGroup->appendChild(mResetPacStore);
+ mResetPacStore->setContentWidgetData(
+ "objectName",
+ "CpEapPacStoreUiResetPacStore");
+
+ // Define text for the button
+ mResetPacStore->setContentWidgetData("text",
+ hbTrId("txt_occ_button_reset_pac_store"));
+ mResetPacStore->setContentWidgetData("additionalText",
+ hbTrId("txt_occ_button_reset_pac_store"));
+
+ // Connect signal for button pressed
+ mItemDataHelper->addConnection(
+ mResetPacStore,
+ SIGNAL(valueChanged(QPersistentModelIndex, QVariant)),
+ this,
+ SLOT(resetPacStoreButtonPressed(QPersistentModelIndex, QVariant)));
+}
+
+/*!
+ * Set PAC store password state.
+ * This is called when state changed has failed and state shall be restored.
+ *
+ * @param [in] state Pac store password state: Prompt/Userd defined.
+ */
+void CpEapPacStoreUi::setPacStorePasswordState(const PacStorePasswordIndexes state)
+{
+ // Remove signal connection while state is restored
+ mItemDataHelper->removeConnection(mPacStorePassword, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(pacStorePasswordChanged(int)));
+ mPacStorePassword->setContentWidgetData("currentIndex", state);
+ // Restore connection
+ mItemDataHelper->addConnection(mPacStorePassword, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(pacStorePasswordChanged(int)));
+ mPacStorePasswordState = state;
+}
+
+/*!
+ * Show PAC store password query when PAC store already exists
+ */
+void CpEapPacStoreUi::showExistPasswordQuery()
+{
+ qDebug("CpEapPacStoreUi::showExistPasswordQuery()");
+
+ // Create dialog
+ QScopedPointer<HbInputDialog> existPasswordDialog(new HbInputDialog());
+ existPasswordDialog->setObjectName("CpEapPacStoreUiExistPasswordDialog");
+ existPasswordDialog->setAttribute(Qt::WA_DeleteOnClose);
+ existPasswordDialog->setPromptText(hbTrId("txt_occ_dialog_pac_store_password"));
+ existPasswordDialog->setInputMode(HbInputDialog::TextInput);
+
+ // Add validator
+ mValidatorPacStore.reset(
+ mConfigIf->validatorPacStore(
+ EapQtPacStoreConfig::PacStorePasswordConfirmation));
+ Q_ASSERT(mValidatorPacStore.data());
+ mValidatorPacStore->updateEditor(existPasswordDialog->lineEdit());
+
+ // Set Password echo mode
+ existPasswordDialog->setEchoMode(HbLineEdit::Password);
+
+ // Configurate buttons
+ existPasswordDialog->clearActions();
+ HbAction *okAction = new HbAction(
+ hbTrId("txt_common_button_ok"),
+ existPasswordDialog.data());
+ existPasswordDialog->addAction(okAction);
+ okAction->setObjectName("CpEapPacStoreUiExistPasswordDialogOkAction");
+ bool connected = connect(okAction,
+ SIGNAL(triggered()),
+ this,
+ SLOT(completeExistPasswordQuery()));
+ Q_ASSERT(connected);
+ HbAction *cancelAction = new HbAction(
+ hbTrId("txt_common_button_cancel"),
+ existPasswordDialog.data());
+ existPasswordDialog->addAction(cancelAction);
+ cancelAction->setObjectName("CpEapPacStoreUiExistPasswordDialogCancelAction");
+ connected = connect(cancelAction,
+ SIGNAL(triggered()),
+ this,
+ SLOT(cancelPasswordQuery()));
+ Q_ASSERT(connected);
+
+ // Take the ownership of the dialog from QScopedPointer
+ mExistPasswordDialog = existPasswordDialog.take();
+
+ // Show dialog
+ mExistPasswordDialog->show();
+}
+
+/*!
+ * Show create PAC store password query when no PAC store exists
+ */
+void CpEapPacStoreUi::showNewPasswordQuery()
+{
+ qDebug("CpEapPacStoreUi::showNewPasswordQuery()");
+
+ // Create dialog
+ QScopedPointer<HbInputDialog> newPasswordDialog(new HbInputDialog());
+ newPasswordDialog->setObjectName("CpEapPacStoreUiNewPasswordDialog");
+ newPasswordDialog->setAttribute(Qt::WA_DeleteOnClose);
+ newPasswordDialog->setAdditionalRowVisible(true);
+ newPasswordDialog->setPromptText(
+ hbTrId("txt_occ_dialog_create_password_for_encrypted_pac_s"),
+ FirstRow);
+ newPasswordDialog->setPromptText(
+ hbTrId("txt_occ_dialog_verify_password"),
+ SecondRow);
+ newPasswordDialog->setInputMode(HbInputDialog::TextInput);
+
+ // Add validators
+ mValidatorPacStore.reset(
+ mConfigIf->validatorPacStore(
+ EapQtPacStoreConfig::PacStorePassword));
+ Q_ASSERT(mValidatorPacStore.data());
+ mValidatorPacStore->updateEditor(newPasswordDialog->lineEdit(FirstRow));
+ mValidatorPacStore->updateEditor(newPasswordDialog->lineEdit(SecondRow));
+
+ // Set Password echo mode
+ newPasswordDialog->setEchoMode(HbLineEdit::Password, FirstRow);
+ newPasswordDialog->setEchoMode(HbLineEdit::Password, SecondRow);
+
+ // Configure buttons
+ newPasswordDialog->clearActions();
+ HbAction *okAction = new HbAction(
+ hbTrId("txt_common_button_ok"),
+ newPasswordDialog.data());
+ newPasswordDialog->addAction(okAction);
+ okAction->setObjectName("CpEapPacStoreUiNewPasswordDialogOkAction");
+ bool connected = connect(okAction,
+ SIGNAL(triggered()),
+ this,
+ SLOT(completeNewPasswordQuery()));
+ Q_ASSERT(connected);
+ HbAction *cancelAction = new HbAction(
+ hbTrId("txt_common_button_cancel"),
+ newPasswordDialog.data());
+ newPasswordDialog->addAction(cancelAction);
+ cancelAction->setObjectName("CpEapPacStoreUiNewPasswordDialogCancelAction");
+ connected = connect(cancelAction,
+ SIGNAL(triggered()),
+ this,
+ SLOT(cancelPasswordQuery()));
+
+ // Take the ownership of the dialog from QScopedPointer
+ mNewPasswordDialog = newPasswordDialog.take();
+
+ // Show dialog
+ mNewPasswordDialog->show();
+}
+
+/*!
+ * Shows message box with "OK" button using given text.
+ *
+ * @param [in] type Message box type
+ * @param [in] text Text to be shown
+ */
+void CpEapPacStoreUi::showMessageBox(
+ HbMessageBox::MessageBoxType type,
+ const QString &text)
+{
+ // Create a message box
+ mMessageBox = QSharedPointer<HbMessageBox>(new HbMessageBox(type));
+ mMessageBox->setObjectName("CpEapPacStoreUiMessageBox");
+ mMessageBox->setText(text);
+ mMessageBox->setModal(true);
+ mMessageBox->setTimeout(HbPopup::NoTimeout);
+ mMessageBox->open();
+}
+
+/*!
+ * This slot is called when PAC Store password state has been changed
+ *
+ * @param [in] value New state of password (prompt/user defined)
+ */
+void CpEapPacStoreUi::pacStorePasswordChanged(int value)
+{
+ qDebug("CpEapPacStoreUi::pacStorePasswordChanged()");
+
+ if (mPacStorePasswordState != value) {
+ // Value is really changed
+ if (value == PacStorePasswordPrompt) {
+ // Prompt
+ qDebug("CpEapPacStoreUi::pacStorePasswordChanged - Prompt");
+
+ //Show message box to confirm the PAC store password clearing
+ HbMessageBox *questionBox = new HbMessageBox(HbMessageBox::MessageTypeQuestion);
+ questionBox->setObjectName("CpEapPacStoreUiClearPasswordQuestion");
+ questionBox->setText(hbTrId("txt_occ_info_pac_store_password_will_no_longer_be"));
+ questionBox->setModal(true);
+ questionBox->setTimeout(HbPopup::NoTimeout);
+ questionBox->setAttribute(Qt::WA_DeleteOnClose);
+ questionBox->setStandardButtons(HbMessageBox::Yes | HbMessageBox::No);
+ questionBox->open(this,SLOT(clearPacStorePasswordConfirmed(int)));
+ } else {
+ //User defined
+ Q_ASSERT(value == PacStorePasswordUserDefined);
+ qDebug("CpEapPacStoreUi::pacStorePasswordChanged - User defined");
+ // Read from PAC store config if PAC store exists
+ EapQtPacStoreConfig pacStoreConfig;
+ bool configurationRead = mConfigIf->readPacStoreConfiguration(
+ pacStoreConfig);
+ if (!configurationRead) {
+ qDebug("CpEapPacStoreUi::pacStorePasswordChanged - read PAC store configuration failed.");
+ }
+
+ if (pacStoreConfig.value(EapQtPacStoreConfig::PacStoreState).toInt()
+ == EapQtPacStoreConfig::PacStoreStatePasswordRequired) {
+ // PAC store exists, show 'PAC store password' query
+ qDebug("CpEapPacStoreUi::pacStorePasswordChanged - Exist password query");
+ showExistPasswordQuery();
+ } else if (pacStoreConfig.value(EapQtPacStoreConfig::PacStoreState).toInt()
+ == EapQtPacStoreConfig::PacStoreStateStoreNotExists) {
+ // PAC store doesn't exist, show create password query
+ qDebug("CpEapPacStoreUi::pacStorePasswordChanged - Create new password");
+ showNewPasswordQuery();
+ } else {
+ // If password already stored no prompt needed
+ qDebug("CpEapPacStoreUi::pacStorePasswordChanged - Password stored");
+ }
+ }
+ }
+}
+
+/*!
+ * Slot for handling "Reset PAC store" button presses.
+ *
+ * @param [in] index Obsolete parameter, not needed
+ * @param [in] value Obsolete parameter, not needed
+ */
+void CpEapPacStoreUi::resetPacStoreButtonPressed(
+ QPersistentModelIndex index,
+ QVariant value)
+{
+ qDebug("CpEapPacStoreUi::resetPacStoreButtonPressed");
+
+ Q_UNUSED(index);
+ Q_UNUSED(value);
+
+ //Show message box to confirm the PAC store resetting
+ HbMessageBox *questionBox = new HbMessageBox(HbMessageBox::MessageTypeQuestion);
+ questionBox->setObjectName("CpEapPacStoreUiRestPacStoreQuestion");
+ questionBox->setText(hbTrId("txt_occ_info_remove_pac_store_all_credentials_wil"));
+ questionBox->setModal(true);
+ questionBox->setTimeout(HbPopup::NoTimeout);
+ questionBox->setAttribute(Qt::WA_DeleteOnClose);
+ questionBox->setStandardButtons(HbMessageBox::Yes | HbMessageBox::No);
+ questionBox->open(this,SLOT(resetPacStoreConfirmed(int)));
+}
+
+/*!
+ * Slot for clear PAC store Password after confirmed.
+ *
+ * @param [in] action User action
+ */
+void CpEapPacStoreUi::clearPacStorePasswordConfirmed(int action)
+{
+ qDebug("CpEapPacStoreUi::clearPacStorePasswordConfirmed()");
+ if (action == HbMessageBox::Yes) {
+ // User Clicked Yes
+ // Clear PAC store password
+ EapQtPacStoreConfig pacStoreConfig;
+ pacStoreConfig.setValue(EapQtPacStoreConfig::PacStoreSavePassword, false);
+ bool status = mConfigIf->savePacStoreConfiguration(
+ pacStoreConfig);
+ qDebug("CpEapPacStoreUi::clearPacStorePasswordConfirmed - status: %d", status);
+ mPacStorePasswordState = PacStorePasswordPrompt;
+ // Show error note to user
+ if (!status) {
+ // Show error note to user
+ showMessageBox(
+ HbMessageBox::MessageTypeWarning,
+ hbTrId("txt_occ_info_unable_to_save_setting"));
+ }
+ } else {
+ // User Clicked No
+ Q_ASSERT(action == HbMessageBox::No);
+ // Set PAC store password back to 'User defined'
+ setPacStorePasswordState(PacStorePasswordUserDefined);
+ }
+}
+
+/*!
+ * Slot for reset PAC store after confirmed.
+ *
+ * @param [in] action User action
+ */
+void CpEapPacStoreUi::resetPacStoreConfirmed(int action)
+{
+ qDebug("CpEapPacStoreUi::resetPacStoreConfirmed()");
+ if (action == HbMessageBox::Yes) {
+ // User Clicked Yes
+ // Reset PAC Store
+ EapQtPacStoreConfig pacStoreConfig;
+ pacStoreConfig.setValue(EapQtPacStoreConfig::PacStoreReset, true);
+ bool status = mConfigIf->savePacStoreConfiguration(
+ pacStoreConfig);
+ qDebug("CpEapPacStoreUi::resetPacStoreConfirmed - reset status: %d", status);
+ if (!status) {
+ // Show error note to user
+ showMessageBox(
+ HbMessageBox::MessageTypeWarning,
+ hbTrId("txt_occ_info_unable_to_save_setting"));
+ }
+
+ // Set PAC store password selection to 'Prompt'
+ setPacStorePasswordState(PacStorePasswordPrompt);
+ } else {
+ // User Clicked No
+ Q_ASSERT(action == HbMessageBox::No);
+ // Do nothing (don't reset PAC store)
+ qDebug("CpEapPacStoreUi::resetPacStoreConfirmed - Do not reset.");
+ }
+}
+
+/*!
+ * Slot for confirm given PAC store password when PAC store exists
+ */
+void CpEapPacStoreUi::completeExistPasswordQuery()
+{
+ qDebug("CpEapPacStoreUi::completeExistPasswordQuery()");
+ QString password = mExistPasswordDialog->value().toString();
+ if (mValidatorPacStore->validate(password) == EapQtValidator::StatusOk) {
+ qDebug("CpEapPacStoreUi::completeExistPasswordQuery() - save password");
+ // Password is OK, save it
+ EapQtPacStoreConfig pacStoreConfig;
+ pacStoreConfig.setValue(EapQtPacStoreConfig::PacStorePassword, password);
+ pacStoreConfig.setValue(EapQtPacStoreConfig::PacStoreSavePassword, true);
+ bool status = mConfigIf->savePacStoreConfiguration(
+ pacStoreConfig);
+ qDebug("CpEapPacStoreUi::completeExistPasswordQuery - save status: %d", status);
+ if (status) {
+ mPacStorePasswordState = PacStorePasswordUserDefined;
+ } else {
+ setPacStorePasswordState(PacStorePasswordPrompt);
+ // Show error note to user
+ showMessageBox(
+ HbMessageBox::MessageTypeWarning,
+ hbTrId("txt_occ_info_unable_to_save_setting"));
+ }
+
+ } else {
+ // Existing password cannot be changed
+ // Set PAC store password selection back to 'Prompt'
+ setPacStorePasswordState(PacStorePasswordPrompt);
+ // Show info popup
+ HbMessageBox *infoBox = new HbMessageBox(HbMessageBox::MessageTypeInformation);
+ infoBox->setObjectName("CpEapPacStoreUiPasswordCannotChangeInfo");
+ infoBox->setText(hbTrId("txt_occ_info_existing_password_cannot_be_changed"));
+ infoBox->setModal(true);
+ infoBox->setTimeout(HbPopup::NoTimeout);
+ infoBox->setAttribute(Qt::WA_DeleteOnClose);
+ infoBox->setStandardButtons(HbMessageBox::Ok);
+ infoBox->open();
+ }
+}
+
+/*!
+ * Slot for save given PAC store password when no PAC store exists
+ */
+void CpEapPacStoreUi::completeNewPasswordQuery()
+{
+ qDebug("CpEapPacStoreUi::completeNewPasswordQuery()");
+ QString password = mNewPasswordDialog->value(0).toString();
+ QString passwordConfirm = mNewPasswordDialog->value(1).toString();
+
+ if (password == passwordConfirm &&
+ mValidatorPacStore->validate(password) == EapQtValidator::StatusOk) {
+ // Password is OK, save it
+ qDebug("CpEapPacStoreUi::completeNewPasswordQuery() - password OK. Save it.");
+ EapQtPacStoreConfig pacStoreConfig;
+ pacStoreConfig.setValue(EapQtPacStoreConfig::PacStorePassword, password);
+ pacStoreConfig.setValue(EapQtPacStoreConfig::PacStoreSavePassword, true);
+ bool status = mConfigIf->savePacStoreConfiguration(
+ pacStoreConfig);
+ qDebug("CpEapPacStoreUi::completeNewPasswordQuery - save status: %d", status);
+ if (status) {
+ mPacStorePasswordState = PacStorePasswordUserDefined;
+ } else {
+ setPacStorePasswordState(PacStorePasswordPrompt);
+ // Show error note to user
+ showMessageBox(
+ HbMessageBox::MessageTypeWarning,
+ hbTrId("txt_occ_info_unable_to_save_setting"));
+ }
+ } else {
+ // Password is not OK, show info popup
+ qDebug("CpEapPacStoreUi::completeNewPasswordQuery() - password Not OK. Show popup.");
+ HbMessageBox *infoBox = new HbMessageBox(HbMessageBox::MessageTypeInformation);
+ infoBox->setObjectName("CpEapPacStoreUiInvalidPasswordInfo");
+ if (password != passwordConfirm) {
+ infoBox->setText(hbTrId("txt_occ_info_passwords_do_not_match_try_again"));
+ } else {
+ infoBox->setText(hbTrId("txt_occ_info_invalid_input"));
+ }
+ infoBox->setModal(true);
+ infoBox->setTimeout(HbPopup::NoTimeout);
+ infoBox->setAttribute(Qt::WA_DeleteOnClose);
+ infoBox->setStandardButtons(HbMessageBox::Ok);
+ infoBox->open(this,SLOT(invalidPasswordInfoClosed(int)));
+ }
+}
+
+/*!
+ * This function is called when user selects CANCEL from
+ * PAC store password or New PAC store password query popup.
+ * PAC store password selection is changed back to 'Prompt'.
+ */
+void CpEapPacStoreUi::cancelPasswordQuery()
+{
+ qDebug("CpEapPacStoreUi::cancelPasswordQuery()");
+ // Set PAC store password selection back to 'Prompt'
+ setPacStorePasswordState(PacStorePasswordPrompt);
+}
+
+/*!
+ * This function is called when user selects OK from
+ * 'Passwords do not match' or 'Invalid input' information popup.
+ * New PAC store password query dialog is shown again
+ *
+ * @param [in] action Obsolete parameter, not needed
+ */
+void CpEapPacStoreUi::invalidPasswordInfoClosed(int action)
+{
+ qDebug("CpEapPacStoreUi::invalidPasswordInfoClosed() - Show query again.");
+ Q_UNUSED(action);
+
+ showNewPasswordQuery();
+}