18 #include "ui_qgsauthtrustedcasdialog.h"    20 #include <QPushButton>    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 );
    64     if ( !sortbyval.isNull() )
    65       btnGroupByOrg->setChecked( sortbyval.toBool() );
    67     populateCaCertsView();
    72 static void setItemBold_( QTreeWidgetItem *item )
    74   item->setFirstColumnSpanned( 
true );
    75   QFont secf( item->font( 0 ) );
    77   item->setFont( 0, secf );
    80 void 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 );
   101 static void removeChildren_( QTreeWidgetItem *item )
   103   const auto constTakeChildren = item->takeChildren();
   104   for ( QTreeWidgetItem *child : constTakeChildren )
   110 void QgsAuthTrustedCAsDialog::populateCaCertsView()
   112   removeChildren_( mRootCaSecItem );
   114   if ( mTrustedCAs.isEmpty() )
   119   populateCaCertsSection( mRootCaSecItem, mTrustedCAs, QgsAuthTrustedCAsDialog::CaCert );
   122 void 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 );
   135 void QgsAuthTrustedCAsDialog::appendCertsToGroup( 
const QList<QSslCertificate> &certs,
   136     QgsAuthTrustedCAsDialog::CaType catype,
   137     QTreeWidgetItem *parent )
   144     parent = treeTrustedCAs->currentItem();
   148   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 );
   174 void 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 );
   214 void QgsAuthTrustedCAsDialog::showCertInfo( QTreeWidgetItem *item )
   219   QString digest( item->data( 0, Qt::UserRole ).toString() );
   221   QMap<QString, QPair<QgsAuthCertUtils::CaCertSource, QSslCertificate> > cacertscache(
   224   if ( !cacertscache.contains( digest ) )
   226     QgsDebugMsg( QStringLiteral( 
"Certificate Authority not in CA certs cache" ) );
   230   QSslCertificate cert( cacertscache.value( digest ).second );
   233   dlg->setWindowModality( Qt::WindowModal );
   234   dlg->resize( 675, 500 );
   239 void QgsAuthTrustedCAsDialog::selectionChanged( 
const QItemSelection &selected, 
const QItemSelection &deselected )
   242   Q_UNUSED( deselected )
   246 void 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 );
   266 void QgsAuthTrustedCAsDialog::handleDoubleClick( QTreeWidgetItem *item, 
int col )
   271   switch ( ( QgsAuthTrustedCAsDialog::CaType )item->type() )
   273     case QgsAuthTrustedCAsDialog::Section:
   276     case QgsAuthTrustedCAsDialog::OrgName:
   285     showCertInfo( item );
   289 void QgsAuthTrustedCAsDialog::btnInfoCa_clicked()
   291   if ( treeTrustedCAs->selectionModel()->selection().length() > 0 )
   293     QTreeWidgetItem *item( treeTrustedCAs->currentItem() );
   294     handleDoubleClick( item, 0 );
   298 void QgsAuthTrustedCAsDialog::btnGroupByOrg_toggled( 
bool checked )
   302     authMessageOut( QObject::tr( 
"Could not store sort by preference" ),
   303                     QObject::tr( 
"Trusted Authorities/Issuers" ),
   306   populateCaCertsView();
   311   int levelint = 
static_cast<int>( level );
   319     treeTrustedCAs->setFocus();
   321   QDialog::showEvent( e );
   329 int QgsAuthTrustedCAsDialog::messageTimeout()
   332   return settings.
value( QStringLiteral( 
"qgis/messageTimeout" ), 5 ).toInt();
 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. 
 
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. 
 
A bar for displaying non-blocking messages to the user. 
 
void showEvent(QShowEvent *e) override
 
static QIcon getThemeIcon(const QString &name)
Helper to get a theme icon. 
 
MessageLevel
Level for messages This will be used both for message log and message bar in application. 
 
MessageLevel
Message log level (mirrors that of QgsMessageLog, so it can also output there) 
 
const QList< QSslCertificate > trustedCaCerts(bool includeinvalid=false)
trustedCaCerts get list of all trusted CA certificates 
 
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. 
 
Dialog wrapper for widget displaying detailed info on a certificate and its hierarchical trust chain...
 
QgsAuthTrustedCAsDialog(QWidget *parent=nullptr, const QList< QSslCertificate > &trustedCAs=QList< QSslCertificate >())
Construct a dialog that will list the trusted Certificate Authorities. 
 
void pushMessage(const QString &text, Qgis::MessageLevel level=Qgis::Info, int duration=5)
convenience method for pushing a message to the bar 
 
static QString shaHexForCert(const QSslCertificate &cert, bool formatted=false)
Gets the sha1 hash for certificate. 
 
static QgsAuthManager * authManager()
Returns the application's authentication manager instance. 
 
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 )) ...
 
static QMap< QString, QList< QSslCertificate > > certsGroupedByOrg(const QList< QSslCertificate > &certs)
Map certificates to their oraganization. 
 
static QString resolvedCertName(const QSslCertificate &cert, bool issuer=false)
Gets the general name via RFC 5280 resolution.