net-libs/signon-ui: 0.15_p20171022 snapshot bump
authorAndreas Sturmlechner <asturm@gentoo.org>
Wed, 19 Dec 2018 11:55:55 +0000 (12:55 +0100)
committerAndreas Sturmlechner <asturm@gentoo.org>
Wed, 19 Dec 2018 11:57:01 +0000 (12:57 +0100)
Using upstream webengine branch +opensuse patches.
See also: https://build.opensuse.org/package/show/KDE:Applications/signon-ui

Package-Manager: Portage-2.3.52, Repoman-2.3.12
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
net-libs/signon-ui/Manifest
net-libs/signon-ui/files/signon-ui-0.15_p20171022-fix-username-field-reading.patch [new file with mode: 0644]
net-libs/signon-ui/files/signon-ui-0.15_p20171022-webengine-cachedir-path.patch [new file with mode: 0644]
net-libs/signon-ui/signon-ui-0.15_p20171022.ebuild [new file with mode: 0644]

index 736087baca320d871ac43614163078ee3f2ba430..4254a24585229039a90250e636dedf590b500f30 100644 (file)
@@ -1 +1,2 @@
 DIST signon-ui-0.15.tar.bz2 60278 BLAKE2B 9674dbfb184249a8a88fbdbe07e6e1c3d070b3e7ca42666a99ae5cdff31ceefe6a45cde533d77234194dc294722999c48ac16dcf6fe0e67a6ce7d53c711edfbc SHA512 02167d48cec3efbd1b0f39f65732742416b46e638a888a74df02bbfeb6deaefdd81549c8cee1a80ecdc8a9f9d0363a6935e8f105bec40bb798af5cc19a74bf03
