Git commit ae6cf52f112d359009f3b7950e74cef501ae5717 by Juraj Oravec. Committed on 09/06/2025 at 20:32. Pushed by jurajo into branch 'master'.
Add certificate information into SSL error dialog FIXED-IN: 25.08 FEATURE: 505141 GUI: Signed-off-by: Juraj Oravec <[email protected]> M +2 -1 src/lib/network/networkmanager.cpp M +33 -0 src/lib/network/sslerrordialog.cpp M +4 -0 src/lib/network/sslerrordialog.h M +75 -21 src/lib/network/sslerrordialog.ui https://invent.kde.org/network/falkon/-/commit/ae6cf52f112d359009f3b7950e74cef501ae5717 diff --git a/src/lib/network/networkmanager.cpp b/src/lib/network/networkmanager.cpp index aadcfd8f3..ef1a7a57d 100644 --- a/src/lib/network/networkmanager.cpp +++ b/src/lib/network/networkmanager.cpp @@ -89,7 +89,7 @@ bool NetworkManager::certificateError(QWebEngineCertificateError &error, QWidget error.defer(); QString title = tr("SSL Certificate Error!"); - QString text1 = tr("The page you are trying to access has the following errors in the SSL certificate:"); + QString text1 = tr("The page <strong>%1</strong> you are trying to access has the following errors in the SSL certificate:").arg(host); QString text2 = tr("Would you like to make an exception for this certificate?"); const auto errorDescription = error.description(); @@ -97,6 +97,7 @@ bool NetworkManager::certificateError(QWebEngineCertificateError &error, QWidget SslErrorDialog dialog(parent); dialog.setText(message); + dialog.setCertificateChain(error.certificateChain()); dialog.exec(); switch (dialog.result()) { diff --git a/src/lib/network/sslerrordialog.cpp b/src/lib/network/sslerrordialog.cpp index 2fbd6f366..a5ac3b585 100644 --- a/src/lib/network/sslerrordialog.cpp +++ b/src/lib/network/sslerrordialog.cpp @@ -20,6 +20,7 @@ #include "iconprovider.h" #include <QPushButton> +#include <QPlainTextEdit> SslErrorDialog::SslErrorDialog(QWidget* parent) : QDialog(parent) @@ -31,7 +32,12 @@ SslErrorDialog::SslErrorDialog(QWidget* parent) ui->buttonBox->addButton(tr("Only for this session"), QDialogButtonBox::ApplyRole); ui->buttonBox->button(QDialogButtonBox::No)->setFocus(); + ui->certTabWidget->hide(); + ui->certDetailsButton->hide(); + adjustSize(); + connect(ui->buttonBox, &QDialogButtonBox::clicked, this, &SslErrorDialog::buttonClicked); + connect(ui->certDetailsButton, &QPushButton::clicked, this, &SslErrorDialog::toggleCertificateDetails); } SslErrorDialog::~SslErrorDialog() @@ -44,6 +50,23 @@ void SslErrorDialog::setText(const QString &text) ui->text->setText(text); } +void SslErrorDialog::setCertificateChain(const QList<QSslCertificate> &certificateChain) +{ + if (certificateChain.isEmpty()) { + return; + } + + ui->certDetailsButton->show(); + + for (auto &certificate : certificateChain) { + auto *certDescription = new QPlainTextEdit(ui->certTabWidget); + certDescription->setPlainText(certificate.toText()); + certDescription->setReadOnly(true); + ui->certTabWidget->indexOf(certDescription); + ui->certTabWidget->addTab(certDescription, certificate.subjectDisplayName()); + } +} + SslErrorDialog::Result SslErrorDialog::result() { return m_result; @@ -73,3 +96,13 @@ void SslErrorDialog::buttonClicked(QAbstractButton* button) break; } } + +void SslErrorDialog::toggleCertificateDetails() +{ + if (ui->certTabWidget->isVisible()) { + ui->certTabWidget->hide(); + } + else { + ui->certTabWidget->show(); + } +} diff --git a/src/lib/network/sslerrordialog.h b/src/lib/network/sslerrordialog.h index df406a35a..087bebbf3 100644 --- a/src/lib/network/sslerrordialog.h +++ b/src/lib/network/sslerrordialog.h @@ -19,6 +19,7 @@ #define SSLERRORDIALOG_H #include <QDialog> +#include <QSslCertificate> namespace Ui { @@ -40,10 +41,13 @@ public: ~SslErrorDialog(); void setText(const QString &text); + void setCertificateChain(const QList<QSslCertificate> &certificateChain); + Result result(); private Q_SLOTS: void buttonClicked(QAbstractButton* button); + void toggleCertificateDetails(); private: Ui::SslErrorDialog* ui; diff --git a/src/lib/network/sslerrordialog.ui b/src/lib/network/sslerrordialog.ui index a0ccaf7eb..8c5c9cbde 100644 --- a/src/lib/network/sslerrordialog.ui +++ b/src/lib/network/sslerrordialog.ui @@ -7,39 +7,26 @@ <x>0</x> <y>0</y> <width>511</width> - <height>72</height> + <height>366</height> </rect> </property> <property name="windowTitle"> <string>SSL Certificate Error!</string> </property> - <layout class="QGridLayout" name="gridLayout"> + <layout class="QGridLayout" name="gridLayout" rowstretch="0,1,0"> <item row="0" column="0"> <widget class="QLabel" name="icon"> <property name="alignment"> - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> + <set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop</set> </property> </widget> </item> - <item row="0" column="1"> - <widget class="QLabel" name="text"> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="alignment"> - <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set> - </property> - </widget> - </item> - <item row="1" column="0" colspan="2"> + <item row="2" column="0" colspan="3"> <layout class="QHBoxLayout" name="horizontalLayout_2"> <item> <spacer name="horizontalSpacer_3"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -58,17 +45,17 @@ </sizepolicy> </property> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="standardButtons"> - <set>QDialogButtonBox::No|QDialogButtonBox::Yes</set> + <set>QDialogButtonBox::StandardButton::No|QDialogButtonBox::StandardButton::Yes</set> </property> </widget> </item> <item> <spacer name="horizontalSpacer_4"> <property name="orientation"> - <enum>Qt::Horizontal</enum> + <enum>Qt::Orientation::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> @@ -80,6 +67,73 @@ </item> </layout> </item> + <item row="0" column="2"> + <widget class="QLabel" name="text"> + <property name="sizePolicy"> + <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="alignment"> + <set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop</set> + </property> + </widget> + </item> + <item row="1" column="0" colspan="3"> + <layout class="QVBoxLayout" name="verticalLayout" stretch="0,1,0"> + <item> + <layout class="QHBoxLayout" name="certificateLayout"> + <item> + <widget class="QPushButton" name="certDetailsButton"> + <property name="text"> + <string>Toggle Certificate Details</string> + </property> + </widget> + </item> + <item> + <spacer name="horizontalSpacer"> + <property name="orientation"> + <enum>Qt::Orientation::Horizontal</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>40</width> + <height>20</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> + <item> + <widget class="QTabWidget" name="certTabWidget"> + <property name="currentIndex"> + <number>-1</number> + </property> + <property name="tabBarAutoHide"> + <bool>false</bool> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Orientation::Vertical</enum> + </property> + <property name="sizeType"> + <enum>QSizePolicy::Policy::MinimumExpanding</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>0</height> + </size> + </property> + </spacer> + </item> + </layout> + </item> </layout> </widget> <resources/>
