18 #include "ui_qgsauthidentitieseditor.h"    21 #include <QMessageBox>    39     mAuthNotifyLayout = 
new QVBoxLayout;
    40     this->setLayout( mAuthNotifyLayout );
    42     mAuthNotifyLayout->addWidget( mAuthNotify );
    47     connect( btnAddIdentity, &QToolButton::clicked, 
this, &QgsAuthIdentitiesEditor::btnAddIdentity_clicked );
    48     connect( btnRemoveIdentity, &QToolButton::clicked, 
this, &QgsAuthIdentitiesEditor::btnRemoveIdentity_clicked );
    49     connect( btnInfoIdentity, &QToolButton::clicked, 
this, &QgsAuthIdentitiesEditor::btnInfoIdentity_clicked );
    50     connect( btnGroupByOrg, &QToolButton::toggled, 
this, &QgsAuthIdentitiesEditor::btnGroupByOrg_toggled );
    53              this, &QgsAuthIdentitiesEditor::authMessageOut );
    56              this, &QgsAuthIdentitiesEditor::refreshIdentitiesView );
    58     setupIdentitiesTree();
    60     connect( treeIdentities->selectionModel(), &QItemSelectionModel::selectionChanged,
    61              this, &QgsAuthIdentitiesEditor::selectionChanged );
    63     connect( treeIdentities, &QTreeWidget::itemDoubleClicked,
    64              this, &QgsAuthIdentitiesEditor::handleDoubleClick );
    66     connect( btnViewRefresh, &QAbstractButton::clicked, 
this, &QgsAuthIdentitiesEditor::refreshIdentitiesView );
    68     btnGroupByOrg->setChecked( 
false );
    70     if ( !sortbyval.isNull() )
    71       btnGroupByOrg->setChecked( sortbyval.toBool() );
    73     populateIdentitiesView();
    78 static void setItemBold_( QTreeWidgetItem *item )
    80   item->setFirstColumnSpanned( 
true );
    81   QFont secf( item->font( 0 ) );
    83   item->setFont( 0, secf );
    86 void QgsAuthIdentitiesEditor::setupIdentitiesTree()
    88   treeIdentities->setColumnCount( 3 );
    89   treeIdentities->setHeaderLabels(
    90     QStringList() << tr( 
"Common Name" )
    92     << tr( 
"Expiry Date" ) );
    93   treeIdentities->setColumnWidth( 0, 300 );
    94   treeIdentities->setColumnWidth( 1, 75 );
    97   mRootCertIdentItem = 
