33#include "moc_qgsauthimportcertdialog.cpp"
35using namespace Qt::StringLiterals;
45 mAuthNotifyLayout =
new QVBoxLayout;
46 this->setLayout( mAuthNotifyLayout );
48 mAuthNotifyLayout->addWidget( mAuthNotify );
53 connect( btnImportFile, &QToolButton::clicked,
this, &QgsAuthImportCertDialog::btnImportFile_clicked );
54 connect( chkAllowInvalid, &QCheckBox::toggled,
this, &QgsAuthImportCertDialog::chkAllowInvalid_toggled );
56 connect( buttonBox, &QDialogButtonBox::accepted,
this, &QDialog::accept );
57 connect( buttonBox, &QDialogButtonBox::rejected,
this, &QDialog::reject );
58 connect( buttonBox, &QDialogButtonBox::helpRequested,
this, [] {
59 QgsHelp::openHelp( u
"auth_system/auth_workflows.html#authentication-authorities"_s );
61 connect( teCertText, &QPlainTextEdit::textChanged,
this, &QgsAuthImportCertDialog::validateCertificates );
63 connect( radioImportFile, &QAbstractButton::toggled,
this, &QgsAuthImportCertDialog::updateGui );
64 connect( radioImportText, &QAbstractButton::toggled,
this, &QgsAuthImportCertDialog::updateGui );
69 radioImportText->setHidden(
true );
70 teCertText->setHidden(
true );
74 radioImportFile->setHidden(
true );
75 frameImportFile->setHidden(
true );
78 radioImportFile->setChecked(
true );
83 grpbxImportCert->setTitle( tr(
"Import Certificate Authorities" ) );
86 okButton()->setText( tr(
"Import" ) );
87 okButton()->setEnabled(
false );
88 teValidation->setFocus();
96 return QList<QSslCertificate>();
107 if ( !radioImportFile->isChecked() )
110 return leImportFile->text();
119 if ( !radioImportText->isChecked() )
122 return teCertText->toPlainText().trimmed();
131 return chkAllowInvalid->isChecked();
140 return cmbbxTrust->trustPolicy();
143void QgsAuthImportCertDialog::updateGui()
145 frameImportFile->setEnabled( radioImportFile->isChecked() );
146 teCertText->setEnabled( radioImportText->isChecked() );
147 validateCertificates();
150void QgsAuthImportCertDialog::validateCertificates()
153 teValidation->clear();
154 teValidation->setStyleSheet( QString() );
157 QList<QSslCertificate> certs;
158 QList<QSslCertificate> nixcerts;
160 const bool allowinvalid = chkAllowInvalid->isChecked();
161 const bool filterCAs = ( mFilter ==
CaFilter );
164 if ( radioImportFile->isChecked() && !leImportFile->text().isEmpty() )
166 certs = QgsAuthCertUtils::certsFromFile( leImportFile->text() );
168 else if ( radioImportText->isChecked() && !teCertText->toPlainText().trimmed().isEmpty() )
170 certs = QgsAuthCertUtils::certsFromString( teCertText->toPlainText().trimmed() );
173 const int certssize = certs.size();
175 const auto constCerts = certs;
176 for (
const QSslCertificate &cert : constCerts )
178 if ( QgsAuthCertUtils::certIsViable( cert ) )
183 if ( QgsAuthCertUtils::certificateIsAuthorityOrIssuer( cert ) )
194 valid = ( certssize > 0 && ( allowinvalid || certssize == validcerts ) && ( !filterCAs || nixcerts.size() < certssize ) );
196 if ( !nixcerts.isEmpty() )
198 const auto constNixcerts = nixcerts;
199 for (
const QSslCertificate &nixcert : constNixcerts )
201 certs.removeOne( nixcert );
210 teValidation->setStyleSheet(
216 QString msg = tr(
"Certificates found: %1\n"
217 "Certificates valid: %2" )
223 msg += tr(
"\nAuthorities/Issuers: %1%2" ).arg( cas ).arg( !nixcerts.isEmpty() && nixcerts.size() < certssize ?
" (others not imported)" :
"" );
226 teValidation->setText( msg );
228 okButton()->setEnabled( valid );
231void QgsAuthImportCertDialog::btnImportFile_clicked()
233 const QString &fn = getOpenFileName( tr(
"Open Certificate File" ), tr(
"All files (*.*);;PEM (*.pem);;DER (*.der)" ) );
236 leImportFile->setText( fn );
238 validateCertificates();
241void QgsAuthImportCertDialog::chkAllowInvalid_toggled(
bool checked )
244 validateCertificates();
247QString QgsAuthImportCertDialog::getOpenFileName(
const QString &title,
const QString &extfilter )
249 QgsSettings settings;
250 const QString recentdir = settings.
value( u
"UI/lastAuthImportCertOpenFileDir"_s, QDir::homePath() ).toString();
251 QString f = QFileDialog::getOpenFileName(
this, title, recentdir, extfilter );
255 this->activateWindow();
259 settings.
setValue( u
"UI/lastAuthImportCertOpenFileDir"_s, QFileInfo( f ).absoluteDir().path() );
264QPushButton *QgsAuthImportCertDialog::okButton()
266 return buttonBox->button( QDialogButtonBox::Ok );
static QgsAuthManager * authManager()
Returns the application's authentication manager instance.
CertTrustPolicy
Type of certificate trust policy.
static QString greenTextStyleSheet(const QString &selector="*")
Green text stylesheet representing valid, trusted, etc. certificate.
static QString redTextStyleSheet(const QString &selector="*")
Red text stylesheet representing invalid, untrusted, etc. certificate.
QgsAuthCertUtils::CertTrustPolicy certTrustPolicy()
Defined trust policy for imported certificates.
const QString certFileToImport()
Gets the file path to a certificate to import.
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.
const QList< QSslCertificate > certificatesToImport()
Gets list of certificate objects to import.
const QString certTextToImport()
Gets certificate text to import.
CertInput
Type of inputs for certificates.
bool allowInvalidCerts()
Whether to allow importation of invalid certificates (so trust policy can be overridden).
static void openHelp(const QString &key)
Opens help topic for the given help key using default system web browser.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.