ssl support

This commit is contained in:
simio 2025-06-24 12:04:23 -03:00
parent 341d9a57b2
commit 83ecf9491f
8 changed files with 51 additions and 9 deletions

View File

@ -78,13 +78,27 @@
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="3" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Secure Port:</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="secure_port">
<property name="maximum">
<number>65535</number>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_2"> <widget class="QLabel" name="label_2">
<property name="text"> <property name="text">
<string>Description:</string> <string>Description:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="4" column="1">
<widget class="QPlainTextEdit" name="description"> <widget class="QPlainTextEdit" name="description">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
@ -106,7 +120,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="4" column="0">
<widget class="QDialogButtonBox" name="button_box"> <widget class="QDialogButtonBox" name="button_box">
<property name="standardButtons"> <property name="standardButtons">
<set>QDialogButtonBox::Close|QDialogButtonBox::Save</set> <set>QDialogButtonBox::Close|QDialogButtonBox::Save</set>

View File

@ -9,6 +9,7 @@ public:
QString description; QString description;
QString address; QString address;
quint16 port = 0; quint16 port = 0;
quint16 secure_port = 0;
bool legacy = false; bool legacy = false;
QString toString() const; QString toString() const;

View File

@ -2,8 +2,9 @@
#include "aoapplication.h" #include "aoapplication.h"
#include <QNetworkRequest>
#include <QUrl> #include <QUrl>
#include <QSslConfiguration>
#include <QWebSocket>
WebSocketConnection::WebSocketConnection(AOApplication *ao_app, QObject *parent) WebSocketConnection::WebSocketConnection(AOApplication *ao_app, QObject *parent)
: QObject(parent) : QObject(parent)
@ -31,15 +32,28 @@ void WebSocketConnection::connectToServer(const ServerInfo &server)
{ {
disconnectFromServer(); disconnectFromServer();
bool useWss = server.secure_port != 0;
QString scheme = useWss ? "wss" : "ws";
int port = useWss ? server.secure_port : server.port;
QUrl url; QUrl url;
url.setScheme("ws"); url.setScheme(scheme);
url.setHost(server.address); url.setHost(server.address);
url.setPort(server.port); url.setPort(port);
QNetworkRequest req(url); QNetworkRequest req(url);
req.setHeader(QNetworkRequest::UserAgentHeader, QStringLiteral("AttorneyOnline/%1 (Desktop)").arg(ao_app->get_version_string())); req.setHeader(QNetworkRequest::UserAgentHeader, QStringLiteral("AttorneyOnline/%1 (Desktop)").arg(ao_app->get_version_string()));
m_socket->open(req); qInfo().noquote() << "Connecting to WebSocket server at:" << url.toString();
// Set up SSL configuration if using wss
if (scheme == "wss") {
QSslConfiguration sslConf = QSslConfiguration::defaultConfiguration();
sslConf.setPeerVerifyMode(QSslSocket::VerifyNone);
m_socket->setSslConfiguration(sslConf);
}
m_socket->open(url);
} }
void WebSocketConnection::disconnectFromServer() void WebSocketConnection::disconnectFromServer()
@ -94,4 +108,4 @@ void WebSocketConnection::onTextMessageReceived(QString message)
} }
Q_EMIT receivedPacket(AOPacket(header, raw_content)); Q_EMIT receivedPacket(AOPacket(header, raw_content));
} }

View File

