Files
EZ4Connect/ssologinwebview/ssologinwebview.cpp
2025-10-07 20:01:31 +08:00

83 lines
2.3 KiB
C++

#include "ssologinwebview.h"
#include "ui_ssologinwebview.h"
#include <QDialogButtonBox>
#include <QLineEdit>
#include <QToolButton>
#include <QWebEngineHistory>
#include <QWebEngineView>
#include <QWebEnginePage>
#include <QtWebEngineCore>
#include <QUrl>
SsoLoginWebView::SsoLoginWebView(QWidget *parent)
: QDialog(parent)
, ui(new Ui::SsoLoginWebView)
{
ui->setupUi(this);
setAttribute(Qt::WA_DeleteOnClose);
setModal(true);
setupConnections();
}
SsoLoginWebView::~SsoLoginWebView()
{
delete ui;
}
void SsoLoginWebView::setupConnections()
{
connect(ui->backButton, &QToolButton::clicked, ui->webEngineView, &QWebEngineView::back);
connect(ui->forwardButton, &QToolButton::clicked, ui->webEngineView, &QWebEngineView::forward);
connect(ui->reloadButton, &QToolButton::clicked, ui->webEngineView, &QWebEngineView::reload);
connect(ui->addressLineEdit, &QLineEdit::returnPressed, this, [&]()
{
const QUrl target = QUrl::fromUserInput(ui->addressLineEdit->text());
ui->webEngineView->load(target);
});
connect(ui->webEngineView, &QWebEngineView::urlChanged, this, [&](const QUrl &url)
{
ui->addressLineEdit->setText(url.toString());
});
connect(ui->webEngineView->page(), &QWebEnginePage::navigationRequested, this,
[&](QWebEngineNavigationRequest &request) {
if (request.navigationType() == QWebEngineNavigationRequest::NavigationType::RedirectNavigation &&
request.url().host() == callbackServerHost)
{
QUrlQuery queries(request.url());
loginCompleted(queries.queryItemValue("ticket"));
request.reject();
this->close();
}
else
request.accept();
});
connect(ui->dialogButtonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
}
void SsoLoginWebView::setInitialUrl(const QUrl &url)
{
if (!url.isEmpty())
{
ui->addressLineEdit->setText(url.toString());
ui->webEngineView->load(url);
}
}
void SsoLoginWebView::setCallbackServerHost(const QString &host)
{
callbackServerHost = host;
}
QUrl SsoLoginWebView::currentUrl() const
{
return ui->webEngineView->url();
}