--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pkiutilities/untrustedcertificatedialog/src/untrustedcertificatedialog.cpp Tue Aug 31 16:04:40 2010 +0300
@@ -0,0 +1,294 @@
+/*
+* 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: Device dialog plugin that shows untrusted certificate
+* dialog for TLS server authentication failure errors.
+*
+*/
+
+#include "untrustedcertificatedialog.h"
+#include "untrustedcertificatedefinitions.h"
+#include "untrustedcertificatewidget.h"
+#include <hblabel.h>
+#include <hbaction.h>
+#include <hbmessagebox.h>
+#include <QGraphicsLinearLayout>
+
+const int KNoError = 0; // KErrNone
+const int KParameterError = -6; // KErrArgument
+
+// TODO: replace with OST tracing
+#ifdef _DEBUG
+#include <QDebug>
+#define TRACE(x) qDebug() << x
+#define TRACE1(x,y) qDebug() << x << y
+#else
+#define TRACE(x)
+#define TRACE1(x,y)
+#endif
+
+
+// ----------------------------------------------------------------------------
+// UntrustedCertificateDialog::UntrustedCertificateDialog()
+// ----------------------------------------------------------------------------
+//
+UntrustedCertificateDialog::UntrustedCertificateDialog(const QVariantMap ¶meters) :
+ HbDialog(), mLastError(KNoError), mContent(0), mResultMap(),
+ mShowEventReceived(false), mOkAction(0)
+{
+ constructDialog(parameters);
+}
+
+// ----------------------------------------------------------------------------
+// UntrustedCertificateDialog::~UntrustedCertificateDialog()
+// ----------------------------------------------------------------------------
+//
+UntrustedCertificateDialog::~UntrustedCertificateDialog()
+{
+}
+
+// ----------------------------------------------------------------------------
+// UntrustedCertificateDialog::setDeviceDialogParameters()
+// ----------------------------------------------------------------------------
+//
+bool UntrustedCertificateDialog::setDeviceDialogParameters(const QVariantMap ¶meters)
+{
+ return updateFromParameters(parameters);
+}
+
+// ----------------------------------------------------------------------------
+// UntrustedCertificateDialog::deviceDialogError()
+// ----------------------------------------------------------------------------
+//
+int UntrustedCertificateDialog::deviceDialogError() const
+{
+ return mLastError;
+}
+
+// ----------------------------------------------------------------------------
+// UntrustedCertificateDialog::closeDeviceDialog()
+// ----------------------------------------------------------------------------
+//
+void UntrustedCertificateDialog::closeDeviceDialog(bool byClient)
+{
+ Q_UNUSED(byClient);
+ TRACE("UntrustedCertificateDialog::closeDeviceDialog");
+ close();
+
+ // If show event has been received, close is signalled from hide event.
+ // If not, hide event does not come and close is signalled from here.
+ if (!mShowEventReceived) {
+ emit deviceDialogClosed();
+ }
+}
+
+// ----------------------------------------------------------------------------
+// UntrustedCertificateDialog::deviceDialogWidget()
+// ----------------------------------------------------------------------------
+//
+HbDialog *UntrustedCertificateDialog::deviceDialogWidget() const
+{
+ return const_cast<UntrustedCertificateDialog*>(this);
+}
+
+// ----------------------------------------------------------------------------
+// UntrustedCertificateDialog::hideEvent()
+// ----------------------------------------------------------------------------
+//
+void UntrustedCertificateDialog::hideEvent(QHideEvent *event)
+{
+ TRACE("UntrustedCertificateDialog::hideEvent");
+ HbDialog::hideEvent(event);
+ emit deviceDialogClosed();
+}
+
+// ----------------------------------------------------------------------------
+// UntrustedCertificateDialog::showEvent()
+// ----------------------------------------------------------------------------
+//
+void UntrustedCertificateDialog::showEvent(QShowEvent *event)
+{
+ TRACE("UntrustedCertificateDialog::showEvent");
+ HbDialog::showEvent(event);
+ mShowEventReceived = true;
+}
+
+// ----------------------------------------------------------------------------
+// UntrustedCertificateDialog::isParametersValid()
+// ----------------------------------------------------------------------------
+//
+bool UntrustedCertificateDialog::isParametersValid(const QVariantMap ¶meters)
+{
+ if (parameters.contains(KUntrustedCertEncodedCertificate) &&
+ parameters.contains(KUntrustedCertServerName) &&
+ parameters.contains(KUntrustedCertValidationError)) {
+ return true;
+ }
+ mLastError = KParameterError;
+ return false;
+}
+
+// ----------------------------------------------------------------------------
+// UntrustedCertificateDialog::constructDialog()
+// ----------------------------------------------------------------------------
+//
+bool UntrustedCertificateDialog::constructDialog(const QVariantMap ¶meters)
+{
+ TRACE("UntrustedCertificateDialog::constructDialog");
+ if (!isParametersValid(parameters)) {
+ return false;
+ }
+
+ setTimeout(HbPopup::NoTimeout);
+ setDismissPolicy(HbPopup::NoDismiss);
+ setModal(true);
+
+ //: Title text in untrusted certificate dialog. User is opening secure
+ //: connection to site or service, which authenticity cannot be proved,
+ //: or there are other problems in the site certificate. User needs to
+ //: decide if she/he accepts the risk and opens the secure connection
+ //: anyway, or if the connection is rejected.
+ //TODO: localised UI string
+ //QString titleText = hbTrId("");
+ QString titleText = tr("Untrusted certificate");
+ setHeadingWidget(new HbLabel(titleText, this));
+
+ Q_ASSERT(mContent == 0);
+ mContent = new UntrustedCertificateWidget(this);
+ mContent->constructFromParameters(parameters);
+ setContentWidget(mContent);
+
+ if (mContent->isCertificateValid()) {
+ mOkAction = new HbAction(qtTrId("txt_common_button_ok"), this);
+ addAction(mOkAction);
+ disconnect(mOkAction, SIGNAL(triggered()), this, SLOT(close()));
+ connect(mOkAction, SIGNAL(triggered()), this, SLOT(handleAccepted()));
+
+ HbAction *cancelAction = new HbAction(qtTrId("txt_common_button_cancel"), this);
+ addAction(cancelAction);
+ disconnect(cancelAction, SIGNAL(triggered()), this, SLOT(close()));
+ connect(cancelAction, SIGNAL(triggered()), this, SLOT(handleRejected()));
+ } else {
+ HbAction *closeAction = new HbAction(qtTrId("txt_common_button_close"), this);
+ addAction(closeAction);
+ disconnect(closeAction, SIGNAL(triggered()), this, SLOT(close()));
+ connect(closeAction, SIGNAL(triggered()), this, SLOT(handleRejected()));
+ }
+
+ return true;
+}
+
+// ----------------------------------------------------------------------------
+// UntrustedCertificateDialog::updateFromParameters()
+// ----------------------------------------------------------------------------
+//
+bool UntrustedCertificateDialog::updateFromParameters(const QVariantMap ¶meters)
+{
+ TRACE("UntrustedCertificateDialog::updateFromParameters");
+ if (!isParametersValid(parameters)) {
+ return false;
+ }
+
+ Q_ASSERT(mContent != 0);
+ mContent->updateFromParameters(parameters);
+ return true;
+}
+
+// ----------------------------------------------------------------------------
+// UntrustedCertificateDialog::sendResult()
+// ----------------------------------------------------------------------------
+//
+void UntrustedCertificateDialog::sendResult(int result)
+{
+ TRACE1("UntrustedCertificateDialog::sendResult", result);
+ QVariant resultValue(result);
+ mResultMap.insert(KUntrustedCertificateDialogResult, resultValue);
+ emit deviceDialogData(mResultMap);
+}
+
+// ----------------------------------------------------------------------------
+// UntrustedCertificateDialog::confirmPermanentAccept()
+// ----------------------------------------------------------------------------
+//
+void UntrustedCertificateDialog::confirmPermanentAccept()
+{
+ TRACE("UntrustedCertificateDialog::confirmPermanentAccept");
+
+ HbDialog *dialog = new HbDialog();
+ dialog->setAttribute(Qt::WA_DeleteOnClose, true);
+ dialog->setTimeout(HbPopup::NoTimeout);
+ dialog->setDismissPolicy(HbDialog::NoDismiss);
+ dialog->setModal(true);
+
+ // TODO: localised UI string needed
+ QString questionTitle = tr("Certificate access");
+ dialog->setHeadingWidget(new HbLabel(questionTitle));
+
+ HbWidget *widget = new HbWidget();
+ QGraphicsLinearLayout* layout = new QGraphicsLinearLayout();
+ // TODO: localized UI string needed
+ QString questionText =
+ tr("Connections to '%1' will be made without warnings. Continue?")
+ .arg(mContent->serverName());
+ HbLabel *textLabel = new HbLabel(questionText);
+ textLabel->setTextWrapping(Hb::TextWordWrap);
+ layout->addItem(textLabel);
+ widget->setLayout(layout);
+ dialog->setContentWidget(widget);
+
+ HbAction *yesAction = new HbAction(hbTrId("txt_common_button_yes"));
+ dialog->addAction(yesAction);
+ disconnect(yesAction, SIGNAL(triggered()), this, SLOT(close()));
+ connect(yesAction, SIGNAL(triggered()), this, SLOT(handlePermanentAcceptance()));
+ dialog->addAction(new HbAction(hbTrId("txt_common_button_no")));
+
+ dialog->show();
+}
+
+// ----------------------------------------------------------------------------
+// UntrustedCertificateDialog::handleAccepted()
+// ----------------------------------------------------------------------------
+//
+void UntrustedCertificateDialog::handleAccepted()
+{
+ TRACE("UntrustedCertificateDialog::handleAccepted");
+ if (mContent->isPermanentAcceptChecked()) {
+ confirmPermanentAccept();
+ } else {
+ sendResult(KDialogAccepted);
+ close();
+ }
+}
+
+// ----------------------------------------------------------------------------
+// UntrustedCertificateDialog::handleRejected()
+// ----------------------------------------------------------------------------
+//
+void UntrustedCertificateDialog::handleRejected()
+{
+ TRACE("UntrustedCertificateDialog::handleRejected");
+ sendResult(KDialogRejected);
+ close();
+}
+
+// ----------------------------------------------------------------------------
+// UntrustedCertificateDialog::handlePermanentAcceptance()
+// ----------------------------------------------------------------------------
+//
+void UntrustedCertificateDialog::handlePermanentAcceptance()
+{
+ TRACE("UntrustedCertificateDialog::handlePermanentAcceptance");
+ sendResult(KDialogAcceptedPermanently);
+ close();
+}
+