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 <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"
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue