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   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 );
 
  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   const QString digest( item->data( 0, Qt::UserRole ).toString() );
 
  221   const QMap<QString, QPair<QgsAuthCertUtils::CaCertSource, QSslCertificate> > cacertscache(
 
  224   if ( !cacertscache.contains( digest ) )
 
  226     QgsDebugMsg( 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 );
 
  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   const 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();