20 #include <QFileDialog> 22 #include <QPushButton> 43 mAuthNotifyLayout =
new QVBoxLayout;
44 this->setLayout( mAuthNotifyLayout );
46 mAuthNotifyLayout->addWidget( mAuthNotify );
51 connect( btnImportFile, &QToolButton::clicked,
this, &QgsAuthImportCertDialog::btnImportFile_clicked );
52 connect( chkAllowInvalid, &QCheckBox::toggled,
this, &QgsAuthImportCertDialog::chkAllowInvalid_toggled );
54 connect( buttonBox, &QDialogButtonBox::accepted,
this, &QDialog::accept );
55 connect( buttonBox, &QDialogButtonBox::rejected,
this, &QDialog::reject );
57 connect( teCertText, &QPlainTextEdit::textChanged,
this, &QgsAuthImportCertDialog::validateCertificates );
59 connect( radioImportFile, &QAbstractButton::toggled,
this, &QgsAuthImportCertDialog::updateGui );
60 connect( radioImportText, &QAbstractButton::toggled,
this, &QgsAuthImportCertDialog::updateGui );
65 radioImportText->setHidden(
true );
66 teCertText->setHidden(
true );
70 radioImportFile->setHidden(
true );
71 frameImportFile->setHidden(
true );
74 radioImportFile->setChecked(
true );
79 grpbxImportCert->setTitle( tr(
"Import Certificate Authorities" ) );
82 okButton()->setText( tr(
"Import" ) );
83 okButton()->setEnabled(
false );
84 teValidation->setFocus();
92 return QList<QSslCertificate>();
103 if ( !radioImportFile->isChecked() )
106 return leImportFile->text();
115 if ( !radioImportText->isChecked() )
118 return teCertText->toPlainText().trimmed();
127 return chkAllowInvalid->isChecked();
136 return cmbbxTrust->trustPolicy();
139 void QgsAuthImportCertDialog::updateGui()
141 frameImportFile->setEnabled( radioImportFile->isChecked() );
142 teCertText->setEnabled( radioImportText->isChecked() );
143 validateCertificates();
146 void QgsAuthImportCertDialog::validateCertificates()
149 teValidation->clear();
150 teValidation->setStyleSheet( QString() );
153 QList<QSslCertificate> certs;
154 QList<QSslCertificate> nixcerts;
156 bool allowinvalid = chkAllowInvalid->isChecked();
157 bool filterCAs = ( mFilter ==
CaFilter );
160 if ( radioImportFile->isChecked() && !leImportFile->text().isEmpty() )
164 else if ( radioImportText->isChecked() && !teCertText->toPlainText().trimmed().isEmpty() )
169 int certssize = certs.size();
171 Q_FOREACH (
const QSslCertificate &cert, certs )
189 valid = ( certssize > 0
190 && ( allowinvalid || certssize == validcerts )
191 && ( !filterCAs || nixcerts.size() < certssize ) );
193 if ( !nixcerts.isEmpty() )
195 Q_FOREACH (
const QSslCertificate &nixcert, nixcerts )
197 certs.removeOne( nixcert );
206 teValidation->setStyleSheet(
211 QString msg = tr(
"Certificates found: %1\n" 212 "Certificates valid: %2" ).arg( certssize ).arg( validcerts );
216 msg += tr(
"\nAuthorities/Issuers: %1%2" ).arg( cas )
217 .arg( !nixcerts.isEmpty() && nixcerts.size() < certssize ?
" (others not imported)" :
"" );
220 teValidation->setText( msg );
222 okButton()->setEnabled( valid );
225 void QgsAuthImportCertDialog::btnImportFile_clicked()
227 const QString &fn = getOpenFileName( tr(
"Open Certificate File" ), tr(
"All files (*.*);;PEM (*.pem);;DER (*.der)" ) );
230 leImportFile->setText( fn );
232 validateCertificates();
235 void QgsAuthImportCertDialog::chkAllowInvalid_toggled(
bool checked )
238 validateCertificates();
241 QString QgsAuthImportCertDialog::getOpenFileName(
const QString &title,
const QString &extfilter )
244 QString recentdir = settings.
value( QStringLiteral(
"UI/lastAuthImportCertOpenFileDir" ), QDir::homePath() ).toString();
245 QString f = QFileDialog::getOpenFileName(
this, title, recentdir, extfilter );
249 this->activateWindow();
253 settings.
setValue( QStringLiteral(
"UI/lastAuthImportCertOpenFileDir" ), QFileInfo( f ).absoluteDir().path() );
258 QPushButton *QgsAuthImportCertDialog::okButton()
260 return buttonBox->button( QDialogButtonBox::Ok );
This class is a composition of two QSettings instances:
const QString certTextToImport()
Gets certificate text to import.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
static QList< QSslCertificate > certsFromFile(const QString &certspath)
Returns a list of concatenated certs from a PEM or DER formatted file.
static bool certificateIsAuthorityOrIssuer(const QSslCertificate &cert)
Gets whether a certificate is an Authority or can at least sign other certificates.
bool allowInvalidCerts()
Whether to allow importation of invalid certificates (so trust policy can be overridden) ...
const QString certFileToImport()
Gets the file path to a certificate to import.
CertInput
Type of inputs for certificates.
static bool certIsViable(const QSslCertificate &cert)
certIsViable checks for viability errors of cert and whether it is NULL
QgsAuthCertUtils::CertTrustPolicy certTrustPolicy()
Defined trust policy for imported certificates.
static QString greenTextStyleSheet(const QString &selector="*")
Green text stylesheet representing valid, trusted, etc. certificate.
static QList< QSslCertificate > certsFromString(const QString &pemtext)
Returns a list of concatenated certs from a PEM Base64 text block.
const QList< QSslCertificate > certificatesToImport()
Gets list of certificate objects to import.
static QgsAuthManager * authManager()
Returns the application's authentication manager instance.
static QString redTextStyleSheet(const QString &selector="*")
Red text stylesheet representing invalid, untrusted, etc. certificate.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
CertTrustPolicy
Type of certificate trust policy.
CertFilter
Type of filter to apply to dialog.
QgsAuthImportCertDialog(QWidget *parent=nullptr, QgsAuthImportCertDialog::CertFilter filter=NoFilter, QgsAuthImportCertDialog::CertInput input=AllInputs)
Construct a dialog for importing certificates.