Move get_dialog_invite_link_hash to LinkManager.
This commit is contained in:
parent
ffa1da2cac
commit
2d534e48d6
@ -25,6 +25,7 @@
|
|||||||
#include "td/telegram/GroupCallManager.h"
|
#include "td/telegram/GroupCallManager.h"
|
||||||
#include "td/telegram/InlineQueriesManager.h"
|
#include "td/telegram/InlineQueriesManager.h"
|
||||||
#include "td/telegram/InputGroupCallId.h"
|
#include "td/telegram/InputGroupCallId.h"
|
||||||
|
#include "td/telegram/LinkManager.h"
|
||||||
#include "td/telegram/logevent/LogEvent.h"
|
#include "td/telegram/logevent/LogEvent.h"
|
||||||
#include "td/telegram/logevent/LogEventHelper.h"
|
#include "td/telegram/logevent/LogEventHelper.h"
|
||||||
#include "td/telegram/MessagesManager.h"
|
#include "td/telegram/MessagesManager.h"
|
||||||
@ -2139,7 +2140,7 @@ class CheckChatInviteQuery : public Td::ResultHandler {
|
|||||||
void send(const string &invite_link) {
|
void send(const string &invite_link) {
|
||||||
invite_link_ = invite_link;
|
invite_link_ = invite_link;
|
||||||
send_query(G()->net_query_creator().create(
|
send_query(G()->net_query_creator().create(
|
||||||
telegram_api::messages_checkChatInvite(DialogInviteLink::get_dialog_invite_link_hash(invite_link_).str())));
|
telegram_api::messages_checkChatInvite(LinkManager::get_dialog_invite_link_hash(invite_link_))));
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_result(uint64 id, BufferSlice packet) override {
|
void on_result(uint64 id, BufferSlice packet) override {
|
||||||
@ -2171,7 +2172,7 @@ class ImportChatInviteQuery : public Td::ResultHandler {
|
|||||||
void send(const string &invite_link) {
|
void send(const string &invite_link) {
|
||||||
invite_link_ = invite_link;
|
invite_link_ = invite_link;
|
||||||
send_query(G()->net_query_creator().create(
|
send_query(G()->net_query_creator().create(
|
||||||
telegram_api::messages_importChatInvite(DialogInviteLink::get_dialog_invite_link_hash(invite_link).str())));
|
telegram_api::messages_importChatInvite(LinkManager::get_dialog_invite_link_hash(invite_link_))));
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_result(uint64 id, BufferSlice packet) override {
|
void on_result(uint64 id, BufferSlice packet) override {
|
||||||
|
@ -7,18 +7,13 @@
|
|||||||
#include "td/telegram/DialogInviteLink.h"
|
#include "td/telegram/DialogInviteLink.h"
|
||||||
|
|
||||||
#include "td/telegram/ContactsManager.h"
|
#include "td/telegram/ContactsManager.h"
|
||||||
|
#include "td/telegram/LinkManager.h"
|
||||||
|
|
||||||
#include "td/utils/logging.h"
|
#include "td/utils/logging.h"
|
||||||
#include "td/utils/misc.h"
|
#include "td/utils/misc.h"
|
||||||
|
|
||||||
namespace td {
|
namespace td {
|
||||||
|
|
||||||
const CSlice DialogInviteLink::INVITE_LINK_URLS[12] = {
|
|
||||||
"t.me/joinchat/", "telegram.me/joinchat/", "telegram.dog/joinchat/",
|
|
||||||
"t.me/+", "telegram.me/+", "telegram.dog/+",
|
|
||||||
"t.me/ ", "telegram.me/ ", "telegram.dog/ ",
|
|
||||||
"t.me/%20", "telegram.me/%20", "telegram.dog/%20"};
|
|
||||||
|
|
||||||
DialogInviteLink::DialogInviteLink(tl_object_ptr<telegram_api::chatInviteExported> exported_invite) {
|
DialogInviteLink::DialogInviteLink(tl_object_ptr<telegram_api::chatInviteExported> exported_invite) {
|
||||||
if (exported_invite == nullptr) {
|
if (exported_invite == nullptr) {
|
||||||
return;
|
return;
|
||||||
@ -76,29 +71,7 @@ DialogInviteLink::DialogInviteLink(tl_object_ptr<telegram_api::chatInviteExporte
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool DialogInviteLink::is_valid_invite_link(Slice invite_link) {
|
bool DialogInviteLink::is_valid_invite_link(Slice invite_link) {
|
||||||
return !get_dialog_invite_link_hash(invite_link).empty();
|
return !LinkManager::get_dialog_invite_link_hash(invite_link).empty();
|
||||||
}
|
|
||||||
|
|
||||||
Slice DialogInviteLink::get_dialog_invite_link_hash(Slice invite_link) {
|
|
||||||
auto lower_cased_invite_link_str = to_lower(invite_link);
|
|
||||||
Slice lower_cased_invite_link = lower_cased_invite_link_str;
|
|
||||||
size_t offset = 0;
|
|
||||||
if (begins_with(lower_cased_invite_link, "https://")) {
|
|
||||||
offset = 8;
|
|
||||||
} else if (begins_with(lower_cased_invite_link, "http://")) {
|
|
||||||
offset = 7;
|
|
||||||
}
|
|
||||||
lower_cased_invite_link.remove_prefix(offset);
|
|
||||||
|
|
||||||
for (auto &url : INVITE_LINK_URLS) {
|
|
||||||
if (begins_with(lower_cased_invite_link, url)) {
|
|
||||||
Slice hash = invite_link.substr(url.size() + offset);
|
|
||||||
hash.truncate(hash.find('#'));
|
|
||||||
hash.truncate(hash.find('?'));
|
|
||||||
return hash;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Slice();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
td_api::object_ptr<td_api::chatInviteLink> DialogInviteLink::get_chat_invite_link_object(
|
td_api::object_ptr<td_api::chatInviteLink> DialogInviteLink::get_chat_invite_link_object(
|
||||||
|
@ -34,8 +34,6 @@ class DialogInviteLink {
|
|||||||
|
|
||||||
friend StringBuilder &operator<<(StringBuilder &string_builder, const DialogInviteLink &invite_link);
|
friend StringBuilder &operator<<(StringBuilder &string_builder, const DialogInviteLink &invite_link);
|
||||||
|
|
||||||
static const CSlice INVITE_LINK_URLS[12];
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DialogInviteLink() = default;
|
DialogInviteLink() = default;
|
||||||
|
|
||||||
@ -43,8 +41,6 @@ class DialogInviteLink {
|
|||||||
|
|
||||||
static bool is_valid_invite_link(Slice invite_link);
|
static bool is_valid_invite_link(Slice invite_link);
|
||||||
|
|
||||||
static Slice get_dialog_invite_link_hash(Slice invite_link);
|
|
||||||
|
|
||||||
td_api::object_ptr<td_api::chatInviteLink> get_chat_invite_link_object(const ContactsManager *contacts_manager) const;
|
td_api::object_ptr<td_api::chatInviteLink> get_chat_invite_link_object(const ContactsManager *contacts_manager) const;
|
||||||
|
|
||||||
bool is_valid() const {
|
bool is_valid() const {
|
||||||
|
@ -591,4 +591,30 @@ void LinkManager::get_link_login_url(const string &url, bool allow_write_access,
|
|||||||
->send(url, DialogId(), MessageId(), 0, allow_write_access);
|
->send(url, DialogId(), MessageId(), 0, allow_write_access);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string LinkManager::get_dialog_invite_link_hash(Slice invite_link) {
|
||||||
|
auto link_info = LinkManager::get_link_info(invite_link);
|
||||||
|
if (!link_info.is_internal_) {
|
||||||
|
return string();
|
||||||
|
}
|
||||||
|
const auto url_query = parse_url_query(link_info.query_);
|
||||||
|
const auto &path = url_query.path_;
|
||||||
|
|
||||||
|
if (link_info.is_tg_) {
|
||||||
|
if (path.size() == 1 && path[0] == "join" && !url_query.get_arg("invite").empty()) {
|
||||||
|
// join?invite=abcdef
|
||||||
|
return url_query.get_arg("invite").str();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (path.size() >= 2 && path[0] == "joinchat" && !path[1].empty()) {
|
||||||
|
// /joinchat/<link>
|
||||||
|
return path[1];
|
||||||
|
}
|
||||||
|
if (path.size() >= 1 && path[0].size() >= 2 && (path[0][0] == ' ' || path[0][0] == '+')) {
|
||||||
|
// /+<link>
|
||||||
|
return path[0].substr(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return string();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace td
|
} // namespace td
|
||||||
|
@ -82,6 +82,8 @@ class LinkManager : public Actor {
|
|||||||
void get_link_login_url(const string &url, bool allow_write_access,
|
void get_link_login_url(const string &url, bool allow_write_access,
|
||||||
Promise<td_api::object_ptr<td_api::httpUrl>> &&promise);
|
Promise<td_api::object_ptr<td_api::httpUrl>> &&promise);
|
||||||
|
|
||||||
|
static string get_dialog_invite_link_hash(Slice invite_link);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void tear_down() override;
|
void tear_down() override;
|
||||||
|
|
||||||
|
@ -17383,6 +17383,7 @@ Result<MessagesManager::MessageLinkInfo> MessagesManager::get_message_link_info(
|
|||||||
if (!link_info.is_internal_) {
|
if (!link_info.is_internal_) {
|
||||||
return Status::Error("Invalid message link URL");
|
return Status::Error("Invalid message link URL");
|
||||||
}
|
}
|
||||||
|
url = link_info.query_;
|
||||||
|
|
||||||
Slice username;
|
Slice username;
|
||||||
Slice channel_id_slice;
|
Slice channel_id_slice;
|
||||||
@ -17443,6 +17444,10 @@ Result<MessagesManager::MessageLinkInfo> MessagesManager::get_message_link_info(
|
|||||||
} else {
|
} else {
|
||||||
// /c/123456789/12345
|
// /c/123456789/12345
|
||||||
// /username/12345?single
|
// /username/12345?single
|
||||||
|
|
||||||
|
CHECK(!url.empty() && url[0] == '/');
|
||||||
|
url.remove_prefix(1);
|
||||||
|
|
||||||
auto username_end_pos = url.find('/');
|
auto username_end_pos = url.find('/');
|
||||||
if (username_end_pos == Slice::npos) {
|
if (username_end_pos == Slice::npos) {
|
||||||
return Status::Error("Wrong message link URL");
|
return Status::Error("Wrong message link URL");
|
||||||
|
Loading…
Reference in New Issue
Block a user