18#include "ui_qgsauthtrustedcasdialog.h"
32 const QList<QSslCertificate> &trustedCAs )
34 , mTrustedCAs( trustedCAs )
39 mAuthNotifyLayout =
new QVBoxLayout;
40 this->setLayout( mAuthNotifyLayout );
42 mAuthNotifyLayout->addWidget( mAuthNotify );
47 connect( btnInfoCa, &QToolButton::clicked,
this, &QgsAuthTrustedCAsDialog::btnInfoCa_clicked );
48 connect( btnGroupByOrg, &QToolButton::toggled,
this, &QgsAuthTrustedCAsDialog::btnGroupByOrg_toggled );
51 this, &QgsAuthTrustedCAsDialog::authMessageOut );
55 connect( treeTrustedCAs->selectionModel(), &QItemSelectionModel::selectionChanged,
56 this, &QgsAuthTrustedCAsDialog::selectionChanged );
58 connect( treeTrustedCAs, &QTreeWidget::itemDoubleClicked,
59 this, &QgsAuthTrustedCAsDialog::handleDoubleClick );
62 btnGroupByOrg->setChecked(
false );
65 btnGroupByOrg->setChecked( sortbyval.toBool() );
67 populateCaCertsView();
72static void setItemBold_( QTreeWidgetItem *item )
74 item->setFirstColumnSpanned(
true );
75 QFont secf( item->font( 0 ) );
77 item->setFont( 0, secf );
80void QgsAuthTrustedCAsDialog::setupCaCertsTree()
82 treeTrustedCAs->setColumnCount( 3 );
83 treeTrustedCAs->setHeaderLabels(
84 QStringList() << tr(
"Common Name" )
86 << tr(
"Expiry Date" ) );
87 treeTrustedCAs->setColumnWidth( 0, 300 );
88 treeTrustedCAs->setColumnWidth( 1, 75 );
91 mRootCaSecItem =
new QTreeWidgetItem(
93 QStringList( tr(
"Authorities/Issuers" ) ),
94 static_cast<int>( QgsAuthTrustedCAsDialog::Section ) );
95 setItemBold_( mRootCaSecItem );
96 mRootCaSecItem->setFlags( Qt::ItemIsEnabled );
97 mRootCaSecItem->setExpanded(
true );
98 treeTrustedCAs->insertTopLevelItem( 0, mRootCaSecItem );
101static void removeChildren_( QTreeWidgetItem *item )
103 const auto constTakeChildren = item->takeChildren();
104 for ( QTreeWidgetItem *child : constTakeChildren )
110void QgsAuthTrustedCAsDialog::populateCaCertsView()
112 removeChildren_( mRootCaSecItem );
114 if ( mTrustedCAs.isEmpty() )
119 populateCaCertsSection( mRootCaSecItem, mTrustedCAs, QgsAuthTrustedCAsDialog::CaCert );
122void QgsAuthTrustedCAsDialog::populateCaCertsSection( QTreeWidgetItem *item,
const QList<QSslCertificate> &certs,
123 QgsAuthTrustedCAsDialog::CaType catype )
125 if ( btnGroupByOrg->isChecked() )
127 appendCertsToGroup( certs, catype, item );
131 appendCertsToItem( certs, catype, item );
135void QgsAuthTrustedCAsDialog::appendCertsToGroup(
const QList<QSslCertificate> &certs,
136 QgsAuthTrustedCAsDialog::CaType catype,
137 QTreeWidgetItem *parent )
144 parent = treeTrustedCAs->currentItem();
148 const QMap< QString, QList<QSslCertificate> > orgcerts(
151 QMap< QString, QList<QSslCertificate> >::const_iterator it = orgcerts.constBegin();
152 for ( ; it != orgcerts.constEnd(); ++it )
154 QTreeWidgetItem *grpitem(
new QTreeWidgetItem( parent,
155 QStringList() << it.key(),
156 static_cast<int>( QgsAuthTrustedCAsDialog::OrgName ) ) );
157 grpitem->setFirstColumnSpanned(
true );
158 grpitem->setFlags( Qt::ItemIsEnabled );
159 grpitem->setExpanded(
true );
161 QBrush orgb( grpitem->foreground( 0 ) );
162 orgb.setColor( QColor::fromRgb( 90, 90, 90 ) );
163 grpitem->setForeground( 0, orgb );
164 QFont grpf( grpitem->font( 0 ) );
165 grpf.setItalic(
true );
166 grpitem->setFont( 0, grpf );
168 appendCertsToItem( it.value(), catype, grpitem );
171 parent->sortChildren( 0, Qt::AscendingOrder );
174void QgsAuthTrustedCAsDialog::appendCertsToItem(
const QList<QSslCertificate> &certs,
175 QgsAuthTrustedCAsDialog::CaType catype,
176 QTreeWidgetItem *parent )
183 parent = treeTrustedCAs->currentItem();
189 const auto constCerts = certs;
190 for (
const QSslCertificate &cert : constCerts )
196 coltxts << QString( cert.serialNumber() );
197 coltxts << cert.expiryDate().toString();
199 QTreeWidgetItem *item(
new QTreeWidgetItem( parent, coltxts,
static_cast<int>( catype ) ) );
204 item->setForeground( 2, redb );
208 item->setData( 0, Qt::UserRole,
id );
211 parent->sortChildren( 0, Qt::AscendingOrder );
214void QgsAuthTrustedCAsDialog::showCertInfo( QTreeWidgetItem *item )
219 const QString digest( item->data( 0, Qt::UserRole ).toString() );
221 const QMap<QString, QPair<QgsAuthCertUtils::CaCertSource, QSslCertificate> > cacertscache(
224 if ( !cacertscache.contains( digest ) )
226 QgsDebugError( QStringLiteral(
"Certificate Authority not in CA certs cache" ) );
230 const QSslCertificate cert( cacertscache.value( digest ).second );
233 dlg->setWindowModality( Qt::WindowModal );
234 dlg->resize( 675, 500 );
239void QgsAuthTrustedCAsDialog::selectionChanged(
const QItemSelection &selected,
const QItemSelection &deselected )
242 Q_UNUSED( deselected )
246void QgsAuthTrustedCAsDialog::checkSelection()
249 if ( treeTrustedCAs->selectionModel()->selection().length() > 0 )
251 QTreeWidgetItem *item( treeTrustedCAs->currentItem() );
253 switch ( ( QgsAuthTrustedCAsDialog::CaType )item->type() )
255 case QgsAuthTrustedCAsDialog::CaCert:
263 btnInfoCa->setEnabled( iscert );
266void QgsAuthTrustedCAsDialog::handleDoubleClick( QTreeWidgetItem *item,
int col )
271 switch ( ( QgsAuthTrustedCAsDialog::CaType )item->type() )
273 case QgsAuthTrustedCAsDialog::Section:
276 case QgsAuthTrustedCAsDialog::OrgName:
285 showCertInfo( item );
289void QgsAuthTrustedCAsDialog::btnInfoCa_clicked()
291 if ( treeTrustedCAs->selectionModel()->selection().length() > 0 )
293 QTreeWidgetItem *item( treeTrustedCAs->currentItem() );
294 handleDoubleClick( item, 0 );
298void QgsAuthTrustedCAsDialog::btnGroupByOrg_toggled(
bool checked )
302 authMessageOut( QObject::tr(
"Could not store sort by preference" ),
303 QObject::tr(
"Trusted Authorities/Issuers" ),
306 populateCaCertsView();
311 const int levelint =
static_cast<int>( level );
319 treeTrustedCAs->setFocus();
321 QDialog::showEvent( e );
329int QgsAuthTrustedCAsDialog::messageTimeout()
332 return settings.
value( QStringLiteral(
"qgis/messageTimeout" ), 5 ).toInt();
MessageLevel
Level for messages This will be used both for message log and message bar in application.
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
static QgsAuthManager * authManager()
Returns the application's authentication manager instance.
Dialog wrapper for widget displaying detailed info on a certificate and its hierarchical trust chain.
static QString resolvedCertName(const QSslCertificate &cert, bool issuer=false)
Gets the general name via RFC 5280 resolution.
static QMap< QString, QList< QSslCertificate > > certsGroupedByOrg(const QList< QSslCertificate > &certs)
Map certificates to their oraganization.
static QString shaHexForCert(const QSslCertificate &cert, bool formatted=false)
Gets the sha1 hash for certificate.
static bool certIsViable(const QSslCertificate &cert)
certIsViable checks for viability errors of cert and whether it is NULL
static QColor redColor()
Red color representing invalid, untrusted, etc. certificate.
MessageLevel
Message log level (mirrors that of QgsMessageLog, so it can also output there)
void messageOut(const QString &message, const QString &tag=QgsAuthManager::AUTH_MAN_TAG, QgsAuthManager::MessageLevel level=QgsAuthManager::INFO) const
Custom logging signal to relay to console output and QgsMessageLog.
QVariant authSetting(const QString &key, const QVariant &defaultValue=QVariant(), bool decrypt=false)
authSetting get an authentication setting (retrieved as string and returned as QVariant( QString ))
const QList< QSslCertificate > trustedCaCerts(bool includeinvalid=false)
trustedCaCerts get list of all trusted CA certificates
void showEvent(QShowEvent *e) override
QgsAuthTrustedCAsDialog(QWidget *parent=nullptr, const QList< QSslCertificate > &trustedCAs=QList< QSslCertificate >())
Construct a dialog that will list the trusted Certificate Authorities.
A bar for displaying non-blocking messages to the user.
void pushMessage(const QString &text, Qgis::MessageLevel level=Qgis::MessageLevel::Info, int duration=-1)
A convenience method for pushing a message with the specified text to the bar.
This class is a composition of two QSettings instances:
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
static bool isNull(const QVariant &variant)
Returns true if the specified variant should be considered a NULL value.
#define QgsDebugError(str)