diff --git a/client/src/CMakeLists.txt b/client/src/CMakeLists.txt index 55a431b5..46282087 100755 --- a/client/src/CMakeLists.txt +++ b/client/src/CMakeLists.txt @@ -36,11 +36,14 @@ set(headers data/TransferringFile.h data/UploadingFile.h data/IconMenuDelegate.h + # Librairies libs/AudioVideoUtils.h + libs/WebPageRequestInterceptor.h libs/highlighter/languagedata.h libs/highlighter/qsourcehighliter.h libs/highlighter/qsourcehighliterthemes.h + # Main Windows main/MainWindow.h # Managers @@ -175,6 +178,7 @@ set(srcs # Librairies libs/AudioVideoUtils.cpp + libs/WebPageRequestInterceptor.cpp libs/highlighter/languagedata.cpp libs/highlighter/qsourcehighliter.cpp libs/highlighter/qsourcehighliterthemes.cpp diff --git a/client/src/dialogs/WebLoginDialog.cpp b/client/src/dialogs/WebLoginDialog.cpp index 0aea69dc..c18f7de8 100644 --- a/client/src/dialogs/WebLoginDialog.cpp +++ b/client/src/dialogs/WebLoginDialog.cpp @@ -5,7 +5,6 @@ #include #include -#include "Utils.h" #include "TeraSettings.h" WebLoginDialog::WebLoginDialog(ConfigManagerClient *config, QWidget *parent) @@ -28,7 +27,7 @@ WebLoginDialog::WebLoginDialog(ConfigManagerClient *config, QWidget *parent) QVBoxLayout *layout = new QVBoxLayout(ui->centralWidget); layout->addWidget(m_webView); - m_requestInterceptor = new WebLoginRequestInterceptor(this); + m_requestInterceptor = new WebPageRequestInterceptor(true, this); m_webPage = new QWebEnginePage(m_webView); m_webPage->setUrlRequestInterceptor(m_requestInterceptor); @@ -233,34 +232,6 @@ QString WebLoginDialog::currentServerName() return QString(); } -/////////////////////////////////////////////////////////////////////////////////////////////////////// -WebLoginRequestInterceptor::WebLoginRequestInterceptor(QObject *p) : QWebEngineUrlRequestInterceptor(p) -{ - // Cache OS information - m_osName = Utils::getOsName(); - m_osVersion = Utils::getOsVersion(); -} - -WebLoginRequestInterceptor::~WebLoginRequestInterceptor() -{ - -} - -void WebLoginRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info) -{ - // Inject client name and version - info.setHttpHeader("X-Client-Name", QByteArray(OPENTERAPLUS_CLIENT_NAME)); - info.setHttpHeader("X-Client-Version", QByteArray(OPENTERAPLUS_VERSION)); - info.setHttpHeader("X-OS-Name", m_osName.toUtf8()); - info.setHttpHeader("X-OS-Version", m_osVersion.toUtf8()); - - // Inject required language - QString localeString = QLocale().bcp47Name(); - //qDebug() << "localeString : " << localeString; - info.setHttpHeader(QByteArray("Accept-Language"), localeString.toUtf8()); -} - - void WebLoginDialog::on_btnCancel_clicked() { showLargeView(false); diff --git a/client/src/dialogs/WebLoginDialog.h b/client/src/dialogs/WebLoginDialog.h index f742ca13..4f1bbc18 100644 --- a/client/src/dialogs/WebLoginDialog.h +++ b/client/src/dialogs/WebLoginDialog.h @@ -4,6 +4,8 @@ #include #include "managers/ConfigManagerClient.h" +#include "libs/WebPageRequestInterceptor.h" + #include #include #include @@ -63,19 +65,6 @@ namespace Ui { class WebLoginDialog; } - -class WebLoginRequestInterceptor : public QWebEngineUrlRequestInterceptor { - - // QWebEngineUrlRequestInterceptor interface -public: - WebLoginRequestInterceptor(QObject *p = nullptr); - ~WebLoginRequestInterceptor(); - void interceptRequest(QWebEngineUrlRequestInfo &info) override; -private: - QString m_osName; - QString m_osVersion; -}; - class WebLoginDialog : public QDialog { Q_OBJECT @@ -119,7 +108,7 @@ private slots: Ui::WebLoginDialog *ui; QWebEngineView *m_webView = nullptr; QWebEnginePage *m_webPage = nullptr; - WebLoginRequestInterceptor *m_requestInterceptor = nullptr; + WebPageRequestInterceptor *m_requestInterceptor = nullptr; ConfigManagerClient *m_config = nullptr; bool m_showServers = false; diff --git a/client/src/libs/WebPageRequestInterceptor.cpp b/client/src/libs/WebPageRequestInterceptor.cpp new file mode 100644 index 00000000..596bebdd --- /dev/null +++ b/client/src/libs/WebPageRequestInterceptor.cpp @@ -0,0 +1,34 @@ +#include "WebPageRequestInterceptor.h" +#include "Utils.h" + +WebPageRequestInterceptor::WebPageRequestInterceptor(bool inject_client, QObject *p) : + QWebEngineUrlRequestInterceptor(p) + ,m_injectClient(inject_client) +{ + // Cache OS information + if (m_injectClient){ + m_osName = Utils::getOsName(); + m_osVersion = Utils::getOsVersion(); + } +} + +WebPageRequestInterceptor::~WebPageRequestInterceptor() +{ + +} + +void WebPageRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info) +{ + // Inject client name and version + if (m_injectClient){ + info.setHttpHeader("X-Client-Name", QByteArray(OPENTERAPLUS_CLIENT_NAME)); + info.setHttpHeader("X-Client-Version", QByteArray(OPENTERAPLUS_VERSION)); + info.setHttpHeader("X-OS-Name", m_osName.toUtf8()); + info.setHttpHeader("X-OS-Version", m_osVersion.toUtf8()); + } + + // Inject required language + QString localeString = QLocale().bcp47Name(); + //qDebug() << "localeString : " << localeString; + info.setHttpHeader(QByteArray("Accept-Language"), localeString.toUtf8()); +} diff --git a/client/src/libs/WebPageRequestInterceptor.h b/client/src/libs/WebPageRequestInterceptor.h new file mode 100644 index 00000000..27bac8c0 --- /dev/null +++ b/client/src/libs/WebPageRequestInterceptor.h @@ -0,0 +1,20 @@ +#ifndef WEBPAGEREQUESTINTERCEPTOR_H +#define WEBPAGEREQUESTINTERCEPTOR_H + +#include +#include + +class WebPageRequestInterceptor : public QWebEngineUrlRequestInterceptor +{ + Q_OBJECT +public: + WebPageRequestInterceptor(bool inject_client = false, QObject *p = nullptr); + ~WebPageRequestInterceptor(); + void interceptRequest(QWebEngineUrlRequestInfo &info) override; +private: + QString m_osName; + QString m_osVersion; + bool m_injectClient = false; +}; + +#endif // WEBPAGEREQUESTINTERCEPTOR_H diff --git a/client/src/managers/ComManager.cpp b/client/src/managers/ComManager.cpp index 022d8360..7a0ae8f5 100644 --- a/client/src/managers/ComManager.cpp +++ b/client/src/managers/ComManager.cpp @@ -22,6 +22,7 @@ ComManager::ComManager(QUrl serverUrl, bool connectWebsocket, QObject *parent) : // Initialize token refresher timer @ each 15 minutes m_tokenRefreshTimer.setInterval(1000*60*15); + //m_tokenRefreshTimer.setInterval(1000*60); m_tokenRefreshTimer.setSingleShot(false); connect(&m_tokenRefreshTimer, &QTimer::timeout, this, &ComManager::refreshUserToken); diff --git a/client/src/services/BaseServiceComManager.cpp b/client/src/services/BaseServiceComManager.cpp index 50343efd..c1f0566c 100644 --- a/client/src/services/BaseServiceComManager.cpp +++ b/client/src/services/BaseServiceComManager.cpp @@ -169,6 +169,8 @@ void BaseServiceComManager::handleUserTokenUpdated() { // Update token setCredentials(m_comManager->getCurrentToken()); + + emit userTokenUpdated(); } void BaseServiceComManager::processServicesReply(QList services, QUrlQuery reply_query) diff --git a/client/src/services/BaseServiceComManager.h b/client/src/services/BaseServiceComManager.h index 2fea71a2..749ad047 100644 --- a/client/src/services/BaseServiceComManager.h +++ b/client/src/services/BaseServiceComManager.h @@ -41,6 +41,7 @@ private slots: signals: void dataReceived(QList items, QString endpoint, QUrlQuery reply_query); void readyChanged(bool ready); + void userTokenUpdated(); }; diff --git a/client/src/services/SurveyService/SurveyEditorDialog.cpp b/client/src/services/SurveyService/SurveyEditorDialog.cpp index 1c5d3052..5424684b 100644 --- a/client/src/services/SurveyService/SurveyEditorDialog.cpp +++ b/client/src/services/SurveyService/SurveyEditorDialog.cpp @@ -29,12 +29,17 @@ SurveyEditorDialog::SurveyEditorDialog(SurveyComManager *surveyComManager, const profile->setHttpCacheType(QWebEngineProfile::DiskHttpCache); qDebug() << "Cache Path = " << profile->cachePath();*/ + m_requestInterceptor = new WebPageRequestInterceptor(false, this); m_webPage = new QWebEnginePage(m_webView); + m_webPage->setUrlRequestInterceptor(m_requestInterceptor); connect(m_webPage, &QWebEnginePage::certificateError, this, &SurveyEditorDialog::onCertificateError); connect(m_webPage, &QWebEnginePage::loadingChanged, this, &SurveyEditorDialog::onPageLoadingChanged); connect(m_webPage, &QWebEnginePage::loadProgress, this, &SurveyEditorDialog::onPageLoadingProcess); m_webView->setPage(m_webPage); + + connect(m_surveyComManager, &SurveyComManager::userTokenUpdated, this, &SurveyEditorDialog::onUserTokenUpdated); + } SurveyEditorDialog::~SurveyEditorDialog() @@ -94,3 +99,9 @@ void SurveyEditorDialog::onPageLoadingProcess(int progress) ui->progressLoading->setValue(progress); } +void SurveyEditorDialog::onUserTokenUpdated() +{ + qDebug() << "Changing user token in Survey Editor"; + m_webPage->runJavaScript("set_user_token(\"" + m_surveyComManager->getCurrentToken() + "\");"); +} + diff --git a/client/src/services/SurveyService/SurveyEditorDialog.h b/client/src/services/SurveyService/SurveyEditorDialog.h index eead141e..1612b250 100644 --- a/client/src/services/SurveyService/SurveyEditorDialog.h +++ b/client/src/services/SurveyService/SurveyEditorDialog.h @@ -8,6 +8,7 @@ #include #include "SurveyComManager.h" +#include "libs/WebPageRequestInterceptor.h" namespace Ui { class SurveyEditorDialog; @@ -31,12 +32,15 @@ private slots: void onPageLoadingChanged(const QWebEngineLoadingInfo &loadingInfo); void onPageLoadingProcess(int progress); + void onUserTokenUpdated(); + private: Ui::SurveyEditorDialog *ui; SurveyComManager *m_surveyComManager; QWebEngineView *m_webView = nullptr; QWebEnginePage *m_webPage = nullptr; + WebPageRequestInterceptor *m_requestInterceptor = nullptr; QString m_testTypeUuid; QMovie* m_loadingIcon;