api_cloud_password.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. This file is part of Telegram Desktop,
  3. the official desktop application for the Telegram messaging service.
  4. For license and copyright information please follow this link:
  5. https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
  6. */
  7. #pragma once
  8. #include "mtproto/sender.h"
  9. namespace Core {
  10. struct CloudPasswordState;
  11. } // namespace Core
  12. class ApiWrap;
  13. namespace Main {
  14. class Session;
  15. } // namespace Main
  16. namespace Api {
  17. class CloudPassword final {
  18. public:
  19. struct SetOk {
  20. int unconfirmedEmailLengthCode = 0;
  21. };
  22. using ResetRetryDate = int;
  23. explicit CloudPassword(not_null<ApiWrap*> api);
  24. void reload();
  25. void clearUnconfirmedPassword();
  26. rpl::producer<Core::CloudPasswordState> state() const;
  27. std::optional<Core::CloudPasswordState> stateCurrent() const;
  28. rpl::producer<ResetRetryDate, QString> resetPassword();
  29. rpl::producer<rpl::no_value, QString> cancelResetPassword();
  30. rpl::producer<SetOk, QString> set(
  31. const QString &oldPassword,
  32. const QString &newPassword,
  33. const QString &hint,
  34. bool hasRecoveryEmail,
  35. const QString &recoveryEmail);
  36. rpl::producer<rpl::no_value, QString> check(const QString &password);
  37. rpl::producer<rpl::no_value, QString> confirmEmail(const QString &code);
  38. rpl::producer<rpl::no_value, QString> resendEmailCode();
  39. rpl::producer<SetOk, QString> setEmail(
  40. const QString &oldPassword,
  41. const QString &recoveryEmail);
  42. rpl::producer<rpl::no_value, QString> recoverPassword(
  43. const QString &code,
  44. const QString &newPassword,
  45. const QString &newHint);
  46. rpl::producer<QString, QString> requestPasswordRecovery();
  47. rpl::producer<rpl::no_value, QString> checkRecoveryEmailAddressCode(
  48. const QString &code);
  49. private:
  50. void apply(Core::CloudPasswordState state);
  51. MTP::Sender _api;
  52. mtpRequestId _requestId = 0;
  53. std::unique_ptr<Core::CloudPasswordState> _state;
  54. rpl::event_stream<Core::CloudPasswordState> _stateChanges;
  55. };
  56. } // namespace Api