Add urlschema handler so w can catch the nc:// urls

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
Roeland Jago Douma 2017-11-23 11:32:08 +01:00
parent c763a6e7fb
commit 715c738ebf
No known key found for this signature in database
GPG key ID: F941078878347C0C
2 changed files with 63 additions and 12 deletions

View file

@ -1,35 +1,56 @@
#include "webviewpage.h"
#include <QWebEngineUrlRequestJob>
#include "creds/httpcredentialsgui.h"
namespace OCC {
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)
: AbstractCredentialsWizardPage(),
_ui()
{
_ocWizard = qobject_cast<OwncloudWizard *>(parent);
_ui.setupUi(this);
_ocWizard = qobject_cast<OwncloudWizard *>(parent);
_webview = new QWebEngineView(this);
_profile = new QWebEngineProfile(this);
_page = new QWebEnginePage(_profile);
_interceptor = new WebViewPageUrlRequestInterceptor(this);
_schemeHandler = new WebViewPageUrlSchemeHandler(this);
_profile->setHttpUserAgent(Utility::userAgentString());
_profile->setRequestInterceptor(_interceptor);
_profile->installUrlSchemeHandler("nc", _schemeHandler);
_webview->setPage(_page);
_ui.verticalLayout->addWidget(_webview);
_webview->show();
connect(_webview, SIGNAL(loadProgress(int)), _ui.progressBar, SLOT(setValue(int)));
}
void WebViewPage::initializePage() {
@ -64,4 +85,36 @@ void WebViewPageUrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo
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"

View file

@ -6,6 +6,7 @@
#include <QWebEngineProfile>
#include <QWebEnginePage>
#include <QWebEngineUrlRequestInterceptor>
#include <QWebEngineUrlSchemeHandler>
#include "wizard/abstractcredswizardpage.h"
#include "wizard/owncloudwizardcommon.h"
@ -15,13 +16,8 @@
namespace OCC {
class WebViewPageUrlRequestInterceptor : public QWebEngineUrlRequestInterceptor
{
Q_OBJECT
public:
WebViewPageUrlRequestInterceptor(QObject *parent = 0);
void interceptRequest(QWebEngineUrlRequestInfo &info);
};
class WebViewPageUrlRequestInterceptor;
class WebViewPageUrlSchemeHandler;
class WebViewPage : public AbstractCredentialsWizardPage
{
@ -46,7 +42,9 @@ private:
QWebEngineView *_webview;
QWebEngineProfile *_profile;
QWebEnginePage *_page;
WebViewPageUrlRequestInterceptor *_interceptor;
WebViewPageUrlSchemeHandler *_schemeHandler;
};
}