diff options
author | A. Wilcox <awilcox@wilcox-tech.com> | 2018-10-04 04:31:02 +0000 |
---|---|---|
committer | A. Wilcox <awilcox@wilcox-tech.com> | 2018-10-04 04:31:02 +0000 |
commit | 48e146876c51711b9edfb9095b39a8577ed0ea8f (patch) | |
tree | 4063f8573e9092e90522cb1f9656eff5d50a4ffd | |
parent | 75ad34513e7be0eb1877e304e52e9f7ee9229425 (diff) | |
parent | 977c5d8e38ca9ed712c172a58dd0d893a6442d5e (diff) | |
download | packages-48e146876c51711b9edfb9095b39a8577ed0ea8f.tar.gz packages-48e146876c51711b9edfb9095b39a8577ed0ea8f.tar.bz2 packages-48e146876c51711b9edfb9095b39a8577ed0ea8f.tar.xz packages-48e146876c51711b9edfb9095b39a8577ed0ea8f.zip |
Merge branch 'nextcloud-client' into 'master'
user/nextcloud-client: new package
See merge request !79
-rw-r--r-- | user/nextcloud-client/APKBUILD | 45 | ||||
-rw-r--r-- | user/nextcloud-client/no-webengine.patch | 1017 | ||||
-rw-r--r-- | user/nextcloud-client/openssl.patch | 11 |
3 files changed, 1073 insertions, 0 deletions
diff --git a/user/nextcloud-client/APKBUILD b/user/nextcloud-client/APKBUILD new file mode 100644 index 000000000..c842eaa18 --- /dev/null +++ b/user/nextcloud-client/APKBUILD @@ -0,0 +1,45 @@ +# Contributor: Leonardo Arena <rnalrd@alpinelinux.org> +# Maintainer: Max Rees <maxcrees@me.com> +pkgname=nextcloud-client +pkgver=2.5.0_beta2 +_ver="${pkgver%_beta2}-beta2" +pkgrel=0 +pkgdesc="Nextcloud desktop client" +url="https://github.com/nextcloud/desktop" +arch="all" +license="GPL-2.0+ AND LGPL-2.1+ AND Public-Domain AND MIT AND (Custom:Digia-Qt OR LGPL-2.1-only WITH Qt-LGPL-exception-1.1) AND (Custom:Digia-Qt OR LGPL-2.1-only WITH Qt-LGPL-exception-1.1 OR GPL-3.0-only)" +depends="" +makedepends="cmake qt5-qttools-dev qtkeychain-dev zlib-dev + openssl-dev sqlite-dev qt5-qtsvg-dev" +subpackages="$pkgname-dev" +source="$pkgname-$pkgver.tar.gz::https://github.com/nextcloud/desktop/archive/v$_ver.tar.gz + no-webengine.patch + openssl.patch" +builddir="$srcdir/desktop-$_ver" + +build() { + cd "$builddir" + cmake \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_INSTALL_SYSCONFDIR="/etc/$pkgname" \ + -DNO_SHIBBOLETH=1 \ + -DWITH_CRASHREPORTER=bool:OFF \ + -DUNIT_TESTING=bool:ON + make +} + +check() { + cd "$builddir" + make test +} + +package() { + cd "$builddir" + make DESTDIR="$pkgdir" install +} + +sha512sums="ed5ec8c0fd79d3f7f843ef1aefb9b94088b85dacca442388bc9a42e1ddbf1ee90482595135ffaffc85e40d223406964c903949ca1c2161fa0f6a2d6770a77cea nextcloud-client-2.5.0_beta2.tar.gz +6bd83fdee02eabe7ae29fb1a677f62d4a416ec553a0f8c66b7544cafb9201dd7d8b04dc6fb21f447f6c1ece13b06f5d3cba57ac71b211e166607ef15350b3e57 no-webengine.patch +e323a1074f8ac96667a420f076fdfc988e2fd97cdacd05d83ac54b467b567f5adbf635e7c4fb0414af0012b4016cc4c13441cb35ed3976bc970e514e81b65fd4 openssl.patch" diff --git a/user/nextcloud-client/no-webengine.patch b/user/nextcloud-client/no-webengine.patch new file mode 100644 index 000000000..d5beed35c --- /dev/null +++ b/user/nextcloud-client/no-webengine.patch @@ -0,0 +1,1017 @@ +--- desktop-2.5.0-beta1/src/libsync/networkjobs.cpp 2018-08-02 16:32:56.000000000 -0400 ++++ desktop-2.5.0-beta1/src/libsync/networkjobs.cpp 2018-08-15 19:10:43.340595365 -0400 +@@ -922,7 +922,7 @@ + + // WebViewFlow > OAuth > Shib > Basic + if (_account->serverVersionInt() >= Account::makeServerVersion(12, 0, 0)) { +- result = WebViewFlow; ++ result = Basic; + } + + qCInfo(lcDetermineAuthTypeJob) << "Auth type for" << _account->davUrl() << "is" << result; +--- desktop-2.5.0-beta1/src/gui/creds/webflowcredentialsdialog.cpp 2018-08-02 16:32:56.000000000 -0400 ++++ /dev/null 2018-08-15 19:12:03.420596798 -0400 +@@ -1,49 +0,0 @@ +-#include "webflowcredentialsdialog.h" +- +-#include <QVBoxLayout> +-#include <QLabel> +- +-#include "wizard/webview.h" +- +-namespace OCC { +- +-WebFlowCredentialsDialog::WebFlowCredentialsDialog(QWidget *parent) +- : QDialog(parent) +-{ +- _layout = new QVBoxLayout(this); +- +- //QString msg = tr("You have been logged out of %1 as user %2, please login again") +- // .arg(_account->displayName(), _user); +- _infoLabel = new QLabel(); +- _layout->addWidget(_infoLabel); +- +- _webView = new WebView(); +- _layout->addWidget(_webView); +- +- _errorLabel = new QLabel(); +- _errorLabel->hide(); +- _layout->addWidget(_errorLabel); +- +- setLayout(_layout); +- +- connect(_webView, &WebView::urlCatched, this, &WebFlowCredentialsDialog::urlCatched); +-} +- +-void WebFlowCredentialsDialog::setUrl(const QUrl &url) { +- _webView->setUrl(url); +-} +- +-void WebFlowCredentialsDialog::setInfo(const QString &msg) { +- _infoLabel->setText(msg); +-} +- +-void WebFlowCredentialsDialog::setError(const QString &error) { +- if (error.isEmpty()) { +- _errorLabel->hide(); +- } else { +- _errorLabel->setText(error); +- _errorLabel->show(); +- } +-} +- +-} +--- desktop-2.5.0-beta1/src/gui/creds/webflowcredentials.cpp 2018-08-02 16:32:56.000000000 -0400 ++++ /dev/null 2018-08-15 19:12:03.420596798 -0400 +@@ -1,258 +0,0 @@ +-#include "webflowcredentials.h" +- +-#include "creds/httpcredentials.h" +- +-#include <QAuthenticator> +-#include <QNetworkAccessManager> +-#include <QNetworkReply> +-#include <QPointer> +-#include <QTimer> +-#include <keychain.h> +-#include <QDialog> +-#include <QVBoxLayout> +-#include <QLabel> +- +-#include "accessmanager.h" +-#include "account.h" +-#include "theme.h" +-#include "wizard/webview.h" +-#include "webflowcredentialsdialog.h" +- +-using namespace QKeychain; +- +-namespace OCC { +- +-Q_LOGGING_CATEGORY(lcWebFlowCredentials, "sync.credentials.webflow", QtInfoMsg) +- +-WebFlowCredentials::WebFlowCredentials() +- : _ready(false), +- _credentialsValid(false) +-{ +- +-} +- +-WebFlowCredentials::WebFlowCredentials(const QString &user, const QString &password, const QSslCertificate &certificate, const QSslKey &key) +- : _user(user) +- , _password(password) +- , _clientSslKey(key) +- , _clientSslCertificate(certificate) +- , _ready(true) +- , _credentialsValid(true) +-{ +- +-} +- +-QString WebFlowCredentials::authType() const { +- return QString::fromLatin1("webflow"); +-} +- +-QString WebFlowCredentials::user() const { +- return _user; +-} +- +-QString WebFlowCredentials::password() const { +- return _password; +-} +- +-QNetworkAccessManager *WebFlowCredentials::createQNAM() const { +- qCInfo(lcWebFlowCredentials()) << "Get QNAM"; +- AccessManager *qnam = new AccessManager(); +- +- connect(qnam, &AccessManager::authenticationRequired, this, &WebFlowCredentials::slotAuthentication); +- connect(qnam, &AccessManager::finished, this, &WebFlowCredentials::slotFinished); +- +- return qnam; +-} +- +-bool WebFlowCredentials::ready() const { +- return _ready; +-} +- +-void WebFlowCredentials::fetchFromKeychain() { +- _wasFetched = true; +- +- // Make sure we get the user fromt he config file +- fetchUser(); +- +- if (ready()) { +- emit fetched(); +- } else { +- qCInfo(lcWebFlowCredentials()) << "Fetch from keyhchain!"; +- fetchFromKeychainHelper(); +- } +-} +- +-void WebFlowCredentials::askFromUser() { +- _askDialog = new WebFlowCredentialsDialog(); +- +- QUrl url = _account->url(); +- QString path = url.path() + "/index.php/login/flow"; +- url.setPath(path); +- _askDialog->setUrl(url); +- +- QString msg = tr("You have been logged out of %1 as user %2. Please login again") +- .arg(_account->displayName(), _user); +- _askDialog->setInfo(msg); +- +- _askDialog->show(); +- +- connect(_askDialog, &WebFlowCredentialsDialog::urlCatched, this, &WebFlowCredentials::slotAskFromUserCredentialsProvided); +- +- qCWarning(lcWebFlowCredentials()) << "User needs to reauth!"; +-} +- +-void WebFlowCredentials::slotAskFromUserCredentialsProvided(const QString &user, const QString &pass, const QString &host) { +- Q_UNUSED(host); +- +- if (_user != user) { +- qCInfo(lcWebFlowCredentials()) << "Authed with the wrong user!"; +- +- QString msg = tr("Please login with the user: %1") +- .arg(_user); +- _askDialog->setError(msg); +- +- QUrl url = _account->url(); +- QString path = url.path() + "/index.php/login/flow"; +- url.setPath(path); +- _askDialog->setUrl(url); +- +- return; +- } +- +- qCInfo(lcWebFlowCredentials()) << "Obtained a new password"; +- +- _password = pass; +- _ready = true; +- _credentialsValid = true; +- persist(); +- emit asked(); +- +- _askDialog->close(); +- delete _askDialog; +- _askDialog = NULL; +-} +- +- +-bool WebFlowCredentials::stillValid(QNetworkReply *reply) { +- qCWarning(lcWebFlowCredentials()) << "Still valid?"; +- qCWarning(lcWebFlowCredentials()) << reply->error(); +- qCWarning(lcWebFlowCredentials()) << reply->errorString(); +- return (reply->error() != QNetworkReply::AuthenticationRequiredError); +-} +- +-void WebFlowCredentials::persist() { +- if (_user.isEmpty()) { +- // We don't even have a user nothing to see here move along +- return; +- } +- +- _account->setCredentialSetting("user", _user); +- _account->wantsAccountSaved(_account); +- +- //TODO: Add ssl cert and key storing +- WritePasswordJob *job = new WritePasswordJob(Theme::instance()->appName()); +- job->setInsecureFallback(false); +- job->setKey(keychainKey(_account->url().toString(), _user, _account->id())); +- job->setTextData(_password); +- job->start(); +-} +- +-void WebFlowCredentials::invalidateToken() { +- // clear the session cookie. +- _account->clearCookieJar(); +- +- // let QNAM forget about the password +- // This needs to be done later in the event loop because we might be called (directly or +- // indirectly) from QNetworkAccessManagerPrivate::authenticationRequired, which itself +- // is a called from a BlockingQueuedConnection from the Qt HTTP thread. And clearing the +- // cache needs to synchronize again with the HTTP thread. +- QTimer::singleShot(0, _account, &Account::clearQNAMCache); +-} +- +-void WebFlowCredentials::forgetSensitiveData(){ +- _password = QString(); +- _ready = false; +- +- fetchUser(); +- +- const QString kck = keychainKey(_account->url().toString(), _user, _account->id()); +- if (kck.isEmpty()) { +- qCWarning(lcWebFlowCredentials()) << "InvalidateToken: User is empty, bailing out!"; +- return; +- } +- +- DeletePasswordJob *job = new DeletePasswordJob(Theme::instance()->appName()); +- job->setInsecureFallback(false); +- job->setKey(kck); +- job->start(); +- +- invalidateToken(); +-} +- +-void WebFlowCredentials::setAccount(Account *account) { +- AbstractCredentials::setAccount(account); +- if (_user.isEmpty()) { +- fetchUser(); +- } +-} +- +-QString WebFlowCredentials::fetchUser() { +- _user = _account->credentialSetting("user").toString(); +- return _user; +-} +- +-void WebFlowCredentials::slotAuthentication(QNetworkReply *reply, QAuthenticator *authenticator) { +- Q_UNUSED(reply); +- +- if (!_ready) { +- return; +- } +- +- if (_credentialsValid == false) { +- return; +- } +- +- qCWarning(lcWebFlowCredentials()) << "Requires authentication"; +- +- authenticator->setUser(_user); +- authenticator->setPassword(_password); +- _credentialsValid = false; +-} +- +-void WebFlowCredentials::slotFinished(QNetworkReply *reply) { +- qCInfo(lcWebFlowCredentials()) << "request finished"; +- +- if (reply->error() == QNetworkReply::NoError) { +- _credentialsValid = true; +- } +-} +- +-void WebFlowCredentials::fetchFromKeychainHelper() { +- const QString kck = keychainKey( +- _account->url().toString(), +- _user, +- _account->id()); +- +- ReadPasswordJob *job = new ReadPasswordJob(Theme::instance()->appName()); +- job->setInsecureFallback(false); +- job->setKey(kck); +- connect(job, &Job::finished, this, &WebFlowCredentials::slotReadPasswordJobDone); +- job->start(); +-} +- +-void WebFlowCredentials::slotReadPasswordJobDone(Job *incomingJob) { +- QKeychain::ReadPasswordJob *job = static_cast<ReadPasswordJob *>(incomingJob); +- QKeychain::Error error = job->error(); +- +- if (error == QKeychain::NoError) { +- _password = job->textData(); +- _ready = true; +- _credentialsValid = true; +- } else { +- _ready = false; +- } +- +- emit fetched(); +-} +- +-} +--- desktop-2.5.0-beta1/src/gui/creds/webflowcredentialsdialog.h 2018-08-02 16:32:56.000000000 -0400 ++++ /dev/null 2018-08-15 19:12:03.420596798 -0400 +@@ -1,36 +0,0 @@ +-#ifndef WEBFLOWCREDENTIALSDIALOG_H +-#define WEBFLOWCREDENTIALSDIALOG_H +- +-#include <QDialog> +-#include <QUrl> +- +-class QLabel; +-class QVBoxLayout; +- +-namespace OCC { +- +-class WebView; +- +-class WebFlowCredentialsDialog : public QDialog +-{ +- Q_OBJECT +-public: +- WebFlowCredentialsDialog(QWidget *parent = 0); +- +- void setUrl(const QUrl &url); +- void setInfo(const QString &msg); +- void setError(const QString &error); +- +-signals: +- void urlCatched(const QString user, const QString pass, const QString host); +- +-private: +- WebView *_webView; +- QLabel *_errorLabel; +- QLabel *_infoLabel; +- QVBoxLayout *_layout; +-}; +- +-} +- +-#endif // WEBFLOWCREDENTIALSDIALOG_H +--- desktop-2.5.0-beta1/src/gui/creds/credentialsfactory.cpp 2018-08-02 16:32:56.000000000 -0400 ++++ desktop-2.5.0-beta1/src/gui/creds/credentialsfactory.cpp 2018-08-15 19:29:27.240615471 -0400 +@@ -21,7 +21,6 @@ + #ifndef NO_SHIBBOLETH + #include "creds/shibbolethcredentials.h" + #endif +-#include "creds/webflowcredentials.h" + + namespace OCC { + +@@ -40,8 +39,6 @@ + } else if (type == "shibboleth") { + return new ShibbolethCredentials; + #endif +- } else if (type == "webflow") { +- return new WebFlowCredentials; + } else { + qCWarning(lcGuiCredentials, "Unknown credentials type: %s", qPrintable(type)); + return new DummyCredentials; +--- desktop-2.5.0-beta1/src/gui/creds/webflowcredentials.h 2018-08-02 16:32:56.000000000 -0400 ++++ /dev/null 2018-08-15 19:12:03.420596798 -0400 +@@ -1,79 +0,0 @@ +-#ifndef WEBFLOWCREDENTIALS_H +-#define WEBFLOWCREDENTIALS_H +- +-#include <QSslCertificate> +-#include <QSslKey> +- +-#include "creds/abstractcredentials.h" +- +-class QDialog; +-class QLabel; +-class QNetworkReply; +-class QAuthenticator; +- +-namespace QKeychain { +- class Job; +-} +- +-namespace OCC { +- +-class WebFlowCredentialsDialog; +- +-class WebFlowCredentials : public AbstractCredentials +-{ +- Q_OBJECT +-public: +- explicit WebFlowCredentials(); +- WebFlowCredentials(const QString &user, const QString &password, const QSslCertificate &certificate = QSslCertificate(), const QSslKey &key = QSslKey()); +- +- QString authType() const override; +- QString user() const override; +- QString password() const; +- QNetworkAccessManager *createQNAM() const override; +- +- bool ready() const override; +- +- void fetchFromKeychain() override; +- void askFromUser() override; +- +- bool stillValid(QNetworkReply *reply) override; +- void persist() override; +- void invalidateToken() override; +- void forgetSensitiveData() override; +- +- // To fetch the user name as early as possible +- void setAccount(Account *account) override; +- +-private slots: +- void slotAuthentication(QNetworkReply *reply, QAuthenticator *authenticator); +- void slotFinished(QNetworkReply *reply); +- +- void slotReadPasswordJobDone(QKeychain::Job *incomingJob); +- void slotAskFromUserCredentialsProvided(const QString &user, const QString &pass, const QString &host); +- +-private: +- /** Reads data from keychain locations +- * +- * Goes through +- * slotReadClientCertPEMJobDone to +- * slotReadClientCertPEMJobDone to +- * slotReadJobDone +- */ +- void fetchFromKeychainHelper(); +- +- QString fetchUser(); +- +- QString _user; +- QString _password; +- QSslKey _clientSslKey; +- QSslCertificate _clientSslCertificate; +- +- bool _ready; +- bool _credentialsValid; +- +- WebFlowCredentialsDialog *_askDialog; +-}; +- +-} +- +-#endif // WEBFLOWCREDENTIALS_H +--- desktop-2.5.0-beta1/src/gui/CMakeLists.txt 2018-08-02 16:32:56.000000000 -0400 ++++ desktop-2.5.0-beta1/src/gui/CMakeLists.txt 2018-08-15 19:28:53.640614870 -0400 +@@ -41,7 +41,6 @@ + wizard/owncloudoauthcredspage.ui + wizard/owncloudsetupnocredspage.ui + wizard/owncloudwizardresultpage.ui +- wizard/webview.ui + ) + + set(client_SRCS +@@ -104,8 +103,6 @@ + creds/credentialsfactory.cpp + creds/httpcredentialsgui.cpp + creds/oauth.cpp +- creds/webflowcredentials.cpp +- creds/webflowcredentialsdialog.cpp + wizard/postfixlineedit.cpp + wizard/abstractcredswizardpage.cpp + wizard/owncloudadvancedsetuppage.cpp +@@ -116,8 +113,6 @@ + wizard/owncloudwizardcommon.cpp + wizard/owncloudwizard.cpp + wizard/owncloudwizardresultpage.cpp +- wizard/webviewpage.cpp +- wizard/webview.cpp + ) + + IF(NOT NO_SHIBBOLETH) +@@ -290,7 +290,7 @@ + endif() + + add_library(updater STATIC ${updater_SRCS}) +-target_link_libraries(updater ${synclib_NAME} Qt5::Widgets Qt5::Network Qt5::Xml Qt5::WebEngineWidgets) ++target_link_libraries(updater ${synclib_NAME} Qt5::Widgets Qt5::Network Qt5::Xml) + target_include_directories(updater PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + + set_target_properties( ${APPLICATION_EXECUTABLE} PROPERTIES +--- desktop-2.5.0-beta2/src/gui/wizard/webview.cpp 2018-08-24 12:54:42.000000000 +0000 ++++ /dev/null 2018-10-03 06:10:44.230254545 +0000 +@@ -1,162 +0,0 @@ +-#include "webview.h" +- +-#include <QWebEnginePage> +-#include <QWebEngineProfile> +-#include <QWebEngineUrlRequestInterceptor> +-#include <QWebEngineUrlRequestJob> +-#include <QWebEngineUrlSchemeHandler> +-#include <QWebEngineView> +-#include <QDesktopServices> +-#include <QProgressBar> +-#include <QLoggingCategory> +-#include <QLocale> +- +-#include "common/utility.h" +- +-namespace OCC { +- +-Q_LOGGING_CATEGORY(lcWizardWebiew, "gui.wizard.webview", 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); +-}; +- +-class WebEnginePage : public QWebEnginePage { +-public: +- WebEnginePage(QWebEngineProfile *profile, QObject* parent = nullptr); +- QWebEnginePage * createWindow(QWebEnginePage::WebWindowType type) override; +-}; +- +-// We need a separate class here, since we cannot simply return the same WebEnginePage object +-// this leads to a strage segfault somewhere deep inside of the QWebEngine code +-class ExternalWebEnginePage : public QWebEnginePage { +-public: +- ExternalWebEnginePage(QWebEngineProfile *profile, QObject* parent = nullptr); +- bool acceptNavigationRequest(const QUrl &url, QWebEnginePage::NavigationType type, bool isMainFrame) override; +-}; +- +-WebView::WebView(QWidget *parent) +- : QWidget(parent), +- _ui() +-{ +- _ui.setupUi(this); +- +- _webview = new QWebEngineView(this); +- _profile = new QWebEngineProfile(this); +- _page = new WebEnginePage(_profile); +- _interceptor = new WebViewPageUrlRequestInterceptor(this); +- _schemeHandler = new WebViewPageUrlSchemeHandler(this); +- +- const QString userAgent(Utility::userAgentString()); +- _profile->setHttpUserAgent(userAgent); +- QWebEngineProfile::defaultProfile()->setHttpUserAgent(userAgent); +- _profile->setRequestInterceptor(_interceptor); +- _profile->installUrlSchemeHandler("nc", _schemeHandler); +- +- /* +- * Set a proper accept langauge to the language of the client +- * code from: http://code.qt.io/cgit/qt/qtbase.git/tree/src/network/access/qhttpnetworkconnection.cpp +- */ +- { +- QString systemLocale = QLocale::system().name().replace(QChar::fromLatin1('_'),QChar::fromLatin1('-')); +- QString acceptLanguage; +- if (systemLocale == QLatin1String("C")) { +- acceptLanguage = QString::fromLatin1("en,*"); +- } else if (systemLocale.startsWith(QLatin1String("en-"))) { +- acceptLanguage = systemLocale + QLatin1String(",*"); +- } else { +- acceptLanguage = systemLocale + QLatin1String(",en,*"); +- } +- _profile->setHttpAcceptLanguage(acceptLanguage); +- } +- +- _webview->setPage(_page); +- _ui.verticalLayout->addWidget(_webview); +- +- connect(_webview, &QWebEngineView::loadProgress, _ui.progressBar, &QProgressBar::setValue); +- connect(_schemeHandler, &WebViewPageUrlSchemeHandler::urlCatched, this, &WebView::urlCatched); +-} +- +-void WebView::setUrl(const QUrl &url) { +- _page->setUrl(url); +-} +- +-WebViewPageUrlRequestInterceptor::WebViewPageUrlRequestInterceptor(QObject *parent) +- : QWebEngineUrlRequestInterceptor(parent) { +- +-} +- +-void WebViewPageUrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info) { +- 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(lcWizardWebiew()) << "Got user: " << user << ", server: " << server; +- +- emit urlCatched(user, password, server); +-} +- +- +-WebEnginePage::WebEnginePage(QWebEngineProfile *profile, QObject* parent) : QWebEnginePage(profile, parent) { +- +-} +- +-QWebEnginePage * WebEnginePage::createWindow(QWebEnginePage::WebWindowType type) { +- ExternalWebEnginePage *view = new ExternalWebEnginePage(this->profile()); +- return view; +-} +- +-ExternalWebEnginePage::ExternalWebEnginePage(QWebEngineProfile *profile, QObject* parent) : QWebEnginePage(profile, parent) { +- +-} +- +- +-bool ExternalWebEnginePage::acceptNavigationRequest(const QUrl &url, QWebEnginePage::NavigationType type, bool isMainFrame) +-{ +- QDesktopServices::openUrl(url); +- return false; +-} +- +-} +- +-#include "webview.moc" +--- desktop-2.5.0-beta1/src/gui/wizard/webviewpage.cpp 2018-08-02 16:32:56.000000000 -0400 ++++ /dev/null 2018-08-15 19:06:30.250590838 -0400 +@@ -1,73 +0,0 @@ +-#include "webviewpage.h" +- +-#include <QWebEngineUrlRequestJob> +-#include <QProgressBar> +-#include <QVBoxLayout> +- +-#include "owncloudwizard.h" +-#include "creds/webflowcredentials.h" +-#include "webview.h" +-#include "account.h" +- +-namespace OCC { +- +-Q_LOGGING_CATEGORY(lcWizardWebiewPage, "gui.wizard.webviewpage", QtInfoMsg) +- +- +-WebViewPage::WebViewPage(QWidget *parent) +- : AbstractCredentialsWizardPage() +-{ +- _ocWizard = qobject_cast<OwncloudWizard *>(parent); +- +- qCInfo(lcWizardWebiewPage()) << "Time for a webview!"; +- _webView = new WebView(this); +- +- QVBoxLayout *layout = new QVBoxLayout(this); +- layout->addWidget(_webView); +- setLayout(layout); +- +- connect(_webView, &WebView::urlCatched, this, &WebViewPage::urlCatched); +-} +- +-void WebViewPage::initializePage() { +- QString url; +- if (_ocWizard->registration()) { +- url = "https://nextcloud.com/register"; +- } else { +- url = _ocWizard->ocUrl(); +- url += "/index.php/login/flow"; +- } +- qCInfo(lcWizardWebiewPage()) << "Url to auth at: " << url; +- _webView->setUrl(QUrl(url)); +-} +- +-int WebViewPage::nextId() const { +- return WizardCommon::Page_AdvancedSetup; +-} +- +-bool WebViewPage::isComplete() const { +- return false; +-} +- +-AbstractCredentials* WebViewPage::getCredentials() const { +- return new WebFlowCredentials(_user, _pass, _ocWizard->_clientSslCertificate, _ocWizard->_clientSslKey); +-} +- +-void WebViewPage::setConnected() { +- qCInfo(lcWizardWebiewPage()) << "YAY! we are connected!"; +-} +- +-void WebViewPage::urlCatched(QString user, QString pass, QString host) { +- qCInfo(lcWizardWebiewPage()) << "Got user: " << user << ", server: " << host; +- +- _user = user; +- _pass = pass; +- +- AccountPtr account = _ocWizard->account(); +- account->setUrl(host); +- +- qCInfo(lcWizardWebiewPage()) << "URL: " << field("OCUrl").toString(); +- emit connectToOCUrl(host); +-} +- +-} +--- desktop-2.5.0-beta2/src/gui/wizard/webview.h 2018-08-24 12:54:42.000000000 +0000 ++++ /dev/null 2018-10-03 06:11:27.640255322 +0000 +@@ -1,42 +0,0 @@ +-#ifndef WEBVIEW_H +-#define WEBVIEW_H +- +-#include <QUrl> +-#include <QWidget> +- +-#include "ui_webview.h" +- +-class QWebEngineView; +-class QWebEngineProfile; +-class QWebEnginePage; +- +-namespace OCC { +- +-class WebViewPageUrlRequestInterceptor; +-class WebViewPageUrlSchemeHandler; +-class WebEnginePage; +- +-class WebView : public QWidget +-{ +- Q_OBJECT +-public: +- WebView(QWidget *parent = 0); +- void setUrl(const QUrl &url); +- +-signals: +- void urlCatched(const QString user, const QString pass, const QString host); +- +-private: +- Ui_WebView _ui; +- +- QWebEngineView *_webview; +- QWebEngineProfile *_profile; +- WebEnginePage *_page; +- +- WebViewPageUrlRequestInterceptor *_interceptor; +- WebViewPageUrlSchemeHandler *_schemeHandler; +-}; +- +-} +- +-#endif // WEBVIEW_H +--- desktop-2.5.0-beta1/src/gui/wizard/webviewpage.h 2018-08-02 16:32:56.000000000 -0400 ++++ /dev/null 2018-08-15 19:25:56.010611692 -0400 +@@ -1,41 +0,0 @@ +-#ifndef WEBVIEWPAGE_H +-#define WEBVIEWPAGE_H +- +-#include "wizard/abstractcredswizardpage.h" +- +-namespace OCC { +- +-class AbstractCredentials; +-class OwncloudWizard; +-class WebView; +- +-class WebViewPage : public AbstractCredentialsWizardPage +-{ +- Q_OBJECT +-public: +- WebViewPage(QWidget *parent = 0); +- +- void initializePage() Q_DECL_OVERRIDE; +- int nextId() const Q_DECL_OVERRIDE; +- bool isComplete() const; +- +- AbstractCredentials* getCredentials() const; +- void setConnected(); +- +-signals: +- void connectToOCUrl(const QString&); +- +-private slots: +- void urlCatched(QString user, QString pass, QString host); +- +-private: +- OwncloudWizard *_ocWizard; +- WebView *_webView; +- +- QString _user; +- QString _pass; +-}; +- +-} +- +-#endif // WEBVIEWPAGE_H +--- desktop-2.5.0-beta1/src/gui/wizard/owncloudsetuppage.cpp 2018-08-02 16:32:56.000000000 -0400 ++++ desktop-2.5.0-beta1/src/gui/wizard/owncloudsetuppage.cpp 2018-08-15 19:23:33.100609136 -0400 +@@ -161,7 +161,7 @@ + void OwncloudSetupPage::slotGotoProviderList() + { + _ocWizard->setRegistration(true); +- _ocWizard->setAuthType(DetermineAuthTypeJob::AuthType::WebViewFlow); ++ _ocWizard->setAuthType(DetermineAuthTypeJob::AuthType::Basic); + _authTypeKnown = true; + _checking = false; + emit completeChanged(); +@@ -278,8 +278,6 @@ + return WizardCommon::Page_OAuthCreds; + case DetermineAuthTypeJob::Shibboleth: + return WizardCommon::Page_ShibbolethCreds; +- case DetermineAuthTypeJob::WebViewFlow: +- return WizardCommon::Page_WebView; + } + return WizardCommon::Page_HttpCreds; + } +--- desktop-2.5.0-beta1/src/gui/wizard/webview.ui 2018-08-02 16:32:56.000000000 -0400 ++++ /dev/null 2018-08-15 19:24:43.320610392 -0400 +@@ -1,80 +0,0 @@ +-<?xml version="1.0" encoding="UTF-8"?> +-<ui version="4.0"> +- <class>WebView</class> +- <widget class="QWidget" name="WebView"> +- <property name="geometry"> +- <rect> +- <x>0</x> +- <y>0</y> +- <width>800</width> +- <height>700</height> +- </rect> +- </property> +- <property name="sizePolicy"> +- <sizepolicy hsizetype="Minimum" vsizetype="Maximum"> +- <horstretch>0</horstretch> +- <verstretch>0</verstretch> +- </sizepolicy> +- </property> +- <property name="minimumSize"> +- <size> +- <width>800</width> +- <height>650</height> +- </size> +- </property> +- <property name="windowTitle"> +- <string>Form</string> +- </property> +- <layout class="QGridLayout" name="gridLayout"> +- <property name="leftMargin"> +- <number>0</number> +- </property> +- <property name="topMargin"> +- <number>0</number> +- </property> +- <property name="rightMargin"> +- <number>0</number> +- </property> +- <property name="bottomMargin"> +- <number>0</number> +- </property> +- <item row="1" column="0"> +- <layout class="QVBoxLayout" name="verticalLayout"> +- <property name="spacing"> +- <number>0</number> +- </property> +- <item> +- <widget class="QProgressBar" name="progressBar"> +- <property name="maximumSize"> +- <size> +- <width>16777215</width> +- <height>5</height> +- </size> +- </property> +- <property name="styleSheet"> +- <string notr="true">QProgressBar::chunk { +- background-color: rgba(0, 130, 201, 255); +-}</string> +- </property> +- <property name="value"> +- <number>0</number> +- </property> +- <property name="textVisible"> +- <bool>false</bool> +- </property> +- </widget> +- </item> +- <item> +- <layout class="QHBoxLayout" name="resultLayout"> +- <property name="spacing"> +- <number>0</number> +- </property> +- </layout> +- </item> +- </layout> +- </item> +- </layout> +- </widget> +- <resources/> +- <connections/> +-</ui> +--- desktop-2.5.0-beta1/src/gui/wizard/owncloudwizard.h 2018-08-02 16:32:56.000000000 -0400 ++++ desktop-2.5.0-beta1/src/gui/wizard/owncloudwizard.h 2018-08-15 19:22:00.430607478 -0400 +@@ -39,7 +39,6 @@ + class OwncloudWizardResultPage; + class AbstractCredentials; + class AbstractCredentialsWizardPage; +-class WebViewPage; + + /** + * @brief The OwncloudWizard class +@@ -106,7 +105,6 @@ + OwncloudAdvancedSetupPage *_advancedSetupPage; + OwncloudWizardResultPage *_resultPage; + AbstractCredentialsWizardPage *_credentialsPage; +- WebViewPage *_webViewPage; + + QStringList _setupLog; + +--- desktop-2.5.0-beta1/src/gui/wizard/owncloudwizard.cpp 2018-08-02 16:32:56.000000000 -0400 ++++ desktop-2.5.0-beta1/src/gui/wizard/owncloudwizard.cpp 2018-08-15 19:04:35.670588788 -0400 +@@ -26,7 +26,6 @@ + #endif + #include "wizard/owncloudadvancedsetuppage.h" + #include "wizard/owncloudwizardresultpage.h" +-#include "wizard/webviewpage.h" + + #include "QProgressIndicator.h" + +@@ -51,7 +50,6 @@ + , _advancedSetupPage(new OwncloudAdvancedSetupPage) + , _resultPage(new OwncloudWizardResultPage) + , _credentialsPage(0) +- , _webViewPage(new WebViewPage(this)) + , _setupLog() + , _registration(false) + { +@@ -64,7 +62,6 @@ + #endif + setPage(WizardCommon::Page_AdvancedSetup, _advancedSetupPage); + setPage(WizardCommon::Page_Result, _resultPage); +- setPage(WizardCommon::Page_WebView, _webViewPage); + + connect(this, &QDialog::finished, this, &OwncloudWizard::basicSetupFinished); + +@@ -79,7 +76,6 @@ + #ifndef NO_SHIBBOLETH + connect(_shibbolethCredsPage, &OwncloudShibbolethCredsPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl); + #endif +- connect(_webViewPage, &WebViewPage::connectToOCUrl, this, &OwncloudWizard::connectToOCUrl); + connect(_advancedSetupPage, &OwncloudAdvancedSetupPage::createLocalAndRemoteFolders, + this, &OwncloudWizard::createLocalAndRemoteFolders); + connect(this, &QWizard::customButtonClicked, this, &OwncloudWizard::skipFolderConfiguration); +@@ -168,10 +164,6 @@ + break; + #endif + +- case WizardCommon::Page_WebView: +- _webViewPage->setConnected(); +- break; +- + case WizardCommon::Page_AdvancedSetup: + _advancedSetupPage->directoriesCreated(); + break; +@@ -195,8 +187,6 @@ + #endif + if (type == DetermineAuthTypeJob::OAuth) { + _credentialsPage = _browserCredsPage; +- } else if (type == DetermineAuthTypeJob::WebViewFlow) { +- _credentialsPage = _webViewPage; + } else { // try Basic auth even for "Unknown" + _credentialsPage = _httpCredsPage; + } +--- desktop-2.5.0-beta1/src/CMakeLists.txt 2018-08-02 16:32:56.000000000 -0400 ++++ desktop-2.5.0-beta1/src/CMakeLists.txt 2018-08-15 20:59:59.390712646 -0400 +@@ -4,7 +4,7 @@ + + set(synclib_NAME ${APPLICATION_EXECUTABLE}sync) + +-find_package(Qt5 5.6 COMPONENTS Core Network Xml Concurrent WebEngineWidgets WebEngine REQUIRED) ++find_package(Qt5 5.6 COMPONENTS Core Network Xml Concurrent REQUIRED) + if (Qt5Core_VERSION VERSION_LESS 5.9.0) + message(STATUS "For HTTP/2 support, compile with Qt 5.9 or higher.") + endif() diff --git a/user/nextcloud-client/openssl.patch b/user/nextcloud-client/openssl.patch new file mode 100644 index 000000000..426fa0cfb --- /dev/null +++ b/user/nextcloud-client/openssl.patch @@ -0,0 +1,11 @@ +--- desktop-2.5.0-beta2/CMakeLists.txt 2018-08-24 12:54:42.000000000 +0000 ++++ desktop-2.5.0-beta2/CMakeLists.txt 2018-10-03 06:19:15.840263697 +0000 +@@ -183,7 +183,7 @@ if(BUILD_CLIENT) + endif() + find_package(Sphinx) + find_package(PdfLatex) +- find_package(OpenSSL 1.1 REQUIRED ) ++ find_package(OpenSSL 1.0 REQUIRED ) + + find_package(ZLIB REQUIRED) + find_package(GLib2) |