From e4483719d495ec7fca50ce0e39480d01d565f9de Mon Sep 17 00:00:00 2001 From: in1tiate <32779090+in1tiate@users.noreply.github.com> Date: Mon, 15 Mar 2021 17:56:42 -0500 Subject: [PATCH] Deprecate hardcoded string-based authentication, add AUTH packet (#489) Co-authored-by: oldmud0 --- include/aoapplication.h | 1 + include/courtroom.h | 2 ++ src/courtroom.cpp | 23 +++++++++++++++++++---- src/packet_distribution.cpp | 11 +++++++++++ 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/include/aoapplication.h b/include/aoapplication.h index 2dc8649..9fa8c75 100644 --- a/include/aoapplication.h +++ b/include/aoapplication.h @@ -87,6 +87,7 @@ public: bool effects_enabled = false; bool y_offset_enabled = false; bool expanded_desk_mods_enabled = false; + bool auth_packet_enabled = false; ///////////////loading info/////////////////// diff --git a/include/courtroom.h b/include/courtroom.h index 6a64deb..9766c7b 100644 --- a/include/courtroom.h +++ b/include/courtroom.h @@ -312,6 +312,8 @@ public: // Truncates text so it fits within theme-specified boundaries and sets the tooltip to the full string void truncate_label_text(QWidget* p_widget, QString p_identifier); + void on_authentication_state_received(int p_state); + ~Courtroom(); private: AOApplication *ao_app; diff --git a/src/courtroom.cpp b/src/courtroom.cpp index a89b814..d68038c 100644 --- a/src/courtroom.cpp +++ b/src/courtroom.cpp @@ -1634,15 +1634,30 @@ void Courtroom::append_server_chatmessage(QString p_name, QString p_message, color = ao_app->get_color("server_chatlog_sender_color", "courtroom_fonts.ini") .name(); - if (p_message == "Logged in as a moderator.") { - ui_guard->show(); - append_server_chatmessage( - tr("CLIENT"), tr("You were granted the Disable Modcalls button."), "1"); + if (!ao_app->auth_packet_enabled && p_message == "Logged in as a moderator.") { + // Emulate successful authentication + on_authentication_state_received(1); } + ui_server_chatlog->append_chatmessage(p_name, p_message, color); } +void Courtroom::on_authentication_state_received(int p_state) +{ + if (p_state >= 1) { + ui_guard->show(); + append_server_chatmessage(tr("CLIENT"), tr("You were granted the Disable Modcalls button."), "1"); + } + else if (p_state == 0) { + append_server_chatmessage(tr("CLIENT"), tr("Login unsuccessful."), "1"); + } + else if (p_state < 0) { + ui_guard->hide(); + append_server_chatmessage(tr("CLIENT"), tr("You were logged out."), "1"); + } +} + void Courtroom::on_chat_return_pressed() { if (is_muted) diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp index ea4c77a..e8f98e1 100644 --- a/src/packet_distribution.cpp +++ b/src/packet_distribution.cpp @@ -199,6 +199,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) additive_enabled = false; effects_enabled = false; expanded_desk_mods_enabled = false; + auth_packet_enabled = false; if (f_packet.contains("yellowtext", Qt::CaseInsensitive)) yellow_text_enabled = true; if (f_packet.contains("prezoom", Qt::CaseInsensitive)) @@ -229,6 +230,8 @@ void AOApplication::server_packet_received(AOPacket *p_packet) y_offset_enabled = true; if (f_packet.contains("expanded_desk_mods", Qt::CaseInsensitive)) expanded_desk_mods_enabled = true; + if (f_packet.contains("auth_packet", Qt::CaseInsensitive)) + auth_packet_enabled = true; } else if (header == "PN") { if (f_contents.size() < 2) @@ -683,6 +686,14 @@ void AOApplication::server_packet_received(AOPacket *p_packet) if (f_contents.size() > 1 && f_contents.at(1) == "1") w_courtroom->on_reload_theme_clicked(); } + // Auth packet + else if (header == "AUTH") { + if (!courtroom_constructed || !auth_packet_enabled || f_contents.size() < 1) + goto end; + int authenticated = f_contents.at(0).toInt(); + + w_courtroom->on_authentication_state_received(authenticated); + } end: