From fe91cae8bc4395cfc11396e35ec2b6667051facf Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Sat, 29 Nov 2025 05:08:03 +0300 Subject: [PATCH] Added initial api support to register passkey. --- .../SourceFiles/data/components/passkeys.cpp | 32 +++++++++++++++++++ .../SourceFiles/data/components/passkeys.h | 12 +++++++ 2 files changed, 44 insertions(+) diff --git a/Telegram/SourceFiles/data/components/passkeys.cpp b/Telegram/SourceFiles/data/components/passkeys.cpp index e42cd56032..e640a9ea56 100644 --- a/Telegram/SourceFiles/data/components/passkeys.cpp +++ b/Telegram/SourceFiles/data/components/passkeys.cpp @@ -7,7 +7,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "data/components/passkeys.h" +#include "apiwrap.h" +#include "data/data_passkey_deserialize.h" #include "main/main_session.h" +#include "platform/platform_webauthn.h" namespace Data { @@ -17,4 +20,33 @@ Passkeys::Passkeys(not_null session) Passkeys::~Passkeys() = default; +void Passkeys::initRegistration( + Fn done) { + _session->api().request(MTPaccount_InitPasskeyRegistration( + )).done([=](const MTPaccount_PasskeyRegistrationOptions &result) { + const auto &data = result.data(); + const auto jsonData = data.voptions().data().vdata().v; + if (const auto p = Data::Passkey::DeserializeRegisterData(jsonData)) { + done(*p); + } + }).send(); +} + +void Passkeys::registerPasskey( + const Platform::WebAuthn::RegisterResult &result, + Fn done) { + const auto credentialIdBase64 = QString::fromUtf8( + result.credentialId.toBase64(QByteArray::Base64UrlEncoding)); + _session->api().request(MTPaccount_RegisterPasskey( + MTP_inputPasskeyCredentialPublicKey( + MTP_string(credentialIdBase64), + MTP_string(credentialIdBase64), + MTP_inputPasskeyResponseRegister( + MTP_dataJSON(MTP_bytes(result.clientDataJSON)), + MTP_bytes(result.attestationObject))) + )).done([=](const MTPPasskey &result) { + done(); + }).send(); +} + } // namespace Data diff --git a/Telegram/SourceFiles/data/components/passkeys.h b/Telegram/SourceFiles/data/components/passkeys.h index fcec1e518d..953af51193 100644 --- a/Telegram/SourceFiles/data/components/passkeys.h +++ b/Telegram/SourceFiles/data/components/passkeys.h @@ -7,6 +7,13 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once +namespace Data::Passkey { +struct RegisterData; +} // namespace Data::Passkey +namespace Platform::WebAuthn { +struct RegisterResult; +} // namespace Platform::WebAuthn + namespace Main { class Session; } // namespace Main @@ -18,6 +25,11 @@ public: explicit Passkeys(not_null session); ~Passkeys(); + void initRegistration(Fn done); + void registerPasskey( + const Platform::WebAuthn::RegisterResult &result, + Fn done); + private: const not_null _session;