From 15fbaebebb879c30ed682abf8def331fe89c2268 Mon Sep 17 00:00:00 2001 From: Ralf Date: Fri, 20 Sep 2024 16:54:03 +0300 Subject: [PATCH] Client: Update Connect & Listener dialogs --- AdaptixServer/core/httphandler/listeners.go | 4 +-- Client/Headers/Client/Requestor.h | 2 +- Client/Headers/UI/Dialogs/DialogConnect.h | 1 + Client/Headers/Utils/Logs.h | 1 + Client/Source/Client/Requestor.cpp | 7 +++--- Client/Source/MainAdaptix.cpp | 27 ++++++++++++--------- Client/Source/UI/Dialogs/DialogConnect.cpp | 9 ++++--- Client/Source/UI/Dialogs/DialogListener.cpp | 15 +++++++++++- Client/Source/Utils/Logs.cpp | 8 ++++++ 9 files changed, 52 insertions(+), 22 deletions(-) diff --git a/AdaptixServer/core/httphandler/listeners.go b/AdaptixServer/core/httphandler/listeners.go index ee970790..330f9880 100644 --- a/AdaptixServer/core/httphandler/listeners.go +++ b/AdaptixServer/core/httphandler/listeners.go @@ -26,9 +26,9 @@ func (th *TsHttpHandler) ListenerStart(ctx *gin.Context) { err = th.teamserver.ListenerStart(listener.ListenerName, listener.ConfigType, listener.Config) if err != nil { - ctx.JSON(http.StatusOK, gin.H{"answer": err.Error()}) + ctx.JSON(http.StatusOK, gin.H{"message": err.Error(), "ok": false}) return } - ctx.JSON(http.StatusOK, gin.H{"answer": "Listener started"}) + ctx.JSON(http.StatusOK, gin.H{"message": "Listener started", "ok": true}) } diff --git a/Client/Headers/Client/Requestor.h b/Client/Headers/Client/Requestor.h index 27c44ec3..7e5daaeb 100644 --- a/Client/Headers/Client/Requestor.h +++ b/Client/Headers/Client/Requestor.h @@ -6,6 +6,6 @@ bool HttpReqLogin(AuthProfile* profile); -bool HttpReqListenerStart(QString configName, QString configType, QString configData, AuthProfile profile); +bool HttpReqListenerStart( QString configName, QString configType, QString configData, AuthProfile profile, QString* answer, bool* ok ); #endif //ADAPTIXCLIENT_REQUESTOR_H diff --git a/Client/Headers/UI/Dialogs/DialogConnect.h b/Client/Headers/UI/Dialogs/DialogConnect.h index afcd6317..28b37792 100644 --- a/Client/Headers/UI/Dialogs/DialogConnect.h +++ b/Client/Headers/UI/Dialogs/DialogConnect.h @@ -30,6 +30,7 @@ class DialogConnect : public QDialog void createUI(); bool checkValidInput(); + void loadProjects(); public: diff --git a/Client/Headers/Utils/Logs.h b/Client/Headers/Utils/Logs.h index 25a4951b..9d9c1ef8 100644 --- a/Client/Headers/Utils/Logs.h +++ b/Client/Headers/Utils/Logs.h @@ -14,5 +14,6 @@ void LogError(const char* format, ...); void MessageError( QString message ); +void MessageSuccess( QString message ); #endif //ADAPTIXCLIENT_LOGS_H diff --git a/Client/Source/Client/Requestor.cpp b/Client/Source/Client/Requestor.cpp index cb602cce..a9a2d585 100644 --- a/Client/Source/Client/Requestor.cpp +++ b/Client/Source/Client/Requestor.cpp @@ -45,7 +45,7 @@ bool HttpReqLogin(AuthProfile* profile) { return result; } -bool HttpReqListenerStart( QString configName, QString configType, QString configData, AuthProfile profile ) { +bool HttpReqListenerStart( QString configName, QString configType, QString configData, AuthProfile profile, QString* message, bool* ok ) { QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration(); sslConfig.setPeerVerifyMode(QSslSocket::VerifyNone); QSslConfiguration::setDefaultConfiguration(sslConfig); @@ -82,8 +82,9 @@ bool HttpReqListenerStart( QString configName, QString configType, QString confi if (parseError.error == QJsonParseError::NoError && jsonResponse.isObject()) { QJsonObject jsonObject = jsonResponse.object(); - if ( jsonObject.contains("answer") ) { - auto answer = jsonObject["answer"].toString(); + if ( jsonObject.contains("message") && jsonObject.contains("ok") ) { + *message = jsonObject["message"].toString(); + *ok = jsonObject["ok"].toBool(); result = true; } } diff --git a/Client/Source/MainAdaptix.cpp b/Client/Source/MainAdaptix.cpp index 8fb62f08..454214c8 100644 --- a/Client/Source/MainAdaptix.cpp +++ b/Client/Source/MainAdaptix.cpp @@ -13,19 +13,24 @@ MainAdaptix::~MainAdaptix(){ }; void MainAdaptix::Start() { + AuthProfile authProfile; + bool result; auto dialogConnect = new DialogConnect(); - auto authProfile = dialogConnect->StartDialog(); - if ( ! authProfile.valid ) { - this->Exit(); - return; - } - bool result = HttpReqLogin( &authProfile ); - if ( !result ) { - MessageError("Login failure"); - this->Exit(); - return; - } + do { + authProfile = dialogConnect->StartDialog(); + if (!authProfile.valid) { + this->Exit(); + return; + } + + result = HttpReqLogin(&authProfile); + if (!result) { + MessageError("Login failure"); + continue; + } + + } while( !result ); mainUI = new MainUI; mainUI->showMaximized(); diff --git a/Client/Source/UI/Dialogs/DialogConnect.cpp b/Client/Source/UI/Dialogs/DialogConnect.cpp index 3f04f8e6..c5b7e8d9 100644 --- a/Client/Source/UI/Dialogs/DialogConnect.cpp +++ b/Client/Source/UI/Dialogs/DialogConnect.cpp @@ -4,6 +4,8 @@ DialogConnect::DialogConnect() { this->createUI(); + this->loadProjects(); + connect( tableWidget, &QTableWidget::itemPressed, this, &DialogConnect::itemSelected ); connect( tableWidget, &QTableWidget::customContextMenuRequested, this, &DialogConnect::handleContextMenu ); @@ -14,8 +16,6 @@ DialogConnect::DialogConnect() { connect( lineEdit_User, &QLineEdit::returnPressed, this, [&](){onButton_Connect();} ); connect( lineEdit_Password, &QLineEdit::returnPressed, this, [&](){onButton_Connect();} ); connect( ButtonConnect, &QPushButton::clicked, this, [&](){onButton_Connect();} ); - - tableWidget->show(); } DialogConnect::~DialogConnect() = default; @@ -122,7 +122,7 @@ void DialogConnect::createUI() { gridLayout->addWidget( ButtonConnect, 9, 1, 1, 1 ); } -AuthProfile DialogConnect::StartDialog() { +void DialogConnect::loadProjects() { this->listProjects = GlobalClient->storage->ListProjects(); for ( auto profile : this->listProjects ) { tableWidget->setRowCount( tableWidget->rowCount() + 1 ); @@ -144,7 +144,9 @@ AuthProfile DialogConnect::StartDialog() { tableWidget->setItem( tableWidget->rowCount() - 1, 1, item_Project ); tableWidget->setItem( tableWidget->rowCount() - 1, 2, item_Host ); } +} +AuthProfile DialogConnect::StartDialog() { this->exec(); AuthProfile authProfile; @@ -232,4 +234,3 @@ void DialogConnect::onButton_Connect() { close(); } } - diff --git a/Client/Source/UI/Dialogs/DialogListener.cpp b/Client/Source/UI/Dialogs/DialogListener.cpp index 6cfe87f7..70e9216a 100644 --- a/Client/Source/UI/Dialogs/DialogListener.cpp +++ b/Client/Source/UI/Dialogs/DialogListener.cpp @@ -102,7 +102,20 @@ void DialogListener::onButtonSave() { configData = listenersUI[configType]->CollectData(); } - HttpReqListenerStart(configName, configType, configData, authProfile); + QString message = QString(); + bool ok = false; + bool result = HttpReqListenerStart(configName, configType, configData, authProfile, &message, &ok); + if( !result ){ + MessageError("Authentication error"); + return; + } + if ( ok ) { + MessageSuccess(message); + this->close(); + } + else { + MessageError(message); + } } void DialogListener::onButtonClose() { diff --git a/Client/Source/Utils/Logs.cpp b/Client/Source/Utils/Logs.cpp index 9da2c444..8632e0ca 100644 --- a/Client/Source/Utils/Logs.cpp +++ b/Client/Source/Utils/Logs.cpp @@ -33,4 +33,12 @@ void MessageError( QString message ) { box.setText( message ); box.setIcon( QMessageBox::Critical ); box.exec(); +} + +void MessageSuccess( QString message ) { + auto box = QMessageBox(); + box.setWindowTitle( "Success" ); + box.setText( message ); + box.setIcon( QMessageBox::Information ); + box.exec(); } \ No newline at end of file