diff options
| author | darktux <darktux@y2nlvhmmk5jnsvechppxnbyzmmv3vbl7dvzn6ltwcdbpgxixp3clkgqd.onion> | 2024-04-05 01:58:30 +0200 |
|---|---|---|
| committer | Briar <205427297+icybriarr@users.noreply.github.com> | 2025-04-04 03:40:47 +0200 |
| commit | 2032d035a344cc6a6868ab3c6f0e7250b1f745ea (patch) | |
| tree | c02c383ebcb7c1ff34c2c7fb3c14acf4c141c97c /src/common/scm_rev.cpp.in | |
| parent | 5056d87da345d44f4112dc4cd0bf1601b2003e18 (diff) | |
Removed telemetry and anonymized SCM (git) strings
Diffstat (limited to 'src/common/scm_rev.cpp.in')
| -rw-r--r-- | src/common/scm_rev.cpp.in | 72 |
1 files changed, 60 insertions, 12 deletions
diff --git a/src/common/scm_rev.cpp.in b/src/common/scm_rev.cpp.in index f0c124d697..47d46d1995 100644 --- a/src/common/scm_rev.cpp.in +++ b/src/common/scm_rev.cpp.in @@ -3,11 +3,15 @@ #include "common/scm_rev.h" -#define GIT_REV "@GIT_REV@" -#define GIT_BRANCH "@GIT_BRANCH@" -#define GIT_DESC "@GIT_DESC@" -#define BUILD_NAME "@REPO_NAME@" -#define BUILD_DATE "@BUILD_DATE@" +#include <fstream> +#include <string> +#include <fmt/format.h> + +#define GIT_REV "@GIT_REV@" +#define GIT_BRANCH "@GIT_BRANCH@" +#define GIT_DESC "@GIT_DESC@" +#define BUILD_NAME "@REPO_NAME@" +#define BUILD_DATE "@BUILD_DATE@" #define BUILD_FULLNAME "@BUILD_FULLNAME@" #define BUILD_VERSION "@BUILD_VERSION@" #define BUILD_ID "@BUILD_ID@" @@ -16,16 +20,60 @@ namespace Common { -const char g_scm_rev[] = GIT_REV; -const char g_scm_branch[] = GIT_BRANCH; -const char g_scm_desc[] = GIT_DESC; -const char g_build_name[] = BUILD_NAME; -const char g_build_date[] = BUILD_DATE; +const char* g_scm_rev; +const char* g_scm_branch; +const char* g_scm_desc; +const char g_build_name[] = BUILD_NAME; +const char g_build_date[] = BUILD_DATE; const char g_build_fullname[] = BUILD_FULLNAME; -const char g_build_version[] = BUILD_VERSION; +const char g_build_version[] = BUILD_VERSION; const char g_build_id[] = BUILD_ID; const char g_title_bar_format_idle[] = TITLE_BAR_FORMAT_IDLE; const char g_title_bar_format_running[] = TITLE_BAR_FORMAT_RUNNING; -} // namespace +/// Anonymizes SCM data +/// This is quite weak. But better than nothing. +class scm_encrypt { + std::string m_scm_rev, m_scm_branch, m_scm_desc; +public: + scm_encrypt() { + // Get a key that is easy to obtain when asking the person directly but (usually) hard to + // guess + std::string key; +#ifdef __linux__ + if (!std::getline(std::ifstream("/proc/sys/kernel/hostname"), key)) + key = "linux_error_key"; +#else + // Not a good fallback, but better than nothing I guess? + key = g_build_date; +#endif + // Copy strings in place + m_scm_rev = GIT_REV; + m_scm_branch = GIT_BRANCH; + m_scm_desc = GIT_DESC; + // XOR each string with key + auto key_it = key.begin(); + for (auto& string : {&m_scm_rev, &m_scm_branch, &m_scm_desc}) { + for (auto& c : *string) { + c ^= *key_it; + if (++key_it == key.end()) + key_it = key.begin(); + } + } + // Make each string human-readable + for (auto& string : {&m_scm_rev, &m_scm_branch, &m_scm_desc}) { + const std::string original = *string; + string->clear(); + for (const auto c : original) { + string->append(std::format("{:x}", unsigned(c))); + } + string->pop_back(); + } + // Set pointers + g_scm_rev = m_scm_rev.c_str(); + g_scm_branch = m_scm_branch.c_str(); + g_scm_desc = m_scm_desc.c_str(); + } +} scm_encrypt_instance; +} // namespace Common |
