/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once #include "mtproto/sender.h" namespace Core { struct CloudPasswordState; } // namespace Core class ApiWrap; namespace Main { class Session; } // namespace Main namespace Api { class CloudPassword final { public: struct SetOk { int unconfirmedEmailLengthCode = 0; }; using ResetRetryDate = int; explicit CloudPassword(not_null api); void reload(); void clearUnconfirmedPassword(); rpl::producer state() const; std::optional stateCurrent() const; rpl::producer resetPassword(); rpl::producer cancelResetPassword(); rpl::producer set( const QString &oldPassword, const QString &newPassword, const QString &hint, bool hasRecoveryEmail, const QString &recoveryEmail); rpl::producer check(const QString &password); rpl::producer confirmEmail(const QString &code); rpl::producer resendEmailCode(); rpl::producer setEmail( const QString &oldPassword, const QString &recoveryEmail); rpl::producer recoverPassword( const QString &code, const QString &newPassword, const QString &newHint); rpl::producer requestPasswordRecovery(); rpl::producer checkRecoveryEmailAddressCode( const QString &code); private: void apply(Core::CloudPasswordState state); MTP::Sender _api; mtpRequestId _requestId = 0; std::unique_ptr _state; rpl::event_stream _stateChanges; }; } // namespace Api