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 "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"

View file

@ -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;
}; };
} }