--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/securitysettings/cpeapuiplugins/cpeaptlsmethodsui/src/cpeaptlsmethodsui.cpp Tue Jul 06 14:18:35 2010 +0300
@@ -0,0 +1,985 @@
+/*
+ * 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 TLS-based EAP methods configuration
+ *
+ */
+
+/*
+ * %version: 24 %
+ */
+
+// System includes
+#include <HbDataForm>
+#include <HbDataFormModel>
+#include <HbDataFormViewItem>
+#include <HbParameterLengthLimiter>
+#include <HbMessageBox>
+#include <HbAction>
+#include <HbLineEdit>
+#include <cpsettingformitemdata.h>
+#include <cpitemdatahelper.h>
+#include <eapqtvalidator.h>
+#include <eapqtexpandedeaptype.h>
+#include <eapqtcertificateinfo.h>
+#include <cppluginutility.h>
+
+// User includes
+#include "cpeapciphersuiteui.h"
+#include "cpeaptlsmethodsui.h"
+#include "cpeaptlsmethodsinnereapui.h"
+
+/*!
+ * \class CpEapTlsMethodsUi
+ * \brief Implementes TLS based methods configuration ui.
+ */
+
+// External function prototypes
+
+// Local constants
+
+/*!
+ * ComboBox index is unkown
+ */
+static const int UnknownIndex = -1;
+/*!
+ * Default index for ComboBox, used if no value has been stored
+ */
+static const int DefaultIndex = 0;
+/*!
+ * Index of 'Not in use'in certificate selection lists.
+ */
+static const int NotInUseIndex = 0;
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+/*!
+ * Constructor.
+ *
+ * @param bearer Bearer type of the accessed configuration.
+ * @param iapId IAP ID of the accessed configuration.
+ * @param plugin Plugin.
+ * @param outerHandle Outer handle.
+ */
+
+CpEapTlsMethodsUi::CpEapTlsMethodsUi(
+ const EapQtConfigInterface::EapBearerType bearer,
+ const int iapId,
+ const EapQtPluginInfo &plugin,
+ const EapQtPluginHandle& outerHandle) :
+ mConfigIf(NULL),
+ mPluginInfo(plugin),
+ mOuterHandle(outerHandle),
+ mForm(NULL),
+ mModel(NULL),
+ mItemDataHelper(NULL),
+ mGroupItem(NULL),
+ mUsernameAutomatic(NULL),
+ mUsername(NULL),
+ mRealmAutomatic(NULL),
+ mRealm(NULL),
+ mCaCertAutomatic(NULL),
+ mCaCert(NULL),
+ mPeapVersion(NULL),
+ mInnerEapType(NULL),
+ mGroupItemCs(NULL),
+ mCurrentUserCert(0),
+ mCurrentAuthorityCert(0),
+ mCurrentPeapVersion(0),
+ mCurrentInnerPlugin(0),
+ mInnerEapMschapv2(0),
+ mInnerEapGtc(0),
+ mDefaultPluginInUse(false)
+{
+ qDebug("CpEapTlsMethodsUi::CpEapTlsMethodsUi()");
+
+ // IAP must be valid in construction (check includes
+ // EapQtConfigInterface::IapIdUndefined)
+ if (iapId < 0) {
+ QT_THROW(std::bad_alloc());
+ // scoped pointer gets deleted automaticaly on exception
+ }
+
+ // Get EAP config interface
+ mConfigIf.reset(new EapQtConfigInterface(bearer, iapId));
+
+ // Request supported inner EAP types
+ mPlugins.append(mConfigIf->supportedInnerTypes(mPluginInfo.pluginHandle()));
+
+ // Create UI
+ createUi();
+}
+
+/*!
+ * Destructor.
+ */
+CpEapTlsMethodsUi::~CpEapTlsMethodsUi()
+{
+ qDebug("CpEapTlsMethodsUi::~CpEapTlsMethodsUi()");
+
+ // mEapQtConfigInterface: scoped pointer deleted automatically
+ // mValidatorRealm: scoped pointer deleted automatically
+ // mValidatorUsername: scoped pointer deleted automatically
+}
+
+/*!
+ * Calls inner UI instance
+ *
+ * @return pointer to inner UI instance
+ */
+CpBaseSettingView *CpEapTlsMethodsUi::innerUiInstance()
+{
+ return mConfigIf->uiInstance(mPluginInfo.pluginHandle(),
+ mPlugins.at(mCurrentInnerPlugin).pluginHandle());
+}
+
+/*!
+ * Creates TLS based methods UI and initilizes settings read via
+ * EapQtConfigInterface
+ */
+void CpEapTlsMethodsUi::createUi()
+{
+ qDebug("CpEapTlsMethodsUi::createUi()");
+
+ // Read EAP Configurations
+ bool configurationRead = mConfigIf->readConfiguration(mOuterHandle, mPluginInfo.pluginHandle(),
+ mEapConfig);
+ if (!configurationRead) {
+ qDebug("CpEapTlsMethodsUi::createUi - read configuration failed.");
+ }
+
+ // Construct TLS based methods settings UI
+ mForm = new HbDataForm();
+ this->setWidget(mForm);
+ CpPluginUtility::addCpItemPrototype(mForm);
+ mModel = new HbDataFormModel(mForm);
+
+ // Create settings group
+ mGroupItem = new HbDataFormModelItem(HbDataFormModelItem::GroupItem,
+ HbParameterLengthLimiter(
+ hbTrId("txt_occ_subhead_eap_module_settings")).arg(
+ mPluginInfo.localizationId()));
+ mModel->appendDataFormItem(mGroupItem);
+
+ // The parameter given as 0 is a HbDataForm pointer, not parent
+ mItemDataHelper = new CpItemDataHelper(0);
+ mItemDataHelper->setParent(this);
+
+ // Create method specific UI
+ if (mPluginInfo.pluginHandle() == EapQtPluginHandle::PluginEapTls) {
+ createTlsUi();
+ }
+ else if (mPluginInfo.pluginHandle() == EapQtPluginHandle::PluginEapTtls) {
+ createTtlsUi();
+ }
+ else if (mPluginInfo.pluginHandle() == EapQtPluginHandle::PluginPeap) {
+ createPeapUi();
+ }
+ else {
+ qDebug("CpEapTlsMethodsUi::createUi() - unknown EAP method");
+ }
+
+ // Load cipher suites view
+ QVariant variant;
+ variant = mEapConfig.value(EapQtConfig::CipherSuites);
+ mGroupItemCs = new CpEapCiphersuiteUi(variant);
+ mModel->appendDataFormItem(mGroupItemCs);
+
+ mItemDataHelper->bindToForm(mForm);
+ mForm->setModel(mModel);
+
+ // Connect signal to add validators
+ bool connected = connect(mForm, SIGNAL( itemShown(const QModelIndex&) ), this,
+ SLOT( setValidator(const QModelIndex) ));
+ Q_ASSERT(connected);
+
+ // Expand TLS based method settings group
+ mForm->setExpanded(mModel->indexFromItem(mGroupItem), true);
+}
+
+/*!
+ * Creates EAP-TLS settings UI
+ */
+void CpEapTlsMethodsUi::createTlsUi()
+{
+ qDebug("CpEapTlsMethodsUi::createTlsUi()");
+ // Create common TLS settings componenets
+ createAuthorityCerts();
+ createUserCerts();
+ createUsername();
+ createRealm();
+}
+
+/*!
+ * Creates EAP-TTLS settings UI
+ */
+void CpEapTlsMethodsUi::createTtlsUi()
+{
+ qDebug("CpEapTlsMethodsUi::createTtlsUi()");
+ // Create common TLS settings componenets
+ createAuthorityCerts();
+ createUserCerts();
+ createUsername();
+ createRealm();
+
+ // Create Inner Eap type selection comboBox and configuration button
+ createInnerMethod();
+}
+
+/*!
+ * Creates PEAP settings UI
+ */
+void CpEapTlsMethodsUi::createPeapUi()
+{
+ qDebug("CpEapTlsMethodsUi::createPeapUi()");
+ // Create common TLS settings componenets
+ createAuthorityCerts();
+ createUserCerts();
+ createUsername();
+ createRealm();
+
+ // Create PEAP version selection comboBox
+ createPeapVersion();
+
+ // Create Inner Eap type selection comboBox and configuration button
+ createInnerMethod();
+
+ // If not stored inner Eap type, set default inner EAP method
+ // according PEAP version
+ if (mDefaultPluginInUse) {
+ defaultInnerPlugin();
+ }
+}
+/*!
+ * Creates Username group:
+ * Generate automatically checkBox and username lineEdit
+ */
+void CpEapTlsMethodsUi::createUsername()
+{
+ qDebug("CpEapTlsMethodsUi::createUsername()");
+ // UsernameAutomatic
+ mUsernameAutomatic = new CpSettingFormItemData(HbDataFormModelItem::CheckBoxItem, hbTrId(
+ "txt_occ_setlabel_user_name"));
+ mUsernameAutomatic->setContentWidgetData("text", hbTrId(
+ "txt_occ_setlabel_user_name_val_generate_automatica"));
+ // Initialize the value from EapQtConfig
+ // Generate username automatically is selected by default
+ mUsernameAutomatic->setContentWidgetData("checkState", boolToCheckState(mEapConfig.value(
+ EapQtConfig::UsernameAutomatic).toBool()));
+ // Connect signal to disable/enable username when usernameAutomatic changed
+ mForm->addConnection(mUsernameAutomatic, SIGNAL(stateChanged(int)), this,
+ SLOT(usernameAutomaticChanged(int)));
+ mGroupItem->appendChild(mUsernameAutomatic);
+
+ //Username
+ mUsername = new CpSettingFormItemData(HbDataFormModelItem::TextItem, hbTrId(
+ "txt_occ_setlabel_user_name"));
+ mUsername->setContentWidgetData("text", mEapConfig.value(EapQtConfig::Username));
+ // Dim username if usernameAutomatic selected
+ usernameAutomaticChanged(mUsernameAutomatic->contentWidgetData("checkState") == Qt::Checked);
+ mGroupItem->appendChild(mUsername);
+}
+
+/*!
+ * Creates Realm group:
+ * Generate automatically checkBox and realm lineEdit
+ */
+void CpEapTlsMethodsUi::createRealm()
+{
+ qDebug("CpEapTlsMethodsUi::createRealm()");
+ // RealmAutomatic
+ mRealmAutomatic = new CpSettingFormItemData(HbDataFormModelItem::CheckBoxItem, hbTrId(
+ "txt_occ_setlabel_realm"));
+ mRealmAutomatic->setContentWidgetData("text", hbTrId(
+ "txt_occ_setlabel_realm_val_generate_automatically"));
+ // Initialize the value from EapQtConfig
+ // Generate realm automatically is selected by default
+ mRealmAutomatic->setContentWidgetData("checkState", boolToCheckState(mEapConfig.value(
+ EapQtConfig::RealmAutomatic).toBool()));
+ // connect signal to disable/enable realm when realmAutomatic changed
+ mForm->addConnection(mRealmAutomatic, SIGNAL(stateChanged(int)), this,
+ SLOT(realmAutomaticChanged(int)));
+ mGroupItem->appendChild(mRealmAutomatic);
+
+ //Realm
+ mRealm = new CpSettingFormItemData(HbDataFormModelItem::TextItem, hbTrId(
+ "txt_occ_setlabel_realm"));
+ mRealm->setContentWidgetData("text", mEapConfig.value(EapQtConfig::Realm));
+ // Dim realm if realmAutomatic selected
+ realmAutomaticChanged(mRealmAutomatic->contentWidgetData("checkState") == Qt::Checked);
+ mGroupItem->appendChild(mRealm);
+}
+
+/*!
+ * Creates User certificate selection comboBox
+ */
+void CpEapTlsMethodsUi::createUserCerts()
+{
+ qDebug("CpEapTlsMethodsUi::createUserCerts()");
+ // Create User certificate comboBox
+ CpSettingFormItemData *userCertList = new CpSettingFormItemData(
+ HbDataFormModelItem::ComboBoxItem,
+ hbTrId("txt_occ_setlabel_user_certificate"));
+
+ // Stored certificate
+ QList<QVariant> storedCertsList = mEapConfig.value(EapQtConfig::UserCertificate).toList();
+ EapQtCertificateInfo storedCert;
+ if (!storedCertsList.empty() && storedCertsList[0].canConvert<EapQtCertificateInfo> ()) {
+ // Stored certificate found, index is still unknown
+ storedCert = storedCertsList[0].value<EapQtCertificateInfo> ();
+ mCurrentUserCert = UnknownIndex;
+ }
+ else {
+ // no stored certificate, use 'not in use'
+ mCurrentUserCert = DefaultIndex;
+ }
+
+ // User certificates found from system
+ mUserCerts = mConfigIf->userCertificates();
+
+ // List of comboBox items
+ QStringList items;
+ // Add 'Not in use' to comboBox list
+ items << hbTrId("txt_occ_setlabel_user_certificate_val_not_in_use");
+ // Add certificates to comboBox list and find index of stored certificate
+ for (int i = 0; i < mUserCerts.count(); ++i) {
+ items << mUserCerts.at(i).value(EapQtCertificateInfo::CertificateLabel).toString();
+ if (mCurrentUserCert == UnknownIndex
+ && storedCert.value(EapQtCertificateInfo::SubjectKeyId)
+ == mUserCerts.at(i).value(EapQtCertificateInfo::SubjectKeyId)) {
+ mCurrentUserCert = i + 1;
+ }
+ }
+ if (mCurrentUserCert == UnknownIndex) {
+ // Stored certificate not found in the certificate list
+ qDebug("CpEapTlsMethodsUi::createUserCerts() - stored certificate not in the list");
+ mCurrentUserCert = DefaultIndex;
+ }
+
+ // Initialize comboBox
+ userCertList->setContentWidgetData("items", items);
+ userCertList->setContentWidgetData("currentIndex", mCurrentUserCert);
+
+ // Get info when user certificate selection has been changed
+ mForm->addConnection(userCertList, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(userCertChanged(int)));
+ mGroupItem->appendChild(userCertList);
+}
+
+/*!
+ * Creates Authority certs group:
+ * Select automatically check box and certificate comboBox
+ */
+void CpEapTlsMethodsUi::createAuthorityCerts()
+{
+ qDebug("CpEapTlsMethodsUi::createAuthorityCerts()");
+ // Select Authority Certificate Automatically
+ mCaCertAutomatic = new CpSettingFormItemData(HbDataFormModelItem::CheckBoxItem, hbTrId(
+ "txt_occ_setlabel_authority_certificate"));
+ mCaCertAutomatic->setContentWidgetData("text", hbTrId(
+ "txt_occ_setlabel_authority_certificate_val_select"));
+ // Initialize the value from EapQtConfig
+ // Select CA Cert automatically is selected by default
+ mCaCertAutomatic->setContentWidgetData("checkState", boolToCheckState(mEapConfig.value(
+ EapQtConfig::AuthorityCertificateAutomatic).toBool()));
+ // connect signal to disable/enable CA cert when CaCertAutomatic changed
+ mForm->addConnection(mCaCertAutomatic, SIGNAL(stateChanged(int)), this,
+ SLOT(authorityCertAutomaticChanged(int)));
+ mGroupItem->appendChild(mCaCertAutomatic);
+
+ // Authority certificate comboBox
+ mCaCert = new CpSettingFormItemData(HbDataFormModelItem::ComboBoxItem,
+ hbTrId("txt_occ_setlabel_authority_certificate"));
+
+ // Stored certificate from EAP configuration
+ QList<QVariant> storedCertsList = mEapConfig.value(EapQtConfig::AuthorityCertificate).toList();
+ EapQtCertificateInfo storedCert;
+ if (!storedCertsList.empty() && storedCertsList[0].canConvert<EapQtCertificateInfo> ()) {
+ // Stored certificate found, index is still unknown
+ storedCert = storedCertsList[0].value<EapQtCertificateInfo> ();
+ mCurrentAuthorityCert = UnknownIndex;
+ }
+ else {
+ // no selected certificate, use 'not in use'
+ mCurrentAuthorityCert = DefaultIndex;
+ }
+
+ // Authority certificates found from system
+ mAuthorityCerts = mConfigIf->certificateAuthorityCertificates();
+
+ // List of comboBox items
+ QStringList items;
+ // Add 'Not in use' to comboBox list
+ items << hbTrId("txt_occ_setlabel_authority_certificate_val_not_in");
+ // Add certificates to comboBox list and find index of stored certificate
+ for (int i = 0; i < mAuthorityCerts.count(); ++i) {
+ items << mAuthorityCerts.at(i).value(EapQtCertificateInfo::CertificateLabel).toString();
+ if (mCurrentAuthorityCert == UnknownIndex
+ && storedCert.value(EapQtCertificateInfo::SubjectKeyId)
+ == mAuthorityCerts.at(i).value(EapQtCertificateInfo::SubjectKeyId)) {
+ mCurrentAuthorityCert = i + 1;
+ }
+ }
+ if (mCurrentAuthorityCert == UnknownIndex) {
+ // Selected certificate not found in the certificate list
+ mCurrentAuthorityCert = DefaultIndex;
+ }
+
+ // Initialize Authority certificates comboBox
+ mCaCert->setContentWidgetData("items", items);
+ mCaCert->setContentWidgetData("currentIndex", mCurrentAuthorityCert);
+
+ // Get info when authority certificate selection has been changed
+ mForm->addConnection(mCaCert, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(authorityCertChanged(int)));
+ // Dim authority certificate if select automatically checked
+ authorityCertAutomaticChanged(mCaCertAutomatic->contentWidgetData("checkState") == Qt::Checked);
+ mGroupItem->appendChild(mCaCert);
+}
+
+/*!
+ * Creates PEAP version selection comboBox
+ */
+void CpEapTlsMethodsUi::createPeapVersion()
+{
+ qDebug("CpEapTlsMethodsUi::createPeapVersion()");
+ // Create PEAP version comboBox
+ mPeapVersion = new CpSettingFormItemData(
+ HbDataFormModelItem::ComboBoxItem,
+ hbTrId("txt_occ_setlabel_peap_version"));
+
+ // Add items to comboBox List
+ QStringList items;
+ items << hbTrId("txt_occ_setlabel_peap_version_val_peapv0")
+ << hbTrId("txt_occ_setlabel_peap_version_val_peapv1")
+ << hbTrId("txt_occ_setlabel_peap_version_val_peapv0_or_peapv1");
+ mPeapVersion->setContentWidgetData("items", items);
+
+ // Initialize PEAP version from EAP configuration
+ if (mEapConfig.value(EapQtConfig::PeapVersion0Allowed).toBool()
+ && mEapConfig.value(EapQtConfig::PeapVersion1Allowed).toBool()) {
+ // PEAPv0 or PEAPv1
+ mCurrentPeapVersion = PeapVersionBoth;
+ }
+ else if (mEapConfig.value(EapQtConfig::PeapVersion1Allowed).toBool()) {
+ // PEAPv1
+ mCurrentPeapVersion = PeapVersion1;
+ }
+ else if (mEapConfig.value(EapQtConfig::PeapVersion0Allowed).toBool()) {
+ // PEAPv0
+ mCurrentPeapVersion = PeapVersion0;
+ }
+ else {
+ qDebug("CpEapTlsMethodsUi::createPeapVersion() - unknown version");
+ // Set default (PEAPv0 or PEAPv1)
+ mCurrentPeapVersion = PeapVersionBoth;
+ }
+ mPeapVersion->setContentWidgetData("currentIndex", mCurrentPeapVersion);
+
+ // Get info when PEAP version selection has been changed
+ mForm->addConnection(mPeapVersion, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(peapVersionChanged(int)));
+ mGroupItem->appendChild(mPeapVersion);
+}
+
+/*!
+ * Creates inner EAP type selection comboBox and configure button
+ */
+void CpEapTlsMethodsUi::createInnerMethod()
+{
+ qDebug("CpEapTlsMethodsUi::createInnerMethod()");
+ // Create inner EAP type selection combo box
+ createEapSelector();
+ // Create 'configure inner EAP type' button
+ EapInnerMethodEntryItemData *eapEntry = NULL;
+ eapEntry = new EapInnerMethodEntryItemData(this, *mItemDataHelper,
+ hbTrId("txt_occ_button_inner_eap_type"));
+ mGroupItem->appendChild(eapEntry);
+}
+
+/*!
+ * Creates Combo box for inner EAP type selection
+ */
+void CpEapTlsMethodsUi::createEapSelector()
+{
+ mInnerEapType = new CpSettingFormItemData(
+ HbDataFormModelItem::ComboBoxItem,
+ hbTrId("txt_occ_setlabel_inner_eap_type"));
+
+ // Selected inner EAP type stored into the database
+ QList<QVariant> currentEapList = mEapConfig.value(EapQtConfig::InnerType).toList();
+ EapQtPluginHandle readInnerEap;
+ if (!currentEapList.empty() && currentEapList[0].canConvert<EapQtPluginHandle> ()) {
+ readInnerEap = currentEapList[0].value<EapQtPluginHandle> ();
+ mCurrentInnerPlugin = UnknownIndex;
+ }
+ else {
+ // no selected inner EAP type, use the first one
+ mCurrentInnerPlugin = DefaultIndex;
+ mDefaultPluginInUse = true;
+ }
+
+ QStringList items;
+ for (int i = 0; i < mPlugins.count(); ++i) {
+ // Add certificate to comboBox list
+ items << mPlugins.at(i).localizationId();
+ if (mCurrentInnerPlugin == UnknownIndex && readInnerEap.pluginId()
+ == mPlugins.at(i).pluginHandle().pluginId()) {
+ // Store index of selected certificate
+ mCurrentInnerPlugin = i;
+ }
+ if (mPlugins.at(i).pluginHandle().pluginId() == EapQtPluginHandle::PluginEapMschapv2) {
+ // Store index of EAP-MSCHAPv2 (used as default with PEAP and unauthenticated FAST)
+ mInnerEapMschapv2 = i;
+ }
+ else if (mPlugins.at(i).pluginHandle().pluginId() == EapQtPluginHandle::PluginEapGtc) {
+ // Store index of EAP-GTC (Used as default with PEAPv1)
+ mInnerEapGtc = i;
+ }
+ }
+ if (mCurrentInnerPlugin == UnknownIndex) {
+ // Selected inner EAP type not found
+ mCurrentInnerPlugin = DefaultIndex;
+ mDefaultPluginInUse = true;
+ }
+
+ mInnerEapType->setContentWidgetData("items", items);
+ mInnerEapType->setContentWidgetData("currentIndex", mCurrentInnerPlugin);
+
+ mForm->addConnection(mInnerEapType, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(innerEapTypeChanged(int)));
+
+ mGroupItem->appendChild(mInnerEapType);
+}
+
+/*!
+ * Adds validators.
+ *
+ * @param modelIndex Model index
+ */
+void CpEapTlsMethodsUi::setValidator(const QModelIndex modelIndex)
+{
+ qDebug("CpEapTlsMethodsUi::itemActivated");
+
+ HbDataFormViewItem *viewItem = qobject_cast<HbDataFormViewItem *>
+ (mForm->itemByIndex(modelIndex));
+ HbDataFormModelItem *modelItem = mModel->itemFromIndex(modelIndex);
+
+ if (modelItem == mUsername) {
+ // When username lineEdit is activated (shown) first time, validator is added
+ mValidatorUsername.reset(mConfigIf->validatorEap(mPluginInfo.pluginHandle().type(),
+ EapQtConfig::Username));
+ HbLineEdit *edit = qobject_cast<HbLineEdit *> (viewItem->dataItemContentWidget());
+ mValidatorUsername->updateEditor(edit);
+ }
+ else if (modelItem == mRealm) {
+ // When realm lineEdit is activated (shown) first time, validator is added
+ mValidatorRealm.reset(mConfigIf->validatorEap(mPluginInfo.pluginHandle().type(),
+ EapQtConfig::Realm));
+ HbLineEdit *edit = qobject_cast<HbLineEdit *> (viewItem->dataItemContentWidget());
+ mValidatorRealm->updateEditor(edit);
+ }
+}
+
+/*!
+ * Sets default Inner EAP method according PEAP version
+ */
+void CpEapTlsMethodsUi::defaultInnerPlugin()
+{
+ qDebug("CpEapTlsMethodsUi::defaultInnerPlugin()");
+ if (mCurrentPeapVersion == PeapVersion1) {
+ mInnerEapType->setContentWidgetData("currentIndex", mInnerEapGtc);
+ mCurrentInnerPlugin = mInnerEapGtc;
+ }
+ else {
+ mInnerEapType->setContentWidgetData("currentIndex", mInnerEapMschapv2);
+ mCurrentInnerPlugin = mInnerEapMschapv2;
+ }
+}
+
+/*!
+ * Stores the index of selected user certificate
+ *
+ * @param value Index of selected certificate.
+ */
+void CpEapTlsMethodsUi::userCertChanged(int value)
+{
+ qDebug("CpEapTlsMethodsUi::userCertChanged()");
+ mCurrentUserCert = value;
+}
+
+/*!
+ * Stores the index of selected authority certificate
+ *
+ * @param value Index of selected certificate.
+ */
+void CpEapTlsMethodsUi::authorityCertChanged(int value)
+{
+ qDebug("CpEapTlsMethodsUi::authorityCertChanged()");
+ mCurrentAuthorityCert = value;
+}
+
+/*!
+ * Stores the index of selected PEAP version
+ *
+ * @param value Index of selected PEAP version.
+ */
+void CpEapTlsMethodsUi::peapVersionChanged(int value)
+{
+ qDebug("CpEapTlsMethodsUi::peapVersionChanged()");
+ mCurrentPeapVersion = value;
+ defaultInnerPlugin();
+}
+
+/*!
+ * Stores the index of selected inner EAP type
+ *
+ * @param value Index of selected ineer EAP type.
+ */
+void CpEapTlsMethodsUi::innerEapTypeChanged(int value)
+{
+ qDebug("CpEapTlsMethodsUi::innerEapTypeChanged()");
+ mCurrentInnerPlugin = value;
+}
+
+/*!
+ * Dims the username if generate username automatically has been selected.
+ *
+ * @param state Tells is generate automatically checked.
+ */
+void CpEapTlsMethodsUi::usernameAutomaticChanged(int state)
+{
+ qDebug("CpEapTlsMethodsUi::usernameAutomaticChanged");
+
+ mUsername->setContentWidgetData("enabled", !checkStateToBool(state));
+}
+
+/*!
+ * Dims the realm if generate realm automatically has been selected.
+ *
+ * @param state Tells is generate automatically checked.
+ */
+void CpEapTlsMethodsUi::realmAutomaticChanged(int state)
+{
+ qDebug("CpEapTlsMethodsUi::realmAutomaticChanged");
+
+ mRealm->setContentWidgetData("enabled", !checkStateToBool(state));
+}
+
+/*!
+ * Dims the authority certificate if select caCert automatically has been selected.
+ *
+ * @param state Tells is select automatically checked.
+ */
+void CpEapTlsMethodsUi::authorityCertAutomaticChanged(int state)
+{
+ qDebug("CpEapTlsMethodsUi::authorityCertAutomaticChanged");
+
+ mCaCert->setContentWidgetData("enabled", !checkStateToBool(state));
+}
+
+/*!
+ * Converts check box state to boolean.
+ *
+ * @param state Check box state
+ *
+ * @return true if Check box is checked, false otherwise.
+ */
+bool CpEapTlsMethodsUi::checkStateToBool(const int state)
+{
+ return (Qt::Unchecked == state ? false : true);
+}
+
+/*!
+ * Converts boolean to check box state.
+ *
+ * @param state Tells is check box checked.
+ *
+ * @return Qt check state
+ */
+int CpEapTlsMethodsUi::boolToCheckState(const bool state)
+{
+ return (false == state ? Qt::Unchecked : Qt::Checked);
+}
+
+/*!
+ * This is called when user is about to exit the view.
+ * Validates configuration and saves settings.
+ * If configuration is not valid prompts question dialog.
+ * If user chooses "OK" leaves without saving.
+ *
+ */
+void CpEapTlsMethodsUi::close()
+{
+ qDebug("CpEapTlsMethodsUi::close");
+
+ // Validate configuration
+ if (validate()) {
+ qDebug("CpEapTlsMethodsUi::close - Validation OK");
+
+ // Store settings
+ if (storeSettings()){
+ qDebug("CpEapTlsMethodsUi::close - Settings stored, close view");
+ // Close view
+ CpBaseSettingView::close();
+ }
+ else {
+ qDebug("CpEapTlsMethodsUi::close - Store settings failed, prompt warning");
+ // Store failed. Show error note to user
+ QScopedPointer<HbMessageBox> infoBox;
+ infoBox.reset(new HbMessageBox(
+ HbMessageBox::MessageTypeWarning));
+ infoBox->setText(hbTrId("txt_occ_info_unable_to_save_setting"));
+ infoBox->clearActions();
+ // Connect 'OK'-button to CpBaseSettingView 'aboutToClose'-signal
+ HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"));
+ infoBox->addAction(okAction);
+ bool connected = connect(
+ okAction,
+ SIGNAL(triggered()),
+ this,
+ SIGNAL(aboutToClose()));
+ Q_ASSERT(connected);
+ infoBox->open();
+ infoBox.take();
+ }
+ }
+ else {
+ qDebug("CpEapTlsMethodsUi::close - validation failed. Prompt question.");
+
+ // Validate failed. Request user to exit anyway
+ QScopedPointer<HbMessageBox> messageBox;
+ messageBox.reset(new HbMessageBox(
+ HbMessageBox::MessageTypeQuestion));
+ messageBox->setAttribute(Qt::WA_DeleteOnClose);
+ messageBox->setText(hbTrId("txt_occ_info_incomplete_details_return_without_sa"));
+ messageBox->clearActions();
+ // Connect 'YES'-button to CpBaseSettingView 'aboutToClose'-signal
+ HbAction *okAction = new HbAction(hbTrId("txt_common_button_yes"));
+ messageBox->addAction(okAction);
+ bool connected = connect(
+ okAction,
+ SIGNAL(triggered()),
+ this,
+ SIGNAL(aboutToClose()));
+ Q_ASSERT(connected);
+ // Clicking 'NO'-button does nothing
+ HbAction *cancelAction = new HbAction(hbTrId("txt_common_button_no"));
+ messageBox->addAction(cancelAction);
+ messageBox->setTimeout(HbPopup::NoTimeout);
+ messageBox->open();
+ messageBox.take();
+ }
+}
+
+/*!
+ * Validates settings configuration.
+ *
+ * @return true if configuration OK, false otherwise.
+ */
+bool CpEapTlsMethodsUi::validate()
+{
+ qDebug("CpEapTlsMethodsUi::validate()");
+ bool valid = false;
+
+ if (validateUsernameGroup()
+ && validateRealmGroup()
+ && validateAuthorityCertificate()
+ && validateUserCertificate()
+ && validateCiphersuites()) {
+ valid = true;
+ }
+
+ return valid;
+}
+
+/*!
+ * Validates username checkBox and lineEdit group.
+ *
+ * @return true if OK, false otherwise.
+ */
+bool CpEapTlsMethodsUi::validateUsernameGroup()
+{
+ bool status = false;
+ // true if generate automatically is checked or given value is valid
+ if (mUsernameAutomatic->contentWidgetData("checkState") == Qt::Checked
+ || EapQtValidator::StatusOk == mValidatorUsername->validate(
+ mUsername->contentWidgetData("text"))) {
+ status = true;
+ }
+ qDebug("CpEapTlsMethodsUi::validateUsernameGroup() - status: %d", status);
+ return status;
+}
+
+/*!
+ * Validates realm checkBox and lineEdit group.
+ *
+ * @return true if OK, false otherwise.
+ */
+bool CpEapTlsMethodsUi::validateRealmGroup()
+{
+ bool status = false;
+ // true if generate automatically is checked or given value is valid
+ if (mRealmAutomatic->contentWidgetData("checkState") == Qt::Checked
+ || EapQtValidator::StatusOk == mValidatorRealm->validate(
+ mRealm->contentWidgetData("text"))) {
+ status = true;
+ }
+ qDebug("CpEapTlsMethodsUi::validateRealmGroup() - status: %d", status);
+ return status;
+}
+
+/*!
+ * Validates authority certificate checkBox and comboBox group.
+ *
+ * @return true if OK, false otherwise.
+ */
+bool CpEapTlsMethodsUi::validateAuthorityCertificate()
+{
+ bool status = false;
+ //true if select automatically is checked or certificate is selected
+ if (mCaCertAutomatic->contentWidgetData("checkState") == Qt::Checked
+ || mCurrentAuthorityCert > NotInUseIndex) {
+ status = true;
+ }
+ qDebug("CpEapTlsMethodsUi::validateAuthorityCertificate()- status: %d", status);
+ return status;
+}
+
+/*!
+ * Validates user certificate selection.
+ *
+ * @return false if EAP-TLS and no certificate, true otherwise
+ */
+bool CpEapTlsMethodsUi::validateUserCertificate()
+{
+ bool status = true;
+ // false if EAP-TLS and not selected user certificate
+ if (mPluginInfo.pluginHandle() == EapQtPluginHandle::PluginEapTls
+ && mCurrentUserCert == NotInUseIndex) {
+ status = false;
+ }
+ qDebug("CpEapTlsMethodsUi::validateUserCertificate() - status: %d", status);
+ return status;
+}
+
+/*!
+ * Validates cipher suites selection.
+ *
+ * @return false if no cipher suite is selected, true otherwise
+ */
+bool CpEapTlsMethodsUi::validateCiphersuites()
+{
+ bool status = true;
+ QVariant cipherSuites = mGroupItemCs->ciphersuites();
+ QList<QVariant> cipherList = cipherSuites.toList();
+ if (cipherList.count() == 0){
+ status = false;
+ }
+ qDebug("CpEapTlsMethodsUi::validateCiphersuites() - status: %d", status);
+ return status;
+}
+
+/*!
+ * Write PEAP specific values into the EAP configuration
+ *
+ * @param eapConfig
+ */
+void CpEapTlsMethodsUi::setPeapVersion(EapQtConfig &eapConfig)
+{
+ qDebug("CpEapTlsMethodsUi::setPeapVersion()");
+ if (mCurrentPeapVersion == PeapVersion0) {
+ eapConfig.setValue(EapQtConfig::PeapVersion0Allowed, true);
+ eapConfig.setValue(EapQtConfig::PeapVersion1Allowed, false);
+ }
+ else if (mCurrentPeapVersion == PeapVersion1) {
+ eapConfig.setValue(EapQtConfig::PeapVersion0Allowed, false);
+ eapConfig.setValue(EapQtConfig::PeapVersion1Allowed, true);
+ }
+ else {
+ Q_ASSERT(mCurrentPeapVersion == PeapVersionBoth);
+ eapConfig.setValue(EapQtConfig::PeapVersion0Allowed, true);
+ eapConfig.setValue(EapQtConfig::PeapVersion1Allowed, true);
+ }
+}
+
+/*!
+ * Stores settings given via TLS based methods setting UI
+ *
+ * @return false if saving failed, true otherwise
+ */
+bool CpEapTlsMethodsUi::storeSettings()
+{
+ qDebug("CpEapTlsMethodsUi::storeSettings");
+
+ EapQtConfig eapConfig;
+
+ // Store common settings
+ qDebug("CpEapTlsMethodsUi::storeSettings - Common settings");
+ eapConfig.setValue(EapQtConfig::OuterType, qVariantFromValue(mOuterHandle));
+ eapConfig.setValue(EapQtConfig::UsernameAutomatic, checkStateToBool(
+ mUsernameAutomatic->contentWidgetData("checkState").toInt()));
+ eapConfig.setValue(EapQtConfig::Username, mUsername->contentWidgetData("text"));
+ eapConfig.setValue(EapQtConfig::RealmAutomatic, checkStateToBool(
+ mRealmAutomatic->contentWidgetData("checkState").toInt()));
+ eapConfig.setValue(EapQtConfig::Realm, mRealm->contentWidgetData("text"));
+
+ // User certificate
+ qDebug("CpEapTlsMethodsUi::storeSettings - User certificate");
+ if (mCurrentUserCert > NotInUseIndex) {
+ QList<QVariant> userCerts;
+ userCerts.append(qVariantFromValue(mUserCerts.at(mCurrentUserCert - 1)));
+ // The first item in UI(index 0) is 'not in use'
+ eapConfig.setValue(EapQtConfig::UserCertificate, userCerts);
+ }
+
+ // Authority certificate
+ qDebug("CpEapTlsMethodsUi::storeSettings - Authority certificate");
+ eapConfig.setValue(EapQtConfig::AuthorityCertificateAutomatic, checkStateToBool(
+ mCaCertAutomatic->contentWidgetData("checkState").toInt()));
+ if (mCurrentAuthorityCert > NotInUseIndex && !checkStateToBool(
+ mCaCertAutomatic->contentWidgetData("checkState").toInt())) {
+ QList<QVariant> authorityCerts;
+ authorityCerts.append(qVariantFromValue(mAuthorityCerts.at(mCurrentAuthorityCert - 1)));
+ // The first item in UI(index 0) is 'not in use'
+ eapConfig.setValue(EapQtConfig::AuthorityCertificate, authorityCerts);
+ }
+
+ // Inner EAP method (Not valid for EAP-TLS)
+ if (!(mPluginInfo.pluginHandle() == EapQtPluginHandle::PluginEapTls)) {
+ qDebug("CpEapTlsMethodsUi::storeSettings - Inner EAP method");
+ QList<QVariant> innerEaps;
+ innerEaps.append(qVariantFromValue(mPlugins.at(mCurrentInnerPlugin).pluginHandle()));
+ eapConfig.setValue(EapQtConfig::InnerType, innerEaps);
+ }
+
+ // Cipher suites
+ qDebug("CpEapTlsMethodsUi::storeSettings - Cipher suites");
+ eapConfig.setValue(EapQtConfig::CipherSuites, mGroupItemCs->ciphersuites());
+
+ // PEAP version (valid only for PEAP)
+ if (mPluginInfo.pluginHandle() == EapQtPluginHandle::PluginPeap) {
+ setPeapVersion(eapConfig);
+ }
+
+ // Save configuration
+ if (!mConfigIf->saveConfiguration(mPluginInfo.pluginHandle(), eapConfig)) {
+ qDebug("CpEapTlsMethodsUi::storeSettings - configuration saving failed.");
+ return false;
+ }
+ return true;
+}
+