From adaf85ae70a89f2b05979ef3005eccc3d62fb256 Mon Sep 17 00:00:00 2001 From: levlam Date: Sat, 20 Apr 2019 22:39:41 +0300 Subject: [PATCH] Support SESSION_REVOKE push notification. GitOrigin-RevId: 58ffab4a39bb36d973a064e8768d7a5e5dd56af9 --- td/telegram/NotificationManager.cpp | 16 ++++++++++++++-- td/telegram/NotificationManager.h | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/td/telegram/NotificationManager.cpp b/td/telegram/NotificationManager.cpp index c7b040a4..ecf36981 100644 --- a/td/telegram/NotificationManager.cpp +++ b/td/telegram/NotificationManager.cpp @@ -2632,6 +2632,7 @@ void NotificationManager::process_push_notification(string payload, Promiseget_my_id()) { - auto status = process_push_notification_payload(payload, promise); + auto status = process_push_notification_payload(payload, was_encrypted, promise); if (status.is_error()) { if (status.code() == 406 || status.code() == 200) { return promise.set_error(std::move(status)); @@ -2868,7 +2870,8 @@ string NotificationManager::convert_loc_key(const string &loc_key) { return string(); } -Status NotificationManager::process_push_notification_payload(string payload, Promise &promise) { +Status NotificationManager::process_push_notification_payload(string payload, bool was_encrypted, + Promise &promise) { VLOG(notifications) << "Process push notification payload " << payload; auto r_json_value = json_decode(payload); if (r_json_value.is_error()) { @@ -2980,6 +2983,15 @@ Status NotificationManager::process_push_notification_payload(string payload, Pr return Status::OK(); } + if (loc_key == "SESSION_REVOKE") { + if (was_encrypted) { + send_closure(td_->auth_manager_actor_, &AuthManager::on_authorization_lost); + } else { + LOG(ERROR) << "Receive unencrypted SESSION_REVOKE push notification"; + } + return Status::OK(); + } + if (loc_key == "LOCKED_MESSAGE") { return Status::Error(200, "Immediate success"); } diff --git a/td/telegram/NotificationManager.h b/td/telegram/NotificationManager.h index dd77624e..7adb4e45 100644 --- a/td/telegram/NotificationManager.h +++ b/td/telegram/NotificationManager.h @@ -292,7 +292,7 @@ class NotificationManager : public Actor { static string convert_loc_key(const string &loc_key); - Status process_push_notification_payload(string payload, Promise &promise); + Status process_push_notification_payload(string payload, bool was_encrypted, Promise &promise); void add_message_push_notification(DialogId dialog_id, MessageId message_id, int64 random_id, UserId sender_user_id, string sender_name, int32 date, bool contains_mention, bool is_silent,