diff options
Diffstat (limited to 'examples/opcua/opcuaviewer/mainwindow.cpp')
-rw-r--r-- | examples/opcua/opcuaviewer/mainwindow.cpp | 92 |
1 files changed, 43 insertions, 49 deletions
diff --git a/examples/opcua/opcuaviewer/mainwindow.cpp b/examples/opcua/opcuaviewer/mainwindow.cpp index b05605f..00d6e55 100644 --- a/examples/opcua/opcuaviewer/mainwindow.cpp +++ b/examples/opcua/opcuaviewer/mainwindow.cpp @@ -9,6 +9,7 @@ #include <QApplication> #include <QDir> #include <QMessageBox> +#include <QStandardPaths> #include <QTextCharFormat> #include <QTextBlock> #include <QOpcUaProvider> @@ -117,23 +118,51 @@ MainWindow::~MainWindow() delete ui; } +static bool copyDirRecursively(const QString &from, const QString &to) +{ + const QDir srcDir(from); + const QDir targetDir(to); + if (!QDir().mkpath(to)) + return false; + + const QFileInfoList infos = + srcDir.entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot); + for (const QFileInfo &info : infos) { + const QString srcItemPath = info.absoluteFilePath(); + const QString dstItemPath = targetDir.absoluteFilePath(info.fileName()); + if (info.isDir()) { + if (!copyDirRecursively(srcItemPath, dstItemPath)) + return false; + } else if (info.isFile()) { + if (!QFile::copy(srcItemPath, dstItemPath)) + return false; + } + } + return true; +} + //! [PKI Configuration] void MainWindow::setupPkiConfiguration() { - QString pkidir = QCoreApplication::applicationDirPath(); -#ifdef Q_OS_WIN - pkidir += "../"; -#endif - pkidir += "/pki"; - m_pkiConfig.setClientCertificateFile(pkidir + "/own/certs/opcuaviewer.der"); - m_pkiConfig.setPrivateKeyFile(pkidir + "/own/private/opcuaviewer.pem"); - m_pkiConfig.setTrustListDirectory(pkidir + "/trusted/certs"); - m_pkiConfig.setRevocationListDirectory(pkidir + "/trusted/crl"); - m_pkiConfig.setIssuerListDirectory(pkidir + "/issuers/certs"); - m_pkiConfig.setIssuerRevocationListDirectory(pkidir + "/issuers/crl"); - - // create the folders if they don't exist yet - createPkiFolders(); + const QDir pkidir = + QDir(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/pki"); + + if (!pkidir.exists() && !copyDirRecursively(":/pki", pkidir.path())) + qFatal("Could not set up directory %s!", qUtf8Printable(pkidir.path())); + + m_pkiConfig.setClientCertificateFile(pkidir.absoluteFilePath("own/certs/opcuaviewer.der")); + m_pkiConfig.setPrivateKeyFile(pkidir.absoluteFilePath("own/private/opcuaviewer.pem")); + m_pkiConfig.setTrustListDirectory(pkidir.absoluteFilePath("trusted/certs")); + m_pkiConfig.setRevocationListDirectory(pkidir.absoluteFilePath("trusted/crl")); + m_pkiConfig.setIssuerListDirectory(pkidir.absoluteFilePath("issuers/certs")); + m_pkiConfig.setIssuerRevocationListDirectory(pkidir.absoluteFilePath("issuers/crl")); + + const QStringList toCreate = { m_pkiConfig.issuerListDirectory(), + m_pkiConfig.issuerRevocationListDirectory() }; + for (const QString &dir : toCreate) { + if (!QDir().mkpath(dir)) + qFatal("Could not create directory %s!", qUtf8Printable(dir)); + } } //! [PKI Configuration] @@ -343,41 +372,6 @@ void MainWindow::log(const QString &text, const QColor &color) log(text, QString(), color); } -bool MainWindow::createPkiPath(const QString &path) -{ - const QString msg = tr("Creating PKI path '%1': %2"); - - QDir dir; - const bool ret = dir.mkpath(path); - if (ret) - qDebug() << msg.arg(path, "SUCCESS."); - else - qCritical("%s", qPrintable(msg.arg(path, "FAILED."))); - - return ret; -} - -bool MainWindow::createPkiFolders() -{ - bool result = createPkiPath(m_pkiConfig.trustListDirectory()); - if (!result) - return result; - - result = createPkiPath(m_pkiConfig.revocationListDirectory()); - if (!result) - return result; - - result = createPkiPath(m_pkiConfig.issuerListDirectory()); - if (!result) - return result; - - result = createPkiPath(m_pkiConfig.issuerRevocationListDirectory()); - if (!result) - return result; - - return result; -} - void MainWindow::showErrorDialog(QOpcUaErrorState *errorState) { int result = 0; |