53 lines
1.8 KiB
C++
53 lines
1.8 KiB
C++
#pragma once
|
|
|
|
#include <QDir>
|
|
#include <QSet>
|
|
#include <QString>
|
|
|
|
namespace UpdateClient
|
|
{
|
|
inline bool isRuntimeProtectedPath(const QString& path,
|
|
const QString& runtimeRelativePath)
|
|
{
|
|
const QString normalizedPath =
|
|
QDir::cleanPath(QDir::fromNativeSeparators(path)).toCaseFolded();
|
|
static const QSet<QString> installerManagedRootFiles{
|
|
QStringLiteral("components.xml"),
|
|
QStringLiteral("installationlog.txt"),
|
|
QStringLiteral("installer.dat"),
|
|
QStringLiteral("maintenancetool.dat"),
|
|
QStringLiteral("maintenancetool.exe"),
|
|
QStringLiteral("maintenancetool.ini"),
|
|
QStringLiteral("network.xml")
|
|
};
|
|
if (installerManagedRootFiles.contains(normalizedPath)
|
|
|| normalizedPath.startsWith(QStringLiteral("installerresources/"))
|
|
|| normalizedPath.startsWith(QStringLiteral("licenses/")))
|
|
return true;
|
|
|
|
static const QSet<QString> runtimeProtectedPaths{
|
|
QStringLiteral("bootstrap.exe"),
|
|
QStringLiteral("client.ini"),
|
|
QStringLiteral("config/app_config.json"),
|
|
QStringLiteral("config/local_state.json"),
|
|
QStringLiteral("config/client_identity.dat"),
|
|
QStringLiteral("config/version_policy.dat")
|
|
};
|
|
if (runtimeProtectedPaths.contains(normalizedPath))
|
|
return true;
|
|
|
|
QString runtimePrefix = QDir::cleanPath(
|
|
QDir::fromNativeSeparators(runtimeRelativePath)).toCaseFolded();
|
|
if (runtimePrefix.isEmpty() || runtimePrefix == QStringLiteral("."))
|
|
return false;
|
|
while (runtimePrefix.startsWith(QStringLiteral("./")))
|
|
runtimePrefix.remove(0, 2);
|
|
|
|
for (const QString& protectedPath : runtimeProtectedPaths) {
|
|
if (normalizedPath == runtimePrefix + QLatin1Char('/') + protectedPath)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|