summaryrefslogtreecommitdiff
path: root/src/settings.cpp
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2023-02-07 15:03:03 -0500
committerouwou <26526779+ouwou@users.noreply.github.com>2023-02-07 15:03:03 -0500
commitc1303bd289013a504b529f8f19444f12e4884040 (patch)
tree9318ba0b3b660264cba5c4a467b6f79cf80188e0 /src/settings.cpp
parentea04035f0db8fa990dd7ca8dd1a64f56bceb82e2 (diff)
parent4dd0eb24c40a7276dea4fc349d885f4277795dcb (diff)
downloadabaddon-portaudio-c1303bd289013a504b529f8f19444f12e4884040.tar.gz
abaddon-portaudio-c1303bd289013a504b529f8f19444f12e4884040.zip
Merge branch 'master' into voice
Diffstat (limited to 'src/settings.cpp')
-rw-r--r--src/settings.cpp48
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