Added initial api support to register passkey.

This commit is contained in:
23rd
2025-11-29 05:08:03 +03:00
committed by John Preston
parent 7bb30bc4a8
commit fe91cae8bc
2 changed files with 44 additions and 0 deletions
@@ -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<Main::Session*> session)
Passkeys::~Passkeys() = default;
void Passkeys::initRegistration(
Fn<void(const Data::Passkey::RegisterData&)> 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<void()> 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
@@ -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<Main::Session*> session);
~Passkeys();
void initRegistration(Fn<void(const Data::Passkey::RegisterData&)> done);
void registerPasskey(
const Platform::WebAuthn::RegisterResult &result,
Fn<void()> done);
private:
const not_null<Main::Session*> _session;