mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-04-17 20:58:06 +00:00
Moved MTP cloud password from ApiWrap to Api::CloudPassword.
This commit is contained in:
parent
0ae260c6e1
commit
cbad2469db
@ -99,6 +99,8 @@ PRIVATE
|
|||||||
api/api_chat_filters.h
|
api/api_chat_filters.h
|
||||||
api/api_chat_invite.cpp
|
api/api_chat_invite.cpp
|
||||||
api/api_chat_invite.h
|
api/api_chat_invite.h
|
||||||
|
api/api_cloud_password.cpp
|
||||||
|
api/api_cloud_password.h
|
||||||
api/api_common.h
|
api/api_common.h
|
||||||
api/api_editing.cpp
|
api/api_editing.cpp
|
||||||
api/api_editing.h
|
api/api_editing.h
|
||||||
|
@ -8,6 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||||||
#include "api/api_bot.h"
|
#include "api/api_bot.h"
|
||||||
|
|
||||||
#include "apiwrap.h"
|
#include "apiwrap.h"
|
||||||
|
#include "api/api_cloud_password.h"
|
||||||
#include "core/core_cloud_password.h"
|
#include "core/core_cloud_password.h"
|
||||||
#include "api/api_send_progress.h"
|
#include "api/api_send_progress.h"
|
||||||
#include "boxes/confirm_box.h"
|
#include "boxes/confirm_box.h"
|
||||||
@ -168,7 +169,7 @@ void SendBotCallbackDataWithPassword(
|
|||||||
if (!button || button->requestId) {
|
if (!button || button->requestId) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
api->reloadPasswordState();
|
api->cloudPassword().reload();
|
||||||
SendBotCallbackData(item, row, column, MTP_inputCheckPasswordEmpty(), [=](const MTP::Error &error) {
|
SendBotCallbackData(item, row, column, MTP_inputCheckPasswordEmpty(), [=](const MTP::Error &error) {
|
||||||
auto box = PrePasswordErrorBox(
|
auto box = PrePasswordErrorBox(
|
||||||
error,
|
error,
|
||||||
@ -181,7 +182,7 @@ void SendBotCallbackDataWithPassword(
|
|||||||
} else {
|
} else {
|
||||||
auto lifetime = std::make_shared<rpl::lifetime>();
|
auto lifetime = std::make_shared<rpl::lifetime>();
|
||||||
button->requestId = -1;
|
button->requestId = -1;
|
||||||
api->passwordState(
|
api->cloudPassword().state(
|
||||||
) | rpl::take(
|
) | rpl::take(
|
||||||
1
|
1
|
||||||
) | rpl::start_with_next([=](const Core::CloudPasswordState &state) mutable {
|
) | rpl::start_with_next([=](const Core::CloudPasswordState &state) mutable {
|
||||||
|
86
Telegram/SourceFiles/api/api_cloud_password.cpp
Normal file
86
Telegram/SourceFiles/api/api_cloud_password.cpp
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
/*
|
||||||
|
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
|
||||||
|
*/
|
||||||
|
#include "api/api_cloud_password.h"
|
||||||
|
|
||||||
|
#include "base/openssl_help.h"
|
||||||
|
#include "core/core_cloud_password.h"
|
||||||
|
#include "apiwrap.h"
|
||||||
|
|
||||||
|
namespace Api {
|
||||||
|
|
||||||
|
// #TODO Add ability to set recovery email separately.
|
||||||
|
|
||||||
|
CloudPassword::CloudPassword(not_null<ApiWrap*> api)
|
||||||
|
: _api(&api->instance()) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void CloudPassword::reload() {
|
||||||
|
if (_requestId) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_requestId = _api.request(MTPaccount_GetPassword(
|
||||||
|
)).done([=](const MTPaccount_Password &result) {
|
||||||
|
_requestId = 0;
|
||||||
|
result.match([&](const MTPDaccount_password &data) {
|
||||||
|
openssl::AddRandomSeed(bytes::make_span(data.vsecure_random().v));
|
||||||
|
if (_state) {
|
||||||
|
*_state = Core::ParseCloudPasswordState(data);
|
||||||
|
} else {
|
||||||
|
_state = std::make_unique<Core::CloudPasswordState>(
|
||||||
|
Core::ParseCloudPasswordState(data));
|
||||||
|
}
|
||||||
|
_stateChanges.fire_copy(*_state);
|
||||||
|
});
|
||||||
|
}).fail([=](const MTP::Error &error) {
|
||||||
|
_requestId = 0;
|
||||||
|
}).send();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CloudPassword::applyPendingReset(
|
||||||
|
const MTPaccount_ResetPasswordResult &data) {
|
||||||
|
if (!_state) {
|
||||||
|
reload();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
data.match([&](const MTPDaccount_resetPasswordOk &data) {
|
||||||
|
reload();
|
||||||
|
}, [&](const MTPDaccount_resetPasswordRequestedWait &data) {
|
||||||
|
const auto until = data.vuntil_date().v;
|
||||||
|
if (_state->pendingResetDate != until) {
|
||||||
|
_state->pendingResetDate = until;
|
||||||
|
_stateChanges.fire_copy(*_state);
|
||||||
|
}
|
||||||
|
}, [&](const MTPDaccount_resetPasswordFailedWait &data) {
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void CloudPassword::clearUnconfirmedPassword() {
|
||||||
|
_requestId = _api.request(MTPaccount_CancelPasswordEmail(
|
||||||
|
)).done([=](const MTPBool &result) {
|
||||||
|
_requestId = 0;
|
||||||
|
reload();
|
||||||
|
}).fail([=](const MTP::Error &error) {
|
||||||
|
_requestId = 0;
|
||||||
|
reload();
|
||||||
|
}).send();
|
||||||
|
}
|
||||||
|
|
||||||
|
rpl::producer<Core::CloudPasswordState> CloudPassword::state() const {
|
||||||
|
return _state
|
||||||
|
? _stateChanges.events_starting_with_copy(*_state)
|
||||||
|
: (_stateChanges.events() | rpl::type_erased());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto CloudPassword::stateCurrent() const
|
||||||
|
-> std::optional<Core::CloudPasswordState> {
|
||||||
|
return _state
|
||||||
|
? base::make_optional(*_state)
|
||||||
|
: std::nullopt;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Api
|
42
Telegram/SourceFiles/api/api_cloud_password.h
Normal file
42
Telegram/SourceFiles/api/api_cloud_password.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
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:
|
||||||
|
explicit CloudPassword(not_null<ApiWrap*> api);
|
||||||
|
|
||||||
|
void reload();
|
||||||
|
void applyPendingReset(const MTPaccount_ResetPasswordResult &data);
|
||||||
|
void clearUnconfirmedPassword();
|
||||||
|
rpl::producer<Core::CloudPasswordState> state() const;
|
||||||
|
std::optional<Core::CloudPasswordState> stateCurrent() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
MTP::Sender _api;
|
||||||
|
mtpRequestId _requestId = 0;
|
||||||
|
std::unique_ptr<Core::CloudPasswordState> _state;
|
||||||
|
rpl::event_stream<Core::CloudPasswordState> _stateChanges;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Api
|
@ -10,6 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||||||
#include "api/api_authorizations.h"
|
#include "api/api_authorizations.h"
|
||||||
#include "api/api_attached_stickers.h"
|
#include "api/api_attached_stickers.h"
|
||||||
#include "api/api_blocked_peers.h"
|
#include "api/api_blocked_peers.h"
|
||||||
|
#include "api/api_cloud_password.h"
|
||||||
#include "api/api_hash.h"
|
#include "api/api_hash.h"
|
||||||
#include "api/api_invite_links.h"
|
#include "api/api_invite_links.h"
|
||||||
#include "api/api_media.h"
|
#include "api/api_media.h"
|
||||||
@ -44,7 +45,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||||||
#include "dialogs/dialogs_key.h"
|
#include "dialogs/dialogs_key.h"
|
||||||
#include "core/core_cloud_password.h"
|
#include "core/core_cloud_password.h"
|
||||||
#include "core/application.h"
|
#include "core/application.h"
|
||||||
#include "base/openssl_help.h"
|
|
||||||
#include "base/unixtime.h"
|
#include "base/unixtime.h"
|
||||||
#include "base/qt_adapters.h"
|
#include "base/qt_adapters.h"
|
||||||
#include "base/call_delayed.h"
|
#include "base/call_delayed.h"
|
||||||
@ -135,6 +135,7 @@ ApiWrap::ApiWrap(not_null<Main::Session*> session)
|
|||||||
, _authorizations(std::make_unique<Api::Authorizations>(this))
|
, _authorizations(std::make_unique<Api::Authorizations>(this))
|
||||||
, _attachedStickers(std::make_unique<Api::AttachedStickers>(this))
|
, _attachedStickers(std::make_unique<Api::AttachedStickers>(this))
|
||||||
, _blockedPeers(std::make_unique<Api::BlockedPeers>(this))
|
, _blockedPeers(std::make_unique<Api::BlockedPeers>(this))
|
||||||
|
, _cloudPassword(std::make_unique<Api::CloudPassword>(this))
|
||||||
, _selfDestruct(std::make_unique<Api::SelfDestruct>(this))
|
, _selfDestruct(std::make_unique<Api::SelfDestruct>(this))
|
||||||
, _sensitiveContent(std::make_unique<Api::SensitiveContent>(this))
|
, _sensitiveContent(std::make_unique<Api::SensitiveContent>(this))
|
||||||
, _globalPrivacy(std::make_unique<Api::GlobalPrivacy>(this))
|
, _globalPrivacy(std::make_unique<Api::GlobalPrivacy>(this))
|
||||||
@ -4586,69 +4587,6 @@ void ApiWrap::clearPeerPhoto(not_null<PhotoData*> photo) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ApiWrap::reloadPasswordState() {
|
|
||||||
if (_passwordRequestId) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
_passwordRequestId = request(MTPaccount_GetPassword(
|
|
||||||
)).done([=](const MTPaccount_Password &result) {
|
|
||||||
_passwordRequestId = 0;
|
|
||||||
result.match([&](const MTPDaccount_password &data) {
|
|
||||||
openssl::AddRandomSeed(bytes::make_span(data.vsecure_random().v));
|
|
||||||
if (_passwordState) {
|
|
||||||
*_passwordState = Core::ParseCloudPasswordState(data);
|
|
||||||
} else {
|
|
||||||
_passwordState = std::make_unique<Core::CloudPasswordState>(
|
|
||||||
Core::ParseCloudPasswordState(data));
|
|
||||||
}
|
|
||||||
_passwordStateChanges.fire_copy(*_passwordState);
|
|
||||||
});
|
|
||||||
}).fail([=](const MTP::Error &error) {
|
|
||||||
_passwordRequestId = 0;
|
|
||||||
}).send();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ApiWrap::applyPendingReset(const MTPaccount_ResetPasswordResult &data) {
|
|
||||||
if (!_passwordState) {
|
|
||||||
reloadPasswordState();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
data.match([&](const MTPDaccount_resetPasswordOk &data) {
|
|
||||||
reloadPasswordState();
|
|
||||||
}, [&](const MTPDaccount_resetPasswordRequestedWait &data) {
|
|
||||||
const auto until = data.vuntil_date().v;
|
|
||||||
if (_passwordState->pendingResetDate != until) {
|
|
||||||
_passwordState->pendingResetDate = until;
|
|
||||||
_passwordStateChanges.fire_copy(*_passwordState);
|
|
||||||
}
|
|
||||||
}, [&](const MTPDaccount_resetPasswordFailedWait &data) {
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void ApiWrap::clearUnconfirmedPassword() {
|
|
||||||
_passwordRequestId = request(MTPaccount_CancelPasswordEmail(
|
|
||||||
)).done([=](const MTPBool &result) {
|
|
||||||
_passwordRequestId = 0;
|
|
||||||
reloadPasswordState();
|
|
||||||
}).fail([=](const MTP::Error &error) {
|
|
||||||
_passwordRequestId = 0;
|
|
||||||
reloadPasswordState();
|
|
||||||
}).send();
|
|
||||||
}
|
|
||||||
|
|
||||||
rpl::producer<Core::CloudPasswordState> ApiWrap::passwordState() const {
|
|
||||||
return _passwordState
|
|
||||||
? _passwordStateChanges.events_starting_with_copy(*_passwordState)
|
|
||||||
: (_passwordStateChanges.events() | rpl::type_erased());
|
|
||||||
}
|
|
||||||
|
|
||||||
auto ApiWrap::passwordStateCurrent() const
|
|
||||||
-> std::optional<Core::CloudPasswordState> {
|
|
||||||
return _passwordState
|
|
||||||
? base::make_optional(*_passwordState)
|
|
||||||
: std::nullopt;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ApiWrap::reloadContactSignupSilent() {
|
void ApiWrap::reloadContactSignupSilent() {
|
||||||
if (_contactSignupSilentRequestId) {
|
if (_contactSignupSilentRequestId) {
|
||||||
return;
|
return;
|
||||||
@ -4734,6 +4672,10 @@ Api::BlockedPeers &ApiWrap::blockedPeers() {
|
|||||||
return *_blockedPeers;
|
return *_blockedPeers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Api::CloudPassword &ApiWrap::cloudPassword() {
|
||||||
|
return *_cloudPassword;
|
||||||
|
}
|
||||||
|
|
||||||
Api::SelfDestruct &ApiWrap::selfDestruct() {
|
Api::SelfDestruct &ApiWrap::selfDestruct() {
|
||||||
return *_selfDestruct;
|
return *_selfDestruct;
|
||||||
}
|
}
|
||||||
|
@ -45,10 +45,6 @@ namespace Dialogs {
|
|||||||
class Key;
|
class Key;
|
||||||
} // namespace Dialogs
|
} // namespace Dialogs
|
||||||
|
|
||||||
namespace Core {
|
|
||||||
struct CloudPasswordState;
|
|
||||||
} // namespace Core
|
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
struct PreparedList;
|
struct PreparedList;
|
||||||
} // namespace Ui
|
} // namespace Ui
|
||||||
@ -59,6 +55,7 @@ class Updates;
|
|||||||
class Authorizations;
|
class Authorizations;
|
||||||
class AttachedStickers;
|
class AttachedStickers;
|
||||||
class BlockedPeers;
|
class BlockedPeers;
|
||||||
|
class CloudPassword;
|
||||||
class SelfDestruct;
|
class SelfDestruct;
|
||||||
class SensitiveContent;
|
class SensitiveContent;
|
||||||
class GlobalPrivacy;
|
class GlobalPrivacy;
|
||||||
@ -386,12 +383,6 @@ public:
|
|||||||
void uploadPeerPhoto(not_null<PeerData*> peer, QImage &&image);
|
void uploadPeerPhoto(not_null<PeerData*> peer, QImage &&image);
|
||||||
void clearPeerPhoto(not_null<PhotoData*> photo);
|
void clearPeerPhoto(not_null<PhotoData*> photo);
|
||||||
|
|
||||||
void reloadPasswordState();
|
|
||||||
void applyPendingReset(const MTPaccount_ResetPasswordResult &data);
|
|
||||||
void clearUnconfirmedPassword();
|
|
||||||
rpl::producer<Core::CloudPasswordState> passwordState() const;
|
|
||||||
std::optional<Core::CloudPasswordState> passwordStateCurrent() const;
|
|
||||||
|
|
||||||
void reloadContactSignupSilent();
|
void reloadContactSignupSilent();
|
||||||
rpl::producer<bool> contactSignupSilent() const;
|
rpl::producer<bool> contactSignupSilent() const;
|
||||||
std::optional<bool> contactSignupSilentCurrent() const;
|
std::optional<bool> contactSignupSilentCurrent() const;
|
||||||
@ -402,6 +393,7 @@ public:
|
|||||||
[[nodiscard]] Api::Authorizations &authorizations();
|
[[nodiscard]] Api::Authorizations &authorizations();
|
||||||
[[nodiscard]] Api::AttachedStickers &attachedStickers();
|
[[nodiscard]] Api::AttachedStickers &attachedStickers();
|
||||||
[[nodiscard]] Api::BlockedPeers &blockedPeers();
|
[[nodiscard]] Api::BlockedPeers &blockedPeers();
|
||||||
|
[[nodiscard]] Api::CloudPassword &cloudPassword();
|
||||||
[[nodiscard]] Api::SelfDestruct &selfDestruct();
|
[[nodiscard]] Api::SelfDestruct &selfDestruct();
|
||||||
[[nodiscard]] Api::SensitiveContent &sensitiveContent();
|
[[nodiscard]] Api::SensitiveContent &sensitiveContent();
|
||||||
[[nodiscard]] Api::GlobalPrivacy &globalPrivacy();
|
[[nodiscard]] Api::GlobalPrivacy &globalPrivacy();
|
||||||
@ -707,10 +699,6 @@ private:
|
|||||||
|
|
||||||
base::flat_map<FullMsgId, not_null<PeerData*>> _peerPhotoUploads;
|
base::flat_map<FullMsgId, not_null<PeerData*>> _peerPhotoUploads;
|
||||||
|
|
||||||
mtpRequestId _passwordRequestId = 0;
|
|
||||||
std::unique_ptr<Core::CloudPasswordState> _passwordState;
|
|
||||||
rpl::event_stream<Core::CloudPasswordState> _passwordStateChanges;
|
|
||||||
|
|
||||||
mtpRequestId _saveBioRequestId = 0;
|
mtpRequestId _saveBioRequestId = 0;
|
||||||
FnMut<void()> _saveBioDone;
|
FnMut<void()> _saveBioDone;
|
||||||
QString _saveBioText;
|
QString _saveBioText;
|
||||||
@ -718,6 +706,7 @@ private:
|
|||||||
const std::unique_ptr<Api::Authorizations> _authorizations;
|
const std::unique_ptr<Api::Authorizations> _authorizations;
|
||||||
const std::unique_ptr<Api::AttachedStickers> _attachedStickers;
|
const std::unique_ptr<Api::AttachedStickers> _attachedStickers;
|
||||||
const std::unique_ptr<Api::BlockedPeers> _blockedPeers;
|
const std::unique_ptr<Api::BlockedPeers> _blockedPeers;
|
||||||
|
const std::unique_ptr<Api::CloudPassword> _cloudPassword;
|
||||||
const std::unique_ptr<Api::SelfDestruct> _selfDestruct;
|
const std::unique_ptr<Api::SelfDestruct> _selfDestruct;
|
||||||
const std::unique_ptr<Api::SensitiveContent> _sensitiveContent;
|
const std::unique_ptr<Api::SensitiveContent> _sensitiveContent;
|
||||||
const std::unique_ptr<Api::GlobalPrivacy> _globalPrivacy;
|
const std::unique_ptr<Api::GlobalPrivacy> _globalPrivacy;
|
||||||
|
@ -14,6 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||||||
#include "base/unixtime.h"
|
#include "base/unixtime.h"
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "apiwrap.h"
|
#include "apiwrap.h"
|
||||||
|
#include "api/api_cloud_password.h"
|
||||||
#include "main/main_session.h"
|
#include "main/main_session.h"
|
||||||
#include "main/main_domain.h"
|
#include "main/main_domain.h"
|
||||||
#include "core/application.h"
|
#include "core/application.h"
|
||||||
@ -43,7 +44,7 @@ enum class PasswordErrorType {
|
|||||||
void SetCloudPassword(
|
void SetCloudPassword(
|
||||||
not_null<Ui::GenericBox*> box,
|
not_null<Ui::GenericBox*> box,
|
||||||
not_null<Main::Session*> session) {
|
not_null<Main::Session*> session) {
|
||||||
session->api().passwordState(
|
session->api().cloudPassword().state(
|
||||||
) | rpl::start_with_next([=] {
|
) | rpl::start_with_next([=] {
|
||||||
using namespace Settings;
|
using namespace Settings;
|
||||||
const auto weak = Ui::MakeWeak(box);
|
const auto weak = Ui::MakeWeak(box);
|
||||||
@ -103,7 +104,7 @@ void StartPendingReset(
|
|||||||
const auto weak = Ui::MakeWeak(context.get());
|
const auto weak = Ui::MakeWeak(context.get());
|
||||||
session->api().request(MTPaccount_ResetPassword(
|
session->api().request(MTPaccount_ResetPassword(
|
||||||
)).done([=](const MTPaccount_ResetPasswordResult &result) {
|
)).done([=](const MTPaccount_ResetPasswordResult &result) {
|
||||||
session->api().applyPendingReset(result);
|
session->api().cloudPassword().applyPendingReset(result);
|
||||||
result.match([&](const MTPDaccount_resetPasswordOk &data) {
|
result.match([&](const MTPDaccount_resetPasswordOk &data) {
|
||||||
}, [&](const MTPDaccount_resetPasswordRequestedWait &data) {
|
}, [&](const MTPDaccount_resetPasswordRequestedWait &data) {
|
||||||
}, [&](const MTPDaccount_resetPasswordFailedWait &data) {
|
}, [&](const MTPDaccount_resetPasswordFailedWait &data) {
|
||||||
|
@ -36,6 +36,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||||||
#include "base/unixtime.h"
|
#include "base/unixtime.h"
|
||||||
#include "base/qt_adapters.h"
|
#include "base/qt_adapters.h"
|
||||||
#include "apiwrap.h"
|
#include "apiwrap.h"
|
||||||
|
#include "api/api_cloud_password.h"
|
||||||
#include "main/main_session.h"
|
#include "main/main_session.h"
|
||||||
#include "styles/style_layers.h"
|
#include "styles/style_layers.h"
|
||||||
#include "styles/style_boxes.h"
|
#include "styles/style_boxes.h"
|
||||||
@ -444,7 +445,7 @@ void EditAdminBox::transferOwnership() {
|
|||||||
? peer()->asChannel()->inputChannel
|
? peer()->asChannel()->inputChannel
|
||||||
: MTP_inputChannelEmpty();
|
: MTP_inputChannelEmpty();
|
||||||
const auto api = &peer()->session().api();
|
const auto api = &peer()->session().api();
|
||||||
api->reloadPasswordState();
|
api->cloudPassword().reload();
|
||||||
_checkTransferRequestId = api->request(MTPchannels_EditCreator(
|
_checkTransferRequestId = api->request(MTPchannels_EditCreator(
|
||||||
channel,
|
channel,
|
||||||
MTP_inputUserEmpty(),
|
MTP_inputUserEmpty(),
|
||||||
@ -495,7 +496,7 @@ void EditAdminBox::transferOwnershipChecked() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EditAdminBox::requestTransferPassword(not_null<ChannelData*> channel) {
|
void EditAdminBox::requestTransferPassword(not_null<ChannelData*> channel) {
|
||||||
peer()->session().api().passwordState(
|
peer()->session().api().cloudPassword().state(
|
||||||
) | rpl::take(
|
) | rpl::take(
|
||||||
1
|
1
|
||||||
) | rpl::start_with_next([=](const Core::CloudPasswordState &state) {
|
) | rpl::start_with_next([=](const Core::CloudPasswordState &state) {
|
||||||
|
@ -22,6 +22,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||||||
#include "core/core_cloud_password.h" // Core::CloudPasswordState
|
#include "core/core_cloud_password.h" // Core::CloudPasswordState
|
||||||
#include "lang/lang_keys.h"
|
#include "lang/lang_keys.h"
|
||||||
#include "apiwrap.h"
|
#include "apiwrap.h"
|
||||||
|
#include "api/api_cloud_password.h"
|
||||||
|
|
||||||
#include <QJsonDocument>
|
#include <QJsonDocument>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
@ -161,7 +162,7 @@ CheckoutProcess::CheckoutProcess(
|
|||||||
_panel->toggleProgress(true);
|
_panel->toggleProgress(true);
|
||||||
|
|
||||||
if (mode == Mode::Payment) {
|
if (mode == Mode::Payment) {
|
||||||
_session->api().passwordState(
|
_session->api().cloudPassword().state(
|
||||||
) | rpl::start_with_next([=](const Core::CloudPasswordState &state) {
|
) | rpl::start_with_next([=](const Core::CloudPasswordState &state) {
|
||||||
_form->setHasPassword(!!state.request);
|
_form->setHasPassword(!!state.request);
|
||||||
}, _lifetime);
|
}, _lifetime);
|
||||||
@ -192,7 +193,7 @@ void CheckoutProcess::handleFormUpdate(const FormUpdate &update) {
|
|||||||
showForm();
|
showForm();
|
||||||
}
|
}
|
||||||
if (_form->paymentMethod().savedCredentials) {
|
if (_form->paymentMethod().savedCredentials) {
|
||||||
_session->api().reloadPasswordState();
|
_session->api().cloudPassword().reload();
|
||||||
}
|
}
|
||||||
}, [&](const ThumbnailUpdated &data) {
|
}, [&](const ThumbnailUpdated &data) {
|
||||||
_panel->updateFormThumbnail(data.thumbnail);
|
_panel->updateFormThumbnail(data.thumbnail);
|
||||||
@ -585,7 +586,7 @@ void CheckoutProcess::editPaymentMethod() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CheckoutProcess::requestSetPassword() {
|
void CheckoutProcess::requestSetPassword() {
|
||||||
_session->api().reloadPasswordState();
|
_session->api().cloudPassword().reload();
|
||||||
_panel->askSetPassword();
|
_panel->askSetPassword();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -622,12 +623,12 @@ void CheckoutProcess::panelSetPassword() {
|
|||||||
box->newPasswordSet() | rpl::to_empty,
|
box->newPasswordSet() | rpl::to_empty,
|
||||||
box->passwordReloadNeeded()
|
box->passwordReloadNeeded()
|
||||||
) | rpl::start_with_next([=] {
|
) | rpl::start_with_next([=] {
|
||||||
_session->api().reloadPasswordState();
|
_session->api().cloudPassword().reload();
|
||||||
}, box->lifetime());
|
}, box->lifetime());
|
||||||
|
|
||||||
box->clearUnconfirmedPassword(
|
box->clearUnconfirmedPassword(
|
||||||
) | rpl::start_with_next([=] {
|
) | rpl::start_with_next([=] {
|
||||||
_session->api().clearUnconfirmedPassword();
|
_session->api().cloudPassword().clearUnconfirmedPassword();
|
||||||
}, box->lifetime());
|
}, box->lifetime());
|
||||||
|
|
||||||
_panel->showBox(std::move(owned));
|
_panel->showBox(std::move(owned));
|
||||||
@ -645,7 +646,7 @@ void CheckoutProcess::getPasswordState(
|
|||||||
if (_gettingPasswordState) {
|
if (_gettingPasswordState) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
_session->api().passwordState(
|
_session->api().cloudPassword().state(
|
||||||
) | rpl::start_with_next([=](const Core::CloudPasswordState &state) {
|
) | rpl::start_with_next([=](const Core::CloudPasswordState &state) {
|
||||||
_gettingPasswordState.destroy();
|
_gettingPasswordState.destroy();
|
||||||
callback(state);
|
callback(state);
|
||||||
|
@ -31,8 +31,9 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||||||
#include "main/main_account.h"
|
#include "main/main_account.h"
|
||||||
#include "main/main_app_config.h"
|
#include "main/main_app_config.h"
|
||||||
#include "apiwrap.h"
|
#include "apiwrap.h"
|
||||||
#include "api/api_sensitive_content.h"
|
#include "api/api_cloud_password.h"
|
||||||
#include "api/api_global_privacy.h"
|
#include "api/api_global_privacy.h"
|
||||||
|
#include "api/api_sensitive_content.h"
|
||||||
#include "window/window_controller.h"
|
#include "window/window_controller.h"
|
||||||
#include "window/window_session_controller.h"
|
#include "window/window_session_controller.h"
|
||||||
#include "core/click_handler_types.h"
|
#include "core/click_handler_types.h"
|
||||||
@ -378,7 +379,7 @@ void Main::setupContent(not_null<Window::SessionController*> controller) {
|
|||||||
Ui::ResizeFitChild(this, content);
|
Ui::ResizeFitChild(this, content);
|
||||||
|
|
||||||
// If we load this in advance it won't jump when we open its' section.
|
// If we load this in advance it won't jump when we open its' section.
|
||||||
controller->session().api().reloadPasswordState();
|
controller->session().api().cloudPassword().reload();
|
||||||
controller->session().api().reloadContactSignupSilent();
|
controller->session().api().reloadContactSignupSilent();
|
||||||
controller->session().api().sensitiveContent().reload();
|
controller->session().api().sensitiveContent().reload();
|
||||||
controller->session().api().globalPrivacy().reload();
|
controller->session().api().globalPrivacy().reload();
|
||||||
|
@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
|||||||
|
|
||||||
#include "api/api_authorizations.h"
|
#include "api/api_authorizations.h"
|
||||||
#include "api/api_blocked_peers.h"
|
#include "api/api_blocked_peers.h"
|
||||||
|
#include "api/api_cloud_password.h"
|
||||||
#include "api/api_self_destruct.h"
|
#include "api/api_self_destruct.h"
|
||||||
#include "api/api_sensitive_content.h"
|
#include "api/api_sensitive_content.h"
|
||||||
#include "api/api_global_privacy.h"
|
#include "api/api_global_privacy.h"
|
||||||
@ -332,13 +333,13 @@ void SetupCloudPassword(
|
|||||||
const auto session = &controller->session();
|
const auto session = &controller->session();
|
||||||
auto has = rpl::single(
|
auto has = rpl::single(
|
||||||
false
|
false
|
||||||
) | rpl::then(controller->session().api().passwordState(
|
) | rpl::then(controller->session().api().cloudPassword().state(
|
||||||
) | rpl::map([](const State &state) {
|
) | rpl::map([](const State &state) {
|
||||||
return state.request
|
return state.request
|
||||||
|| state.unknownAlgorithm
|
|| state.unknownAlgorithm
|
||||||
|| !state.unconfirmedPattern.isEmpty();
|
|| !state.unconfirmedPattern.isEmpty();
|
||||||
})) | rpl::distinct_until_changed();
|
})) | rpl::distinct_until_changed();
|
||||||
auto pattern = session->api().passwordState(
|
auto pattern = session->api().cloudPassword().state(
|
||||||
) | rpl::map([](const State &state) {
|
) | rpl::map([](const State &state) {
|
||||||
return state.unconfirmedPattern;
|
return state.unconfirmedPattern;
|
||||||
});
|
});
|
||||||
@ -361,7 +362,7 @@ void SetupCloudPassword(
|
|||||||
) | rpl::then(rpl::duplicate(
|
) | rpl::then(rpl::duplicate(
|
||||||
unconfirmed
|
unconfirmed
|
||||||
));
|
));
|
||||||
auto resetAt = session->api().passwordState(
|
auto resetAt = session->api().cloudPassword().state(
|
||||||
) | rpl::map([](const State &state) {
|
) | rpl::map([](const State &state) {
|
||||||
return state.pendingResetDate;
|
return state.pendingResetDate;
|
||||||
});
|
});
|
||||||
@ -427,7 +428,7 @@ void SetupCloudPassword(
|
|||||||
unconfirmed
|
unconfirmed
|
||||||
)))->setDuration(0);
|
)))->setDuration(0);
|
||||||
confirm->entity()->addClickHandler([=] {
|
confirm->entity()->addClickHandler([=] {
|
||||||
const auto state = session->api().passwordStateCurrent();
|
const auto state = session->api().cloudPassword().stateCurrent();
|
||||||
if (!state) {
|
if (!state) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -438,13 +439,13 @@ void SetupCloudPassword(
|
|||||||
std::move(
|
std::move(
|
||||||
validation.reloadRequests
|
validation.reloadRequests
|
||||||
) | rpl::start_with_next([=] {
|
) | rpl::start_with_next([=] {
|
||||||
session->api().reloadPasswordState();
|
session->api().cloudPassword().reload();
|
||||||
}, validation.box->lifetime());
|
}, validation.box->lifetime());
|
||||||
|
|
||||||
std::move(
|
std::move(
|
||||||
validation.cancelRequests
|
validation.cancelRequests
|
||||||
) | rpl::start_with_next([=] {
|
) | rpl::start_with_next([=] {
|
||||||
session->api().clearUnconfirmedPassword();
|
session->api().cloudPassword().clearUnconfirmedPassword();
|
||||||
}, validation.box->lifetime());
|
}, validation.box->lifetime());
|
||||||
|
|
||||||
controller->show(std::move(validation.box));
|
controller->show(std::move(validation.box));
|
||||||
@ -551,7 +552,7 @@ void SetupCloudPassword(
|
|||||||
const auto sent = std::make_shared<mtpRequestId>(0);
|
const auto sent = std::make_shared<mtpRequestId>(0);
|
||||||
reset->entity()->addClickHandler([=] {
|
reset->entity()->addClickHandler([=] {
|
||||||
const auto api = &session->api();
|
const auto api = &session->api();
|
||||||
const auto state = api->passwordStateCurrent();
|
const auto state = api->cloudPassword().stateCurrent();
|
||||||
const auto date = state ? state->pendingResetDate : TimeId(0);
|
const auto date = state ? state->pendingResetDate : TimeId(0);
|
||||||
if (!date || *sent) {
|
if (!date || *sent) {
|
||||||
return;
|
return;
|
||||||
@ -559,7 +560,7 @@ void SetupCloudPassword(
|
|||||||
*sent = api->request(MTPaccount_ResetPassword(
|
*sent = api->request(MTPaccount_ResetPassword(
|
||||||
)).done([=](const MTPaccount_ResetPasswordResult &result) {
|
)).done([=](const MTPaccount_ResetPasswordResult &result) {
|
||||||
*sent = 0;
|
*sent = 0;
|
||||||
api->applyPendingReset(result);
|
api->cloudPassword().applyPendingReset(result);
|
||||||
}).fail([=](const MTP::Error &error) {
|
}).fail([=](const MTP::Error &error) {
|
||||||
*sent = 0;
|
*sent = 0;
|
||||||
}).send();
|
}).send();
|
||||||
@ -569,7 +570,7 @@ void SetupCloudPassword(
|
|||||||
*sent = api->request(MTPaccount_DeclinePasswordReset(
|
*sent = api->request(MTPaccount_DeclinePasswordReset(
|
||||||
)).done([=] {
|
)).done([=] {
|
||||||
*sent = 0;
|
*sent = 0;
|
||||||
api->reloadPasswordState();
|
api->cloudPassword().reload();
|
||||||
}).fail([=](const MTP::Error &error) {
|
}).fail([=](const MTP::Error &error) {
|
||||||
*sent = 0;
|
*sent = 0;
|
||||||
}).send();
|
}).send();
|
||||||
@ -597,7 +598,7 @@ void SetupCloudPassword(
|
|||||||
|
|
||||||
const auto reloadOnActivation = [=](Qt::ApplicationState state) {
|
const auto reloadOnActivation = [=](Qt::ApplicationState state) {
|
||||||
if (label->toggled() && state == Qt::ApplicationActive) {
|
if (label->toggled() && state == Qt::ApplicationActive) {
|
||||||
controller->session().api().reloadPasswordState();
|
controller->session().api().cloudPassword().reload();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
QObject::connect(
|
QObject::connect(
|
||||||
@ -606,7 +607,7 @@ void SetupCloudPassword(
|
|||||||
label,
|
label,
|
||||||
reloadOnActivation);
|
reloadOnActivation);
|
||||||
|
|
||||||
session->api().reloadPasswordState();
|
session->api().cloudPassword().reload();
|
||||||
|
|
||||||
AddSkip(container);
|
AddSkip(container);
|
||||||
AddDivider(container);
|
AddDivider(container);
|
||||||
@ -810,7 +811,7 @@ int ExceptionUsersCount(const std::vector<not_null<PeerData*>> &exceptions) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool CheckEditCloudPassword(not_null<::Main::Session*> session) {
|
bool CheckEditCloudPassword(not_null<::Main::Session*> session) {
|
||||||
const auto current = session->api().passwordStateCurrent();
|
const auto current = session->api().cloudPassword().stateCurrent();
|
||||||
Assert(current.has_value());
|
Assert(current.has_value());
|
||||||
|
|
||||||
if (!current->unknownAlgorithm
|
if (!current->unknownAlgorithm
|
||||||
@ -822,7 +823,7 @@ bool CheckEditCloudPassword(not_null<::Main::Session*> session) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
object_ptr<Ui::BoxContent> EditCloudPasswordBox(not_null<Main::Session*> session) {
|
object_ptr<Ui::BoxContent> EditCloudPasswordBox(not_null<Main::Session*> session) {
|
||||||
const auto current = session->api().passwordStateCurrent();
|
const auto current = session->api().cloudPassword().stateCurrent();
|
||||||
Assert(current.has_value());
|
Assert(current.has_value());
|
||||||
|
|
||||||
auto result = Box<PasscodeBox>(
|
auto result = Box<PasscodeBox>(
|
||||||
@ -834,12 +835,12 @@ object_ptr<Ui::BoxContent> EditCloudPasswordBox(not_null<Main::Session*> session
|
|||||||
box->newPasswordSet() | rpl::to_empty,
|
box->newPasswordSet() | rpl::to_empty,
|
||||||
box->passwordReloadNeeded()
|
box->passwordReloadNeeded()
|
||||||
) | rpl::start_with_next([=] {
|
) | rpl::start_with_next([=] {
|
||||||
session->api().reloadPasswordState();
|
session->api().cloudPassword().reload();
|
||||||
}, box->lifetime());
|
}, box->lifetime());
|
||||||
|
|
||||||
box->clearUnconfirmedPassword(
|
box->clearUnconfirmedPassword(
|
||||||
) | rpl::start_with_next([=] {
|
) | rpl::start_with_next([=] {
|
||||||
session->api().clearUnconfirmedPassword();
|
session->api().cloudPassword().clearUnconfirmedPassword();
|
||||||
}, box->lifetime());
|
}, box->lifetime());
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -847,11 +848,11 @@ object_ptr<Ui::BoxContent> EditCloudPasswordBox(not_null<Main::Session*> session
|
|||||||
|
|
||||||
void RemoveCloudPassword(not_null<Window::SessionController*> controller) {
|
void RemoveCloudPassword(not_null<Window::SessionController*> controller) {
|
||||||
const auto session = &controller->session();
|
const auto session = &controller->session();
|
||||||
const auto current = session->api().passwordStateCurrent();
|
const auto current = session->api().cloudPassword().stateCurrent();
|
||||||
Assert(current.has_value());
|
Assert(current.has_value());
|
||||||
|
|
||||||
if (!current->request) {
|
if (!current->request) {
|
||||||
session->api().clearUnconfirmedPassword();
|
session->api().cloudPassword().clearUnconfirmedPassword();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto fields = PasscodeBox::CloudFields::From(*current);
|
auto fields = PasscodeBox::CloudFields::From(*current);
|
||||||
@ -862,12 +863,12 @@ void RemoveCloudPassword(not_null<Window::SessionController*> controller) {
|
|||||||
box->newPasswordSet() | rpl::to_empty,
|
box->newPasswordSet() | rpl::to_empty,
|
||||||
box->passwordReloadNeeded()
|
box->passwordReloadNeeded()
|
||||||
) | rpl::start_with_next([=] {
|
) | rpl::start_with_next([=] {
|
||||||
session->api().reloadPasswordState();
|
session->api().cloudPassword().reload();
|
||||||
}, box->lifetime());
|
}, box->lifetime());
|
||||||
|
|
||||||
box->clearUnconfirmedPassword(
|
box->clearUnconfirmedPassword(
|
||||||
) | rpl::start_with_next([=] {
|
) | rpl::start_with_next([=] {
|
||||||
session->api().clearUnconfirmedPassword();
|
session->api().cloudPassword().clearUnconfirmedPassword();
|
||||||
}, box->lifetime());
|
}, box->lifetime());
|
||||||
|
|
||||||
controller->show(std::move(box));
|
controller->show(std::move(box));
|
||||||
|
Loading…
Reference in New Issue
Block a user