mirror of
https://github.com/nextcloud/desktop.git
synced 2024-10-24 21:35:47 +03:00
Add urlschema handler so w can catch the nc:// urls
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
parent
c763a6e7fb
commit
715c738ebf
2 changed files with 63 additions and 12 deletions
|
@ -1,35 +1,56 @@
|
||||||
#include "webviewpage.h"
|
#include "webviewpage.h"
|
||||||
|
|
||||||
|
#include <QWebEngineUrlRequestJob>
|
||||||
|
|
||||||
#include "creds/httpcredentialsgui.h"
|
#include "creds/httpcredentialsgui.h"
|
||||||
|
|
||||||
namespace OCC {
|
namespace OCC {
|
||||||
|
|
||||||
Q_LOGGING_CATEGORY(lcWizardWebiewPage, "gui.wizard.webviewpage", QtInfoMsg)
|
Q_LOGGING_CATEGORY(lcWizardWebiewPage, "gui.wizard.webviewpage", QtInfoMsg)
|
||||||
|
|
||||||
|
|
||||||
|
class WebViewPageUrlRequestInterceptor : public QWebEngineUrlRequestInterceptor
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
WebViewPageUrlRequestInterceptor(QObject *parent = 0);
|
||||||
|
void interceptRequest(QWebEngineUrlRequestInfo &info);
|
||||||
|
};
|
||||||
|
|
||||||
|
class WebViewPageUrlSchemeHandler : public QWebEngineUrlSchemeHandler
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
WebViewPageUrlSchemeHandler(QObject *parent = 0);
|
||||||
|
void requestStarted(QWebEngineUrlRequestJob *request);
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void urlCatched(QString user, QString pass, QString host);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
WebViewPage::WebViewPage(QWidget *parent)
|
WebViewPage::WebViewPage(QWidget *parent)
|
||||||
: AbstractCredentialsWizardPage(),
|
: AbstractCredentialsWizardPage(),
|
||||||
_ui()
|
_ui()
|
||||||
{
|
{
|
||||||
_ocWizard = qobject_cast<OwncloudWizard *>(parent);
|
|
||||||
|
|
||||||
_ui.setupUi(this);
|
_ui.setupUi(this);
|
||||||
|
_ocWizard = qobject_cast<OwncloudWizard *>(parent);
|
||||||
|
|
||||||
|
|
||||||
_webview = new QWebEngineView(this);
|
_webview = new QWebEngineView(this);
|
||||||
_profile = new QWebEngineProfile(this);
|
_profile = new QWebEngineProfile(this);
|
||||||
_page = new QWebEnginePage(_profile);
|
_page = new QWebEnginePage(_profile);
|
||||||
_interceptor = new WebViewPageUrlRequestInterceptor(this);
|
_interceptor = new WebViewPageUrlRequestInterceptor(this);
|
||||||
|
_schemeHandler = new WebViewPageUrlSchemeHandler(this);
|
||||||
|
|
||||||
_profile->setHttpUserAgent(Utility::userAgentString());
|
_profile->setHttpUserAgent(Utility::userAgentString());
|
||||||
_profile->setRequestInterceptor(_interceptor);
|
_profile->setRequestInterceptor(_interceptor);
|
||||||
|
_profile->installUrlSchemeHandler("nc", _schemeHandler);
|
||||||
|
|
||||||
_webview->setPage(_page);
|
_webview->setPage(_page);
|
||||||
_ui.verticalLayout->addWidget(_webview);
|
_ui.verticalLayout->addWidget(_webview);
|
||||||
_webview->show();
|
_webview->show();
|
||||||
|
|
||||||
connect(_webview, SIGNAL(loadProgress(int)), _ui.progressBar, SLOT(setValue(int)));
|
connect(_webview, SIGNAL(loadProgress(int)), _ui.progressBar, SLOT(setValue(int)));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WebViewPage::initializePage() {
|
void WebViewPage::initializePage() {
|
||||||
|
@ -64,4 +85,36 @@ void WebViewPageUrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo
|
||||||
info.setHttpHeader("OCS-APIREQUEST", "true");
|
info.setHttpHeader("OCS-APIREQUEST", "true");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WebViewPageUrlSchemeHandler::WebViewPageUrlSchemeHandler(QObject *parent)
|
||||||
|
: QWebEngineUrlSchemeHandler(parent) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebViewPageUrlSchemeHandler::requestStarted(QWebEngineUrlRequestJob *request) {
|
||||||
|
QUrl url = request->requestUrl();
|
||||||
|
|
||||||
|
QString path = url.path().mid(1);
|
||||||
|
QStringList parts = path.split("&");
|
||||||
|
|
||||||
|
QString server;
|
||||||
|
QString user;
|
||||||
|
QString password;
|
||||||
|
|
||||||
|
for (QString part : parts) {
|
||||||
|
if (part.startsWith("server:")) {
|
||||||
|
server = part.mid(7);
|
||||||
|
} else if (part.startsWith("user:")) {
|
||||||
|
user = part.mid(5);
|
||||||
|
} else if (part.startsWith("password:")) {
|
||||||
|
password = part.mid(9);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
qCInfo(lcWizardWebiewPage()) << "Got user: " << user << ", password: " << password << ", server: " << server;
|
||||||
|
|
||||||
|
emit urlCatched(user, password, server);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "webviewpage.moc"
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include <QWebEngineProfile>
|
#include <QWebEngineProfile>
|
||||||
#include <QWebEnginePage>
|
#include <QWebEnginePage>
|
||||||
#include <QWebEngineUrlRequestInterceptor>
|
#include <QWebEngineUrlRequestInterceptor>
|
||||||
|
#include <QWebEngineUrlSchemeHandler>
|
||||||
|
|
||||||
#include "wizard/abstractcredswizardpage.h"
|
#include "wizard/abstractcredswizardpage.h"
|
||||||
#include "wizard/owncloudwizardcommon.h"
|
#include "wizard/owncloudwizardcommon.h"
|
||||||
|
@ -15,13 +16,8 @@
|
||||||
|
|
||||||
namespace OCC {
|
namespace OCC {
|
||||||
|
|
||||||
class WebViewPageUrlRequestInterceptor : public QWebEngineUrlRequestInterceptor
|
class WebViewPageUrlRequestInterceptor;
|
||||||
{
|
class WebViewPageUrlSchemeHandler;
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
WebViewPageUrlRequestInterceptor(QObject *parent = 0);
|
|
||||||
void interceptRequest(QWebEngineUrlRequestInfo &info);
|
|
||||||
};
|
|
||||||
|
|
||||||
class WebViewPage : public AbstractCredentialsWizardPage
|
class WebViewPage : public AbstractCredentialsWizardPage
|
||||||
{
|
{
|
||||||
|
@ -46,7 +42,9 @@ private:
|
||||||
QWebEngineView *_webview;
|
QWebEngineView *_webview;
|
||||||
QWebEngineProfile *_profile;
|
QWebEngineProfile *_profile;
|
||||||
QWebEnginePage *_page;
|
QWebEnginePage *_page;
|
||||||
|
|
||||||
WebViewPageUrlRequestInterceptor *_interceptor;
|
WebViewPageUrlRequestInterceptor *_interceptor;
|
||||||
|
WebViewPageUrlSchemeHandler *_schemeHandler;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue