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.