@ -71,6 +71,11 @@ void NetworkManager::ms_request_finished(QNetworkReply *reply)
server.legacy = true; server.legacy = true;
} }
if (entry.contains("wss_port"))
{
server.secure_port = entry["wss_port"].toInt();
}
if (server.port != 0) if (server.port != 0)
{ {
server_list.append(server); server_list.append(server);

View File

@ -676,6 +676,7 @@ QVector<ServerInfo> Options::favorites()
favorite.beginGroup(group); favorite.beginGroup(group);
f_server.address = favorite.value("address", "127.0.0.1").toString(); f_server.address = favorite.value("address", "127.0.0.1").toString();
f_server.port = favorite.value("port", 27016).toInt(); f_server.port = favorite.value("port", 27016).toInt();
f_server.secure_port = favorite.value("secure_port", 0).toInt();
f_server.name = favorite.value("name", "Missing Name").toString(); f_server.name = favorite.value("name", "Missing Name").toString();
f_server.description = favorite.value("desc", "No description").toString(); f_server.description = favorite.value("desc", "No description").toString();
if (favorite.contains("protocol")) if (favorite.contains("protocol"))
@ -704,6 +705,7 @@ void Options::setFavorites(QVector<ServerInfo> value)
favorite.setValue("name", fav_server.name); favorite.setValue("name", fav_server.name);
favorite.setValue("address", fav_server.address); favorite.setValue("address", fav_server.address);
favorite.setValue("port", fav_server.port); favorite.setValue("port", fav_server.port);
favorite.setValue("secure_port", fav_server.secure_port);
favorite.setValue("desc", fav_server.description); favorite.setValue("desc", fav_server.description);
favorite.setValue("legacy", fav_server.legacy); favorite.setValue("legacy", fav_server.legacy);
favorite.endGroup(); favorite.endGroup();
@ -725,6 +727,7 @@ void Options::addFavorite(ServerInfo server)
favorite.setValue("name", server.name); favorite.setValue("name", server.name);
favorite.setValue("address", server.address); favorite.setValue("address", server.address);
favorite.setValue("port", server.port); favorite.setValue("port", server.port);
favorite.setValue("secure_port", server.secure_port);
favorite.setValue("desc", server.description); favorite.setValue("desc", server.description);
favorite.setValue("legacy", server.legacy); favorite.setValue("legacy", server.legacy);
favorite.endGroup(); favorite.endGroup();
@ -737,6 +740,7 @@ void Options::updateFavorite(ServerInfo server, int index)
favorite.setValue("name", server.name); favorite.setValue("name", server.name);
favorite.setValue("address", server.address); favorite.setValue("address", server.address);
favorite.setValue("port", server.port); favorite.setValue("port", server.port);
favorite.setValue("secure_port", server.secure_port);
favorite.setValue("desc", server.description); favorite.setValue("desc", server.description);
favorite.setValue("legacy", server.legacy); favorite.setValue("legacy", server.legacy);
favorite.endGroup(); favorite.endGroup();

View File

@ -61,9 +61,9 @@ void DirectConnectDialog::onConnectPressed()
return; return;
} }
if (l_url.scheme() != "ws") if (l_url.scheme() != "ws" && l_url.scheme() != "wss")
{ {
call_error(tr("Invalid URL scheme. Only ws:// is supported.")); call_error(tr("Invalid URL scheme. Only ws:// and wss:// is supported."));
return; return;
} }

View File

@ -31,6 +31,7 @@ ServerEditorDialog::ServerEditorDialog(QWidget *parent)
FROM_UI(QLineEdit, name); FROM_UI(QLineEdit, name);
FROM_UI(QLineEdit, hostname); FROM_UI(QLineEdit, hostname);
FROM_UI(QSpinBox, port); FROM_UI(QSpinBox, port);
FROM_UI(QSpinBox, secure_port);
FROM_UI(QPlainTextEdit, description); FROM_UI(QPlainTextEdit, description);
FROM_UI(QDialogButtonBox, button_box); FROM_UI(QDialogButtonBox, button_box);
@ -49,6 +50,7 @@ ServerEditorDialog::ServerEditorDialog(const ServerInfo &server, QWidget *parent
ui_name->setText(server.name); ui_name->setText(server.name);
ui_hostname->setText(server.address); ui_hostname->setText(server.address);
ui_port->setValue(server.port); ui_port->setValue(server.port);
ui_secure_port->setValue(server.secure_port);
ui_description->setPlainText(server.description); ui_description->setPlainText(server.description);
} }
@ -58,6 +60,7 @@ ServerInfo ServerEditorDialog::currentServerInfo() const
server.name = ui_name->text(); server.name = ui_name->text();
server.address = ui_hostname->text(); server.address = ui_hostname->text();
server.port = ui_port->value(); server.port = ui_port->value();
server.secure_port = ui_secure_port->value();
server.description = ui_description->toPlainText(); server.description = ui_description->toPlainText();
return server; return server;
} }

View File

@ -29,6 +29,7 @@ private:
QLineEdit *ui_name; QLineEdit *ui_name;
QLineEdit *ui_hostname; QLineEdit *ui_hostname;
QSpinBox *ui_port; QSpinBox *ui_port;
QSpinBox *ui_secure_port;
QPlainTextEdit *ui_description; QPlainTextEdit *ui_description;
QDialogButtonBox *ui_button_box; QDialogButtonBox *ui_button_box;