fixed token loading crash

This commit is contained in:
2025-03-25 22:58:22 +01:00
parent 44685b12e8
commit d07acbb149
5 changed files with 45 additions and 38 deletions

3
.gitignore vendored
View File

@@ -38,4 +38,5 @@ project/export/
# venv # venv
venv/ venv/
# docs
src/gen/

View File

@@ -2,7 +2,7 @@
#include <godot_cpp/godot.hpp> #include <godot_cpp/godot.hpp>
static const char *_doc_data_hash = "-6554240314929274002"; static const char *_doc_data_hash = "8311200392454987859";
static const int _doc_data_uncompressed_size = 4148; static const int _doc_data_uncompressed_size = 4148;
static const int _doc_data_compressed_size = 684; static const int _doc_data_compressed_size = 684;
static const unsigned char _doc_data_compressed[] = { static const unsigned char _doc_data_compressed[] = {

View File

@@ -35,40 +35,43 @@ DiscordConnector *DiscordConnector::get_singleton()
void DiscordConnector::_ready() void DiscordConnector::_ready()
{ {
client = std::make_shared<discordpp::Client>(); client = std::make_shared<discordpp::Client>();
if (auto_encryption_key == "" || !auto_token_manage)
if (Engine::get_singleton()->is_editor_hint() || editor_process)
return;
if (auto_token_manage)
{ {
if (!Engine::get_singleton()->is_editor_hint() && !editor_process) if (auto_encryption_key.is_empty())
{ {
if (auto_connect) auto_encryption_key = DiscordUtil::get_singleton()->generate_auto_encryption_key();
connect_user();
} }
}
else if (auto_token_manage) Ref<godot::ConfigFile> config = DiscordUtil::get_singleton()->get_tokens(auto_encryption_key);
{ if (config->has_section_key("tokens", "access_token") &&
ConfigFile config = DiscordUtil::get_singleton()->get_tokens(auto_encryption_key); config->has_section_key("tokens", "refresh_token") &&
if (config.has_section_key("tokens", "access_token") && config.has_section_key("tokens", "refresh_token") && config.has_section_key("tokens", "expires_in")) config->has_section_key("tokens", "expires_in"))
{ {
access_token = config.get_value("tokens", "access_token"); access_token = config->get_value("tokens", "access_token");
refresh_token = config.get_value("tokens", "refresh_token"); refresh_token = config->get_value("tokens", "refresh_token");
expires_in = config.get_value("tokens", "expires_in"); expires_in = config->get_value("tokens", "expires_in");
update_user_token(access_token); update_user_token(access_token);
} }
else else
{ {
if (!Engine::get_singleton()->is_editor_hint()) DiscordUtil::get_singleton()->delete_tokens();
if (auto_connect)
{ {
if (auto_encryption_key.is_empty() && auto_token_manage) connect_user();
{
DiscordUtil::get_singleton()->delete_tokens();
auto_encryption_key = DiscordUtil::get_singleton()->generate_auto_encryption_key();
}
if (auto_connect && !editor_process)
{
connect_user();
}
} }
} }
} }
else
{
if (auto_connect)
{
connect_user();
}
}
} }
void DiscordConnector::_process(double delta) void DiscordConnector::_process(double delta)

View File

@@ -210,31 +210,34 @@ String DiscordUtil::generate_auto_encryption_key()
void DiscordUtil::save_tokens(String access_token, String refresh_token, int64_t expires_in, String auto_encryption_key) void DiscordUtil::save_tokens(String access_token, String refresh_token, int64_t expires_in, String auto_encryption_key)
{ {
ConfigFile config; Ref<ConfigFile> config;
config.set_value("tokens", "access_token", access_token); config.instantiate();
config.set_value("tokens", "refresh_token", refresh_token); config->set_value("tokens", "access_token", access_token);
config.set_value("tokens", "expires_in", expires_in); config->set_value("tokens", "refresh_token", refresh_token);
config.save_encrypted_pass("user://discord_data.binary", auto_encryption_key); config->set_value("tokens", "expires_in", expires_in);
config->save_encrypted_pass("user://discord_data.binary", auto_encryption_key);
} }
void DiscordUtil::delete_tokens() void DiscordUtil::delete_tokens()
{ {
ConfigFile config; Ref<ConfigFile> config;
config.save("user://discord_data.binary"); config.instantiate();
config->save("user://discord_data.binary");
} }
ConfigFile DiscordUtil::get_tokens(String auto_encryption_key) Ref<ConfigFile> DiscordUtil::get_tokens(String auto_encryption_key)
{ {
ConfigFile config; Ref<ConfigFile> config;
config.instantiate();
if (!FileAccess::file_exists("user://discord_data.binary")) if (!FileAccess::file_exists("user://discord_data.binary"))
{ {
return ConfigFile(); return config;
} }
Error err = config.load_encrypted_pass("user://discord_data.binary", auto_encryption_key); Error err = config->load_encrypted_pass("user://discord_data.binary", auto_encryption_key);
if (err != OK) if (err != OK)
{ {
config.save("user://discord_data.binary"); config->save("user://discord_data.binary");
return ConfigFile(); return config;
} }
return config; return config;
} }

View File

@@ -35,7 +35,7 @@ public:
void save_tokens(String access_token, String refresh_token, int64_t expires_in, String auto_encryption_key); void save_tokens(String access_token, String refresh_token, int64_t expires_in, String auto_encryption_key);
String generate_auto_encryption_key(); String generate_auto_encryption_key();
void delete_tokens(); void delete_tokens();
ConfigFile get_tokens(String auto_encryption_key); Ref<ConfigFile> get_tokens(String auto_encryption_key);
void debug(); void debug();
void run_callbacks(); void run_callbacks();