Added basic high privilege checks and message box

This commit is contained in:
AdenKoperczak 2024-12-19 14:31:12 -05:00
parent d81f187d88
commit 71f967d536
4 changed files with 75 additions and 2 deletions

View file

@ -353,7 +353,8 @@ set(SRC_UI_SETUP source/scwx/qt/ui/setup/audio_codec_page.cpp
source/scwx/qt/ui/setup/map_provider_page.cpp
source/scwx/qt/ui/setup/setup_wizard.cpp
source/scwx/qt/ui/setup/welcome_page.cpp)
set(HDR_UTIL source/scwx/qt/util/color.hpp
set(HDR_UTIL source/scwx/qt/util/check_privilege.hpp
source/scwx/qt/util/color.hpp
source/scwx/qt/util/file.hpp
source/scwx/qt/util/geographic_lib.hpp
source/scwx/qt/util/imgui.hpp
@ -367,7 +368,8 @@ set(HDR_UTIL source/scwx/qt/util/color.hpp
source/scwx/qt/util/q_file_input_stream.hpp
source/scwx/qt/util/time.hpp
source/scwx/qt/util/tooltip.hpp)
set(SRC_UTIL source/scwx/qt/util/color.cpp
set(SRC_UTIL source/scwx/qt/util/check_privilege.cpp
source/scwx/qt/util/color.cpp
source/scwx/qt/util/file.cpp
source/scwx/qt/util/geographic_lib.cpp
source/scwx/qt/util/imgui.cpp

View file

@ -13,6 +13,7 @@
#include <scwx/qt/settings/general_settings.hpp>
#include <scwx/qt/types/qt_types.hpp>
#include <scwx/qt/ui/setup/setup_wizard.hpp>
#include <scwx/qt/util/check_privilege.hpp>
#include <scwx/network/cpr.hpp>
#include <scwx/util/environment.hpp>
#include <scwx/util/logger.hpp>
@ -31,6 +32,8 @@
#include <QPalette>
#include <QStyle>
#include <QMessageBox>
#define QT6CT_LIBRARY
#include <qt6ct-common/qt6ct.h>
#undef QT6CT_LIBRARY
@ -73,6 +76,20 @@ int main(int argc, char* argv[])
QCoreApplication::installTranslator(&translator);
}
// Test to see if scwx was run with high privilege
if (scwx::qt::util::is_high_privilege())
{
QMessageBox::StandardButton pressed = QMessageBox::warning(
nullptr,
"Warning: Running with High Privileges",
"Although Supercell-Wx can be run with high privileges, "
"it is not recommended",
QMessageBox::Ok | QMessageBox::Close);
if (pressed & QMessageBox::Ok) {
return 0;
}
}
if (!scwx::util::GetEnvironment("SCWX_TEST").empty())
{
QStandardPaths::setTestModeEnabled(true);

View file

@ -0,0 +1,43 @@
#include "scwx/qt/util/check_privilege.hpp"
#include <QtGlobal>
#ifdef _WIN32
#include <windows.h>
#else
#include <unistd.h>
#endif
namespace scwx {
namespace qt {
namespace util {
bool is_high_privilege()
{
#if defined(_WIN32)
bool isAdmin = false;
HANDLE token = NULL;
TOKEN_ELEVATION elevation;
DWORD elevationSize = sizeof(TOKEN_ELEVATION);
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token))
{
return false;
}
if (!GetTokenInformation(
token, TokenElevation, &elevation, elevationSize, &elevationSize))
{
CloseHandle(token);
return false;
}
isAdmin = elevation.TokenIsElevated;
CloseHandle(token);
return isAdmin;
#elif defined(Q_OS_UNIX)
// On UNIX root is always uid 0. On Linux this is enforced by the kernal.
return geteuid() == 0;
#endif
}
} // namespace util
} // namespace qt
} // namespace scwx

View file

@ -0,0 +1,11 @@
#pragma once
namespace scwx {
namespace qt {
namespace util {
bool is_high_privilege();
} // namespace util
} // namespace qt
} // namespace scwx