[network/falkon] src/lib/network: Add certificate information into SSL error dialog
Juraj Oravec
null at kde.org
Mon Jun 9 21:39:28 BST 2025
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 <jurajoravec at mailo.com>
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/>
More information about the kde-doc-english
mailing list