diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2023-07-13 07:19:37 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-13 07:19:37 +0000 |
commit | 337a3d5811b55994ca7db97fea94f6b96dfaf57c (patch) | |
tree | 9ae7c7c0cc4dcab669fad94546dc7b12e0eda681 /src/discord/discord.cpp | |
parent | 9a3f6b472d4995c0d5619edc185836f7abb3bc15 (diff) | |
parent | 5bf5cc75eb8cffb3aed44a6743f1bb87a7b2b00d (diff) | |
download | abaddon-portaudio-337a3d5811b55994ca7db97fea94f6b96dfaf57c.tar.gz abaddon-portaudio-337a3d5811b55994ca7db97fea94f6b96dfaf57c.zip |
Merge pull request #185 from uowuo/remoteauth
Login with QR code/remote auth
Diffstat (limited to 'src/discord/discord.cpp')
-rw-r--r-- | src/discord/discord.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/discord/discord.cpp b/src/discord/discord.cpp index d97f2c1..084e19f 100644 --- a/src/discord/discord.cpp +++ b/src/discord/discord.cpp @@ -1197,6 +1197,27 @@ void DiscordClient::AcceptVerificationGate(Snowflake guild_id, VerificationGateI }); } +void DiscordClient::RemoteAuthLogin(const std::string &ticket, const sigc::slot<void(std::optional<std::string>, DiscordError code)> &callback) { + http::request req(http::REQUEST_POST, "https://discord.com/api/v9/users/@me/remote-auth/login"); + req.set_header("Content-Type", "application/json"); + req.set_user_agent(Abaddon::Get().GetSettings().UserAgent); + req.set_body("{\"ticket\":\"" + ticket + "\"}"); + m_http.Execute(std::move(req), [this, callback](const http::response_type &r) { + if (CheckCode(r)) { + callback(nlohmann::json::parse(r.text).at("encrypted_token").get<std::string>(), DiscordError::NONE); + } else { + try { + const auto j = nlohmann::json::parse(r.text); + if (j.contains("captcha_service")) { + callback(std::nullopt, DiscordError::CAPTCHA_REQUIRED); + return; + } + } catch (...) {} + callback(std::nullopt, GetCodeFromResponse(r)); + } + }); +} + #ifdef WITH_VOICE void DiscordClient::ConnectToVoice(Snowflake channel_id) { auto channel = GetChannel(channel_id); |