diff --git a/td/telegram/ConfigManager.cpp b/td/telegram/ConfigManager.cpp index 00cd88b1d..36d5affd2 100644 --- a/td/telegram/ConfigManager.cpp +++ b/td/telegram/ConfigManager.cpp @@ -1467,6 +1467,7 @@ void ConfigManager::process_app_config(tl_object_ptr &c string autologin_token; vector autologin_domains; vector url_auth_domains; + vector whitelisted_domains; vector> new_values; string ignored_restriction_reasons; @@ -1680,13 +1681,24 @@ void ConfigManager::process_app_config(tl_object_ptr &c if (value->get_id() == telegram_api::jsonArray::ID) { auto domains = std::move(static_cast(value)->value_); for (auto &domain : domains) { - autologin_domains.push_back(get_json_value_string(std::move(domain), key)); + url_auth_domains.push_back(get_json_value_string(std::move(domain), key)); } } else { LOG(ERROR) << "Receive unexpected url_auth_domains " << to_string(*value); } continue; } + if (key == "whitelisted_domains") { + if (value->get_id() == telegram_api::jsonArray::ID) { + auto domains = std::move(static_cast(value)->value_); + for (auto &domain : domains) { + whitelisted_domains.push_back(get_json_value_string(std::move(domain), key)); + } + } else { + LOG(ERROR) << "Receive unexpected whitelisted_domains " << to_string(*value); + } + continue; + } if (key == "round_video_encoding") { if (value->get_id() == telegram_api::jsonObject::ID) { auto video_note_settings = std::move(static_cast(value)->value_); @@ -1820,7 +1832,7 @@ void ConfigManager::process_app_config(tl_object_ptr &c config = make_tl_object(std::move(new_values)); send_closure(G()->link_manager(), &LinkManager::update_autologin_domains, std::move(autologin_token), - std::move(autologin_domains), std::move(url_auth_domains)); + std::move(autologin_domains), std::move(url_auth_domains), std::move(whitelisted_domains)); Global &options = *G(); diff --git a/td/telegram/LinkManager.cpp b/td/telegram/LinkManager.cpp index 13fa46cd6..fdb03a497 100644 --- a/td/telegram/LinkManager.cpp +++ b/td/telegram/LinkManager.cpp @@ -754,6 +754,8 @@ void LinkManager::start_up() { autologin_domains_ = full_split(G()->td_db()->get_binlog_pmc()->get("autologin_domains"), '\xFF'); url_auth_domains_ = full_split(G()->td_db()->get_binlog_pmc()->get("url_auth_domains"), '\xFF'); + + whitelisted_domains_ = full_split(G()->td_db()->get_binlog_pmc()->get("whitelisted_domains"), '\xFF'); } void LinkManager::tear_down() { @@ -1470,7 +1472,7 @@ unique_ptr LinkManager::get_internal_link_passport( } void LinkManager::update_autologin_domains(string autologin_token, vector autologin_domains, - vector url_auth_domains) { + vector url_auth_domains, vector whitelisted_domains) { autologin_update_time_ = Time::now(); autologin_token_ = std::move(autologin_token); if (autologin_domains_ != autologin_domains) { @@ -1481,6 +1483,10 @@ void LinkManager::update_autologin_domains(string autologin_token, vectortd_db()->get_binlog_pmc()->set("url_auth_domains", implode(url_auth_domains_, '\xFF')); } + if (whitelisted_domains_ != whitelisted_domains) { + whitelisted_domains_ = std::move(whitelisted_domains); + G()->td_db()->get_binlog_pmc()->set("whitelisted_domains", implode(whitelisted_domains_, '\xFF')); + } } void LinkManager::get_deep_link_info(Slice link, Promise> &&promise) { @@ -1510,6 +1516,9 @@ void LinkManager::get_external_link_info(string &&link, Promiseskip_confirm_ = skip_confirm; + if (!td::contains(autologin_domains_, r_url.ok().host_)) { if (td::contains(url_auth_domains_, r_url.ok().host_)) { td_->create_handler(std::move(promise))->send(link, FullMessageId(), 0); @@ -1555,7 +1564,7 @@ void LinkManager::get_external_link_info(string &&link, Promise(url.get_url(), false)); + promise.set_value(td_api::make_object(url.get_url(), skip_confirm)); } void LinkManager::get_login_url_info(FullMessageId full_message_id, int64 button_id, diff --git a/td/telegram/LinkManager.h b/td/telegram/LinkManager.h index 77cb7666d..6de87f501 100644 --- a/td/telegram/LinkManager.h +++ b/td/telegram/LinkManager.h @@ -60,7 +60,7 @@ class LinkManager final : public Actor { static unique_ptr parse_internal_link(Slice link, bool is_trusted = false); void update_autologin_domains(string autologin_token, vector autologin_domains, - vector url_auth_domains); + vector url_auth_domains, vector whitelisted_domains); void get_deep_link_info(Slice link, Promise> &&promise); @@ -160,6 +160,7 @@ class LinkManager final : public Actor { vector autologin_domains_; double autologin_update_time_ = 0.0; vector url_auth_domains_; + vector whitelisted_domains_; }; } // namespace td