new QTreeWidgetItem(
    99     QStringList( tr( 
"Certificate Bundles" ) ),
   100     static_cast<int>( QgsAuthIdentitiesEditor::Section ) );
   101   setItemBold_( mRootCertIdentItem );
   102   mRootCertIdentItem->setFlags( Qt::ItemIsEnabled );
   103   mRootCertIdentItem->setExpanded( 
true );
   104   treeIdentities->insertTopLevelItem( 0, mRootCertIdentItem );
   107 static void removeChildren_( QTreeWidgetItem *item )
   109   Q_FOREACH ( QTreeWidgetItem *child, item->takeChildren() )
   115 void QgsAuthIdentitiesEditor::populateIdentitiesView()
   117   removeChildren_( mRootCertIdentItem );
   119   populateIdentitiesSection( mRootCertIdentItem,
   121                              QgsAuthIdentitiesEditor::CertIdentity );
   124 void QgsAuthIdentitiesEditor::refreshIdentitiesView()
   126   populateIdentitiesView();
   129 void QgsAuthIdentitiesEditor::populateIdentitiesSection( QTreeWidgetItem *item, 
const QList<QSslCertificate> &certs,
   130     QgsAuthIdentitiesEditor::IdentityType identype )
   132   if ( btnGroupByOrg->isChecked() )
   134     appendIdentitiesToGroup( certs, identype, item );
   138     appendIdentitiesToItem( certs, identype, item );
   142 void QgsAuthIdentitiesEditor::appendIdentitiesToGroup( 
const QList<QSslCertificate> &certs,
   143     QgsAuthIdentitiesEditor::IdentityType identype,
   144     QTreeWidgetItem *parent )
   151     parent = treeIdentities->currentItem();
   155   QMap< QString, QList<QSslCertificate> > orgcerts(
   158   QMap< QString, QList<QSslCertificate> >::const_iterator it = orgcerts.constBegin();
   159   for ( ; it != orgcerts.constEnd(); ++it )
   161     QTreeWidgetItem *grpitem( 
new QTreeWidgetItem( parent,
   162                               QStringList() << it.key(),
   163                               static_cast<int>( QgsAuthIdentitiesEditor::OrgName ) ) );
   164     grpitem->setFirstColumnSpanned( 
true );
   165     grpitem->setFlags( Qt::ItemIsEnabled );
   166     grpitem->setExpanded( 
true );
   168     QBrush orgb( grpitem->foreground( 0 ) );
   169     orgb.setColor( QColor::fromRgb( 90, 90, 90 ) );
   170     grpitem->setForeground( 0, orgb );
   171     QFont grpf( grpitem->font( 0 ) );
   172     grpf.setItalic( 
true );
   173     grpitem->setFont( 0, grpf );
   175     appendIdentitiesToItem( it.value(), identype, grpitem );
   178   parent->sortChildren( 0, Qt::AscendingOrder );
   181 void QgsAuthIdentitiesEditor::appendIdentitiesToItem( 
const QList<QSslCertificate> &certs,
   182     QgsAuthIdentitiesEditor::IdentityType identype,
   183     QTreeWidgetItem *parent )
   190     parent = treeIdentities->currentItem();
   196   Q_FOREACH ( 
const QSslCertificate &cert, certs )
   202     coltxts << QString( cert.serialNumber() );
   203     coltxts << cert.expiryDate().toString();
   205     QTreeWidgetItem *item( 
new QTreeWidgetItem( parent, coltxts, static_cast<int>( identype ) ) );
   210       item->setForeground( 2, redb );
   214     item->setData( 0, Qt::UserRole, 
id );
   217   parent->sortChildren( 0, Qt::AscendingOrder );
   220 void QgsAuthIdentitiesEditor::showCertInfo( QTreeWidgetItem *item )
   225   QString digest( item->data( 0, Qt::UserRole ).toString() );
   229     QgsDebugMsg( QStringLiteral( 
"Certificate identity does not exist in database" ) );
   236   dlg->setWindowModality( Qt::WindowModal );
   237   dlg->resize( 675, 500 );
   242 void QgsAuthIdentitiesEditor::selectionChanged( 
const QItemSelection &selected, 
const QItemSelection &deselected )
   244   Q_UNUSED( selected );
   245   Q_UNUSED( deselected );
   249 void QgsAuthIdentitiesEditor::checkSelection()
   252   if ( treeIdentities->selectionModel()->selection().length() > 0 )
   254     QTreeWidgetItem *item( treeIdentities->currentItem() );
   256     switch ( ( QgsAuthIdentitiesEditor::IdentityType )item->type() )
   258       case QgsAuthIdentitiesEditor::CertIdentity:
   266   btnRemoveIdentity->setEnabled( iscert );
   267   btnInfoIdentity->setEnabled( iscert );
   270 void QgsAuthIdentitiesEditor::handleDoubleClick( QTreeWidgetItem *item, 
int col )
   275   switch ( ( QgsAuthIdentitiesEditor::IdentityType )item->type() )
   277     case QgsAuthIdentitiesEditor::Section:
   280     case QgsAuthIdentitiesEditor::OrgName:
   289     showCertInfo( item );
   293 void QgsAuthIdentitiesEditor::btnAddIdentity_clicked()
   296   dlg->setWindowModality( Qt::WindowModal );
   297   dlg->resize( 400, dlg->height() );
   305         messageBar()->
pushMessage( tr( 
"ERROR storing identity bundle in authentication database." ),
   308       populateIdentitiesView();
   309       mRootCertIdentItem->setExpanded( 
true );
   315 void QgsAuthIdentitiesEditor::btnRemoveIdentity_clicked()
   317   QTreeWidgetItem *item( treeIdentities->currentItem() );
   321     QgsDebugMsg( QStringLiteral( 
"Current tree widget item not set" ) );
   325   QString digest( item->data( 0, Qt::UserRole ).toString() );
   327   if ( digest.isEmpty() )
   329     messageBar()->
pushMessage( tr( 
"Certificate id missing." ),
   336     QgsDebugMsg( QStringLiteral( 
"Certificate identity does not exist in database" ) );
   340   if ( QMessageBox::warning(
   341          this, tr( 
"Remove Certificate Identity" ),
   342          tr( 
"Are you sure you want to remove the selected "   343              "certificate identity from the database?\n\n"   344              "Operation can NOT be undone!" ),
   345          QMessageBox::Ok | QMessageBox::Cancel,
   346          QMessageBox::Cancel ) == QMessageBox::Cancel )
   353     messageBar()->
pushMessage( tr( 
"ERROR removing cert identity from authentication database for id %1:" ).arg( digest ),
   358   item->parent()->removeChild( item );
   362 void QgsAuthIdentitiesEditor::btnInfoIdentity_clicked()
   364   if ( treeIdentities->selectionModel()->selection().length() > 0 )
   366     QTreeWidgetItem *item( treeIdentities->currentItem() );
   367     handleDoubleClick( item, 0 );
   371 void QgsAuthIdentitiesEditor::btnGroupByOrg_toggled( 
bool checked )
   375     authMessageOut( QObject::tr( 
"Could not store sort by preference." ),
   376                     QObject::tr( 
"Authentication Identities" ),
   379   populateIdentitiesView();
   384   int levelint = 
static_cast<int>( level );
   392     treeIdentities->setFocus();
   394   QWidget::showEvent( e );
   402 int QgsAuthIdentitiesEditor::messageTimeout()
   405   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. 
 
static QIcon getThemeIcon(const QString &name)
Helper to get a theme icon. 
 
Widget for importing an identity certificate/key bundle into the authentication database. 
 
QgsAuthImportIdentityDialog::IdentityType identityType()
Gets identity type. 
 
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) 
 
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...
 
void showEvent(QShowEvent *e) override
Overridden show event of base widget. 
 
bool storeCertIdentity(const QSslCertificate &cert, const QSslKey &key)
Store a certificate identity. 
 
void authDatabaseChanged()
Emitted when the authentication db is significantly changed, e.g. large record removal, erased, etc. 
 
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. 
 
bool existsCertIdentity(const QString &id)
Check if a certificate identity exists. 
 
const QPair< QSslCertificate, QSslKey > certBundleToImport()
Gets certificate/key bundle to be imported. 
 
static QString resolvedCertName(const QSslCertificate &cert, bool issuer=false)
Gets the general name via RFC 5280 resolution. 
 
QgsAuthIdentitiesEditor(QWidget *parent=nullptr)
Widget for editing authentication configurations directly in database.