From a6af680e59cdc2b7835812b7c9c48a2a69523b76 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sat, 29 Nov 2025 05:29:48 +0300 Subject: [PATCH] Added initial entry point to section of settings for passkeys. --- .../settings/settings_privacy_security.cpp | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/Telegram/SourceFiles/settings/settings_privacy_security.cpp b/Telegram/SourceFiles/settings/settings_privacy_security.cpp index affb5f3d4d..c13f94ed1c 100644 --- a/Telegram/SourceFiles/settings/settings_privacy_security.cpp +++ b/Telegram/SourceFiles/settings/settings_privacy_security.cpp @@ -13,6 +13,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "api/api_sensitive_content.h" #include "api/api_global_privacy.h" #include "api/api_websites.h" +#include "data/components/passkeys.h" #include "settings/cloud_password/settings_cloud_password_email_confirm.h" #include "settings/cloud_password/settings_cloud_password_input.h" #include "settings/cloud_password/settings_cloud_password_login_email.h" @@ -21,6 +22,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "settings/settings_blocked_peers.h" #include "settings/settings_global_ttl.h" #include "settings/settings_local_passcode.h" +#include "settings/settings_passkeys.h" #include "settings/settings_premium.h" // Settings::ShowPremium. #include "settings/settings_privacy_controllers.h" #include "settings/settings_websites.h" @@ -574,6 +576,49 @@ void SetupCloudPassword( session->api().cloudPassword().reload(); } +void SetupPasskeys( + not_null controller, + not_null container) { + const auto session = &controller->session(); + auto label = rpl::combine( + tr::lng_profile_loading(), + (rpl::single(rpl::empty_value()) + | rpl::then(session->passkeys().requestList())) | rpl::map([=] { + return session->passkeys().list().size(); + }) + ) | rpl::map([=](const QString &loading, int count) { + return !session->passkeys().listKnown() + ? loading + : count + ? QString::number(count) + : tr::lng_settings_cloud_password_off(tr::now); + }); + AddButtonWithLabel( + container, + tr::lng_settings_passkeys_title(), + std::move(label), + st::settingsButton, + { &st::menuIconLock } + )->addClickHandler([=] { + if (!session->passkeys().listKnown()) { + return; + } + const auto count = session->passkeys().list().size(); + if (count == 0) { + controller->show(Box([=](not_null box) { + PasskeysNoneBox(box, session); + box->boxClosing() | rpl::start_with_next([=] { + if (session->passkeys().list().size()) { + controller->showSettings(PasskeysId()); + } + }, box->lifetime()); + })); + } else { + controller->showSettings(PasskeysId()); + } + }); +} + void SetupLoginEmail( not_null controller, not_null container, @@ -930,6 +975,7 @@ void SetupSecurity( rpl::duplicate(updateTrigger), showOther); SetupLocalPasscode(controller, container, showOther); + SetupPasskeys(controller, container); SetupLoginEmail(controller, container, showOther); SetupBlockedList( controller,