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 Q_FOREACH ( QTreeWidgetItem *child, item->takeChildren() )
109 void QgsAuthTrustedCAsDialog::populateCaCertsView()
111 removeChildren_( mRootCaSecItem );
113 if ( mTrustedCAs.isEmpty() )
118 populateCaCertsSection( mRootCaSecItem, mTrustedCAs, QgsAuthTrustedCAsDialog::CaCert );
121 void QgsAuthTrustedCAsDialog::populateCaCertsSection( QTreeWidgetItem *item,
const QList<QSslCertificate> &certs,
122 QgsAuthTrustedCAsDialog::CaType catype )
124 if ( btnGroupByOrg->isChecked() )
126 appendCertsToGroup( certs, catype, item );
130 appendCertsToItem( certs, catype, item );
134 void QgsAuthTrustedCAsDialog::appendCertsToGroup(
const QList<QSslCertificate> &certs,
135 QgsAuthTrustedCAsDialog::CaType catype,
136 QTreeWidgetItem *parent )
143 parent = treeTrustedCAs->currentItem();
147 QMap< QString, QList<QSslCertificate> > orgcerts(
150 QMap< QString, QList<QSslCertificate> >::const_iterator it = orgcerts.constBegin();
151 for ( ; it != orgcerts.constEnd(); ++it )
153 QTreeWidgetItem *grpitem(
new QTreeWidgetItem( parent,
154 QStringList() << it.key(),
155 static_cast<int>( QgsAuthTrustedCAsDialog::OrgName ) ) );
156 grpitem->setFirstColumnSpanned(
true );
157 grpitem->setFlags( Qt::ItemIsEnabled );
158 grpitem->setExpanded(
true );
160 QBrush orgb( grpitem->foreground( 0 ) );
161 orgb.setColor( QColor::fromRgb( 90, 90, 90 ) );
162 grpitem->setForeground( 0, orgb );
163 QFont grpf( grpitem->font( 0 ) );
164 grpf.setItalic(
true );
165 grpitem->setFont( 0, grpf );
167 appendCertsToItem( it.value(), catype, grpitem );
170 parent->sortChildren( 0, Qt::AscendingOrder );
173 void QgsAuthTrustedCAsDialog::appendCertsToItem(
const QList<QSslCertificate> &certs,
174 QgsAuthTrustedCAsDialog::CaType catype,
175 QTreeWidgetItem *parent )
182 parent = treeTrustedCAs->currentItem();
188 Q_FOREACH (
const QSslCertificate &cert, certs )
194 coltxts << QString( cert.serialNumber() );
195 coltxts << cert.expiryDate().toString();
197 QTreeWidgetItem *item(
new QTreeWidgetItem( parent, coltxts, static_cast<int>( catype ) ) );
202 item->setForeground( 2, redb );
206 item->setData( 0, Qt::UserRole,
id );
209 parent->sortChildren( 0, Qt::AscendingOrder );
212 void QgsAuthTrustedCAsDialog::showCertInfo( QTreeWidgetItem *item )
217 QString digest( item->data( 0, Qt::UserRole ).toString() );
219 QMap<QString, QPair<QgsAuthCertUtils::CaCertSource, QSslCertificate> > cacertscache(
222 if ( !cacertscache.contains( digest ) )
224 QgsDebugMsg( QStringLiteral(
"Certificate Authority not in CA certs cache" ) );
228 QSslCertificate cert( cacertscache.value( digest ).second );
231 dlg->setWindowModality( Qt::WindowModal );
232 dlg->resize( 675, 500 );
237 void QgsAuthTrustedCAsDialog::selectionChanged(
const QItemSelection &selected,
const QItemSelection &deselected )
239 Q_UNUSED( selected );
240 Q_UNUSED( deselected );
244 void QgsAuthTrustedCAsDialog::checkSelection()
247 if ( treeTrustedCAs->selectionModel()->selection().length() > 0 )
249 QTreeWidgetItem *item( treeTrustedCAs->currentItem() );
251 switch ( ( QgsAuthTrustedCAsDialog::CaType )item->type() )
253 case QgsAuthTrustedCAsDialog::CaCert:
261 btnInfoCa->setEnabled( iscert );
264 void QgsAuthTrustedCAsDialog::handleDoubleClick( QTreeWidgetItem *item,
int col )
269 switch ( ( QgsAuthTrustedCAsDialog::CaType )item->type() )
271 case QgsAuthTrustedCAsDialog::Section:
274 case QgsAuthTrustedCAsDialog::OrgName:
283 showCertInfo( item );
287 void QgsAuthTrustedCAsDialog::btnInfoCa_clicked()
289 if ( treeTrustedCAs->selectionModel()->selection().length() > 0 )
291 QTreeWidgetItem *item( treeTrustedCAs->currentItem() );
292 handleDoubleClick( item, 0 );
296 void QgsAuthTrustedCAsDialog::btnGroupByOrg_toggled(
bool checked )
300 authMessageOut( QObject::tr(
"Could not store sort by preference" ),
301 QObject::tr(
"Trusted Authorities/Issuers" ),
304 populateCaCertsView();
309 int levelint =
static_cast<int>( level );
317 treeTrustedCAs->setFocus();
319 QDialog::showEvent( e );
327 int QgsAuthTrustedCAsDialog::messageTimeout()
330 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.