diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2023-02-07 15:03:03 -0500 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2023-02-07 15:03:03 -0500 |
commit | c1303bd289013a504b529f8f19444f12e4884040 (patch) | |
tree | 9318ba0b3b660264cba5c4a467b6f79cf80188e0 /src/settings.cpp | |
parent | ea04035f0db8fa990dd7ca8dd1a64f56bceb82e2 (diff) | |
parent | 4dd0eb24c40a7276dea4fc349d885f4277795dcb (diff) | |
download | abaddon-portaudio-c1303bd289013a504b529f8f19444f12e4884040.tar.gz abaddon-portaudio-c1303bd289013a504b529f8f19444f12e4884040.zip |
Merge branch 'master' into voice
Diffstat (limited to 'src/settings.cpp')
-rw-r--r-- | src/settings.cpp | 48 |
1 files changed, 46 insertions, 2 deletions
diff --git a/src/settings.cpp b/src/settings.cpp index 0019a00..c1a2fd2 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -1,6 +1,15 @@ #include "settings.hpp" #include <filesystem> #include <fstream> +#include <glibmm/miscutils.h> + +#ifdef WITH_KEYCHAIN + #include <keychain/keychain.h> +#endif + +const std::string KeychainPackage = "com.github.uowuo.abaddon"; +const std::string KeychainService = "abaddon-client-token"; +const std::string KeychainUser = ""; SettingsManager::SettingsManager(const std::string &filename) : m_filename(filename) { @@ -36,7 +45,6 @@ void SettingsManager::ReadSettings() { SMSTR("discord", "api_base", APIBaseURL); SMSTR("discord", "gateway", GatewayURL); - SMSTR("discord", "token", DiscordToken); SMBOOL("discord", "memory_db", UseMemoryDB); SMBOOL("discord", "prefetch", Prefetch); SMBOOL("discord", "autoconnect", Autoconnect); @@ -61,6 +69,32 @@ void SettingsManager::ReadSettings() { SMSTR("style", "mentionbadgetextcolor", MentionBadgeTextColor); SMSTR("style", "unreadcolor", UnreadIndicatorColor); +#ifdef WITH_KEYCHAIN + keychain::Error error {}; + + // convert to keychain if present in normal settings + SMSTR("discord", "token", DiscordToken); + + if (!m_settings.DiscordToken.empty()) { + keychain::Error set_error {}; + + keychain::setPassword(KeychainPackage, KeychainService, KeychainUser, m_settings.DiscordToken, set_error); + if (set_error) { + printf("keychain error setting token: %s\n", set_error.message.c_str()); + } else { + m_file.remove_key("discord", "token"); + } + } + + m_settings.DiscordToken = keychain::getPassword(KeychainPackage, KeychainService, KeychainUser, error); + if (error && error.type != keychain::ErrorType::NotFound) { + printf("keychain error reading token: %s (%d)\n", error.message.c_str(), error.code); + } + +#else + SMSTR("discord", "token", DiscordToken); +#endif + #undef SMBOOL #undef SMSTR #undef SMINT @@ -92,7 +126,6 @@ void SettingsManager::Close() { SMSTR("discord", "api_base", APIBaseURL); SMSTR("discord", "gateway", GatewayURL); - SMSTR("discord", "token", DiscordToken); SMBOOL("discord", "memory_db", UseMemoryDB); SMBOOL("discord", "prefetch", Prefetch); SMBOOL("discord", "autoconnect", Autoconnect); @@ -117,6 +150,17 @@ void SettingsManager::Close() { SMSTR("style", "mentionbadgetextcolor", MentionBadgeTextColor); SMSTR("style", "unreadcolor", UnreadIndicatorColor); +#ifdef WITH_KEYCHAIN + keychain::Error error {}; + + keychain::setPassword(KeychainPackage, KeychainService, KeychainUser, m_settings.DiscordToken, error); + if (error) { + printf("keychain error setting token: %s\n", error.message.c_str()); + } +#else + SMSTR("discord", "token", DiscordToken); +#endif + #undef SMSTR #undef SMBOOL #undef SMINT |