From 45dcadfff425468e878bc44ee03a64e251a0a3ca Mon Sep 17 00:00:00 2001 From: John Preston Date: Mon, 15 Feb 2021 16:18:54 +0400 Subject: [PATCH] Auto-login to domains from app config. --- Telegram/SourceFiles/core/ui_integration.cpp | 30 +++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/core/ui_integration.cpp b/Telegram/SourceFiles/core/ui_integration.cpp index fec3bdd665..a5cad2d3b8 100644 --- a/Telegram/SourceFiles/core/ui_integration.cpp +++ b/Telegram/SourceFiles/core/ui_integration.cpp @@ -18,9 +18,37 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "platform/platform_specific.h" #include "main/main_account.h" #include "main/main_session.h" +#include "main/main_app_config.h" #include "mainwindow.h" namespace Core { +namespace { + +QString UrlWithAutoLoginToken(const QString &url) { + const auto &config = Core::App().activeAccount().appConfig(); + const auto token = config.get("autologin_token", {}); + const auto domains = config.get>( + "autologin_domains", + {}); + if (domains.empty() + || token.isEmpty() + || !url.startsWith("https://", Qt::CaseInsensitive)) { + return url; + } + auto parsed = QUrl(url); + if (!parsed.isValid()) { + return url; + } else if (!ranges::contains(domains, parsed.host().toLower())) { + return url; + } + const auto added = "autologin_token=" + token; + parsed.setQuery(parsed.hasQuery() + ? (parsed.query() + '&' + added) + : added); + return QString::fromUtf8(parsed.toEncoded()); +} + +} // namespace void UiIntegration::postponeCall(FnMut &&callable) { Sandbox::Instance().postponeCall(std::move(callable)); @@ -151,7 +179,7 @@ bool UiIntegration::handleUrlClick( return true; } - File::OpenUrl(url); + File::OpenUrl(UrlWithAutoLoginToken(url)); return true; }