diff --git a/Telegram/SourceFiles/core/ui_integration.cpp b/Telegram/SourceFiles/core/ui_integration.cpp index fec3bdd66..a5cad2d3b 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; }