+DIST signon-ui-0.15_p20171022.tar.bz2 55849 BLAKE2B 6b97b3f673fb4494c7e32dc345f6c4697acdb19305b9459fe954d88983e4666211926921dac70829435706cdd9a41f36d36241a73905b2a795873c2894ffa8d7 SHA512 d0a4ca222de00abf4000905d917799fc6f9e04a2c3f49d0d0882dc4e90fdbcde14da91f355d10f8a3feac03661febd321ea6de1df227fa5a3c404eaefa7c2d60
diff --git a/net-libs/signon-ui/files/signon-ui-0.15_p20171022-fix-username-field-reading.patch b/net-libs/signon-ui/files/signon-ui-0.15_p20171022-fix-username-field-reading.patch
new file mode 100644 (file)
index 0000000..accc8d9
--- /dev/null
@@ -0,0 +1,127 @@
+From 90890e7d27c544e3557bed2f6624614141db0fc4 Mon Sep 17 00:00:00 2001
+From: Fabian Vogt <fabian@ritter-vogt.de>
+Date: Sat, 29 Sep 2018 15:34:43 +0200
+Subject: [PATCH] Reintroduce the username field reading with webkit-options.d
+
+Use WebChannel to spy on the input fields.
+Use the old UserAgent to make sure the selectors match.
+---
+ src/browser-request.cpp | 11 +++++++++++
+ src/qml/WebView.qml     | 36 ++++++++++++++++++++++++++++++++++++
+ 2 files changed, 47 insertions(+)
+
+diff --git a/src/browser-request.cpp b/src/browser-request.cpp
+index 1895d59..e58f302 100644
+--- a/src/browser-request.cpp
++++ b/src/browser-request.cpp
+@@ -31,6 +31,7 @@
+ #include <QStandardPaths>
+ #include <QTimer>
+ #include <SignOn/uisessiondata_priv.h>
++#include <QSettings>
+ using namespace SignOnUi;
+ using namespace SignOnUi::QQuick;
+@@ -43,8 +44,10 @@ class BrowserRequestPrivate: public QObject
+     Q_DECLARE_PUBLIC(BrowserRequest)
+     Q_PROPERTY(QUrl pageComponentUrl READ pageComponentUrl CONSTANT)
+     Q_PROPERTY(QUrl currentUrl READ currentUrl WRITE setCurrentUrl)
++    Q_PROPERTY(QString username MEMBER m_username)
+     Q_PROPERTY(QUrl startUrl READ startUrl CONSTANT)
+     Q_PROPERTY(QUrl finalUrl READ finalUrl CONSTANT)
++    Q_PROPERTY(QString usernameSelector READ usernameSelector CONSTANT)
+ public:
+     BrowserRequestPrivate(BrowserRequest *request);
+@@ -58,6 +61,7 @@ public:
+     QUrl startUrl() const { return m_startUrl; }
+     QUrl finalUrl() const { return m_finalUrl; }
+     QUrl responseUrl() const { return m_responseUrl; }
++    QString usernameSelector() const { return m_settings->value("UsernameField").toString(); }
+ public Q_SLOTS:
+     void cancel();
+@@ -77,6 +81,8 @@ private:
+     QUrl m_startUrl;
+     QUrl m_finalUrl;
+     QUrl m_responseUrl;
++    QString m_username;
++    QSettings *m_settings;
+     QTimer m_failTimer;
+     mutable BrowserRequest *q_ptr;
+ };
+@@ -116,6 +122,9 @@ void BrowserRequestPrivate::start()
+     m_finalUrl = params.value(SSOUI_KEY_FINALURL).toString();
+     m_startUrl = params.value(SSOUI_KEY_OPENURL).toString();
++
++    m_settings = new QSettings("signon-ui/webkit-options.d/" + m_startUrl.host(), QString(), this);
++
+     buildDialog(params);
+     QObject::connect(m_dialog, SIGNAL(finished(int)),
+@@ -231,6 +240,8 @@ void BrowserRequestPrivate::onFinished()
+     QVariantMap reply;
+     QUrl url = m_responseUrl.isEmpty() ? m_currentUrl : m_responseUrl;
+     reply[SSOUI_KEY_URLRESPONSE] = url.toString();
++    if (!m_username.isEmpty())
++        reply[SSOUI_KEY_USERNAME] = m_username;
+     m_dialog->close();
+diff --git a/src/qml/WebView.qml b/src/qml/WebView.qml
+index 33462b8..3af0239 100644
+--- a/src/qml/WebView.qml
++++ b/src/qml/WebView.qml
+@@ -1,4 +1,5 @@
+ import QtQuick 2.0
++import QtWebChannel 1.0
+ import QtWebEngine 1.1
+ WebEngineView {
+@@ -25,8 +26,43 @@ WebEngineView {
+     profile: WebEngineProfile {
+         cachePath: rootDir
+         persistentStoragePath: rootDir
++        // For compatibility with the webkit-options.d values
++        httpUserAgent: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) Safari/537.21"
+     }
++    QtObject {
++        id: commProxy
++        WebChannel.id: "comm"
++        property string username: ""
++        property string selector: signonRequest.usernameSelector
++        onUsernameChanged: signonRequest.username = username
++    }
++
++    WebChannel {
++        id: chan
++        registeredObjects: [commProxy]
++    }
++    webChannel: chan
++
++    WebEngineScript {
++        id: qwebchannel
++        injectionPoint: WebEngineScript.DocumentCreation
++        sourceUrl: "qrc:/qtwebchannel/qwebchannel.js"
++        worldId: WebEngineScript.MainWorld
++    }
++
++    WebEngineScript {
++        id: commScript
++        injectionPoint: WebEngineScript.DocumentReady
++        sourceCode: "new QWebChannel(window.qt.webChannelTransport, function(channel) {" +
++                    "    var elem = document.querySelector(channel.objects.comm.selector);" +
++                    "    elem.addEventListener('keyup', function() { channel.objects.comm.username = elem.value; });" +
++                    "});"
++        worldId: WebEngineScript.MainWorld
++    }
++
++    userScripts: [qwebchannel, commScript]
++
+     ProgressBar {
+         anchors.top: parent.top
+         anchors.left: parent.left
+-- 
+2.18.0
diff --git a/net-libs/signon-ui/files/signon-ui-0.15_p20171022-webengine-cachedir-path.patch b/net-libs/signon-ui/files/signon-ui-0.15_p20171022-webengine-cachedir-path.patch
new file mode 100644 (file)
index 0000000..3a05648
--- /dev/null
@@ -0,0 +1,25 @@
+From e155e6e70ce7a6c52837688b570e8020faac5496 Mon Sep 17 00:00:00 2001
+From: Fabian Vogt <fabian@ritter-vogt.de>
+Date: Sat, 8 Sep 2018 18:58:42 +0200
+Subject: [PATCH] Fix WebEngine cache directory path
+
+Otherwise the URL is treated as a path, which results in a folder "file:" in ~.
+---
+ src/browser-request.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/browser-request.cpp b/src/browser-request.cpp
+index 146bec8..1895d59 100644
+--- a/src/browser-request.cpp
++++ b/src/browser-request.cpp
+@@ -132,7 +132,7 @@ void BrowserRequestPrivate::start()
+     m_dialog->rootContext()->setContextProperty("request", this);
+     m_dialog->rootContext()->setContextProperty("rootDir",
+-                                                QUrl::fromLocalFile(rootDir.absolutePath()));
++                                                rootDir.absolutePath());
+     m_dialog->setSource(webview);
+ }
+-- 
+2.18.0
diff --git a/net-libs/signon-ui/signon-ui-0.15_p20171022.ebuild b/net-libs/signon-ui/signon-ui-0.15_p20171022.ebuild
new file mode 100644 (file)
index 0000000..0be0cf2
--- /dev/null
@@ -0,0 +1,60 @@
+# Copyright 1999-2018 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+COMMIT=4368bb77d9d1abc2978af514225ba4a42c29a646
+inherit qmake-utils
+
+DESCRIPTION="Online accounts signon UI"
+HOMEPAGE="https://gitlab.com/accounts-sso/signon-ui"
+SRC_URI="https://gitlab.com/accounts-sso/${PN}/-/archive/${COMMIT}/${PN}-${COMMIT}.tar.bz2 -> ${P}.tar.bz2"
+
+LICENSE="GPL-2 GPL-3"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="test"
+
+BDEPEND="test? ( dev-qt/qttest:5 )"
+DEPEND="
+       dev-libs/glib:2
+       dev-qt/qtcore:5
+       dev-qt/qtdbus:5
+       dev-qt/qtdeclarative:5
+       dev-qt/qtgui:5
+       dev-qt/qtnetwork:5[ssl]
+       dev-qt/qtwebengine:5
+       dev-qt/qtwidgets:5
+       net-libs/accounts-qt
+       net-libs/signond
+       net-libs/libproxy
+       x11-libs/libnotify
+"
+RDEPEND="${DEPEND}
+       dev-qt/qtwebchannel:5
+"
+
+RESTRICT="test"
+
+PATCHES=(
+       "${FILESDIR}/${P}-webengine-cachedir-path.patch"
+       "${FILESDIR}/${P}-fix-username-field-reading.patch"
+)
+
+S="${WORKDIR}/${PN}-${COMMIT}"
+
+src_prepare() {
+       default
+
+       if ! use test; then
+               sed -i -e '/^SUBDIRS.*/,+1d' tests/tests.pro || die "couldn't disable tests"
+       fi
+}
+
+src_configure() {
+       eqmake5
+}
+
+src_install() {
+       emake INSTALL_ROOT="${D}" install
+}