From f506f1b830ec8842f9aed8bb7ddb2e6b7a58cd27 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Fri, 5 Dec 2025 10:39:04 +0300 Subject: [PATCH] Added read availability of passkeys from appConfig. --- Telegram/SourceFiles/data/components/passkeys.cpp | 4 ++++ Telegram/SourceFiles/data/components/passkeys.h | 1 + Telegram/SourceFiles/intro/intro_qr.cpp | 5 ++++- Telegram/SourceFiles/intro/intro_qr.h | 1 + Telegram/SourceFiles/main/main_app_config.cpp | 4 ++++ Telegram/SourceFiles/main/main_app_config.h | 1 + Telegram/SourceFiles/settings/settings_experimental.cpp | 8 +++++++- .../SourceFiles/settings/settings_privacy_security.cpp | 3 +++ 8 files changed, 25 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/data/components/passkeys.cpp b/Telegram/SourceFiles/data/components/passkeys.cpp index 831826a667..7e9c06912e 100644 --- a/Telegram/SourceFiles/data/components/passkeys.cpp +++ b/Telegram/SourceFiles/data/components/passkeys.cpp @@ -125,6 +125,10 @@ bool Passkeys::canRegister() const { return Platform::WebAuthn::IsSupported() && _passkeys.size() < max; } +bool Passkeys::possible() const { + return _session->appConfig().settingsDisplayPasskeys(); +} + void InitPasskeyLogin( MTP::Sender &api, Fn done) { diff --git a/Telegram/SourceFiles/data/components/passkeys.h b/Telegram/SourceFiles/data/components/passkeys.h index 9e5effd599..12f2165101 100644 --- a/Telegram/SourceFiles/data/components/passkeys.h +++ b/Telegram/SourceFiles/data/components/passkeys.h @@ -51,6 +51,7 @@ public: [[nodiscard]] const std::vector &list() const; [[nodiscard]] bool listKnown() const; [[nodiscard]] bool canRegister() const; + [[nodiscard]] bool possible() const; private: void loadList(); diff --git a/Telegram/SourceFiles/intro/intro_qr.cpp b/Telegram/SourceFiles/intro/intro_qr.cpp index fc91a9c77b..47b054b012 100644 --- a/Telegram/SourceFiles/intro/intro_qr.cpp +++ b/Telegram/SourceFiles/intro/intro_qr.cpp @@ -21,6 +21,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/text/text_utilities.h" #include "ui/image/image_prepare.h" #include "ui/painter.h" +#include "main/main_app_config.h" #include "main/main_account.h" #include "ui/boxes/confirm_box.h" #include "core/application.h" @@ -209,6 +210,8 @@ QrWidget::QrWidget( api().request(base::take(_requestId)).cancel(); refreshCode(); }, lifetime()); + + _passkeyPossible = account->appConfig().settingsDisplayPasskeys(); } QString QrWidget::accessibilityName() { @@ -333,7 +336,7 @@ void QrWidget::setupControls() { _skip = Ui::CreateChild( this, tr::lng_intro_qr_phone(tr::now)); - if (Platform::WebAuthn::IsSupported()) { + if (Platform::WebAuthn::IsSupported() && _passkeyPossible) { _passkey = Ui::CreateChild( this, tr::lng_intro_qr_passkey(tr::now)); diff --git a/Telegram/SourceFiles/intro/intro_qr.h b/Telegram/SourceFiles/intro/intro_qr.h index 2c4eece474..4b5a56a4d1 100644 --- a/Telegram/SourceFiles/intro/intro_qr.h +++ b/Telegram/SourceFiles/intro/intro_qr.h @@ -58,6 +58,7 @@ private: base::Timer _refreshTimer; mtpRequestId _requestId = 0; bool _forceRefresh = false; + bool _passkeyPossible = false; }; diff --git a/Telegram/SourceFiles/main/main_app_config.cpp b/Telegram/SourceFiles/main/main_app_config.cpp index d1fca15873..367f7579ab 100644 --- a/Telegram/SourceFiles/main/main_app_config.cpp +++ b/Telegram/SourceFiles/main/main_app_config.cpp @@ -267,6 +267,10 @@ int AppConfig::passkeysAccountPasskeysMax() const { return get(u"passkeys_account_passkeys_max"_q, 10); } +bool AppConfig::settingsDisplayPasskeys() const { + return get(u"settings_display_passkeys"_q, false); +} + void AppConfig::refresh(bool force) { if (_requestId || !_api) { if (force) { diff --git a/Telegram/SourceFiles/main/main_app_config.h b/Telegram/SourceFiles/main/main_app_config.h index fe2b2679e2..0f159f02ab 100644 --- a/Telegram/SourceFiles/main/main_app_config.h +++ b/Telegram/SourceFiles/main/main_app_config.h @@ -124,6 +124,7 @@ public: [[nodiscard]] TimeId groupCallMessageTTL() const; [[nodiscard]] int passkeysAccountPasskeysMax() const; + [[nodiscard]] bool settingsDisplayPasskeys() const; using StarsColoring = Calls::Group::Ui::StarsColoring; [[nodiscard]] std::vector groupCallColorings() const; diff --git a/Telegram/SourceFiles/settings/settings_experimental.cpp b/Telegram/SourceFiles/settings/settings_experimental.cpp index c940d8731f..78406a06d0 100644 --- a/Telegram/SourceFiles/settings/settings_experimental.cpp +++ b/Telegram/SourceFiles/settings/settings_experimental.cpp @@ -7,6 +7,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "settings/settings_experimental.h" +#include "data/components/passkeys.h" +#include "main/main_session.h" #include "ui/boxes/confirm_box.h" #include "ui/wrap/vertical_layout.h" #include "ui/wrap/slide_wrap.h" @@ -168,7 +170,11 @@ void SetupExperimental( } addToggle(Window::kOptionDisableTouchbar); addToggle(Info::kAlternativeScrollProcessing); - addToggle("webauthn-mac"); + if (const auto controller = window->sessionController()) { + if (controller->session().passkeys().possible()) { + addToggle("webauthn-mac"); + } + } addToggle("text-recognition-mac"); } diff --git a/Telegram/SourceFiles/settings/settings_privacy_security.cpp b/Telegram/SourceFiles/settings/settings_privacy_security.cpp index ad541075e6..a9902fa1de 100644 --- a/Telegram/SourceFiles/settings/settings_privacy_security.cpp +++ b/Telegram/SourceFiles/settings/settings_privacy_security.cpp @@ -580,6 +580,9 @@ void SetupPasskeys( not_null controller, not_null container) { const auto session = &controller->session(); + if (!session->passkeys().possible()) { + return; + } auto label = rpl::combine( tr::lng_profile_loading(), (rpl::single(rpl::empty_value())