Merge lp:~alecu/pay-ui/more-cert-info into lp:pay-ui

Proposed by Alejandro J. Cura
Status: Merged
Approved by: dobey
Approved revision: 98
Merged at revision: 90
Proposed branch: lp:~alecu/pay-ui/more-cert-info
Merge into: lp:pay-ui
Diff against target: 617 lines (+404/-5)
15 files modified
app/components/SecurityCertificatePopover.qml (+145/-0)
app/payui.qml (+16/-1)
app/ui/CheckoutPage.qml (+31/-1)
app/ui/UbuntuPurchaseWebkit.qml (+22/-1)
backend/CMakeLists.txt (+2/-0)
backend/modules/payui/backend.cpp (+5/-0)
backend/modules/payui/certificateadapter.cpp (+46/-0)
backend/modules/payui/certificateadapter.h (+51/-0)
backend/modules/payui/network.cpp (+6/-0)
backend/modules/payui/network.h (+2/-0)
backend/modules/payui/oxideconstants.cpp (+19/-0)
backend/modules/payui/oxideconstants.h (+53/-0)
backend/modules/payui/purchase.cpp (+2/-0)
backend/modules/payui/purchase.h (+2/-0)
manifest.json (+2/-2)
To merge this branch: bzr merge lp:~alecu/pay-ui/more-cert-info
Reviewer Review Type Date Requested Status
dobey (community) Approve
PS Jenkins bot (community) continuous-integration Approve
Review via email: mp+243601@code.launchpad.net

Commit message

Show certificate information for https connections

To post a comment you must log in.
lp:~alecu/pay-ui/more-cert-info updated
97. By Alejandro J. Cura

Remove spurious debug messages

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
dobey (dobey) wrote :

Can you revert the changes to manifest.json? They are useful for testing, but as new strings are being added here, we'll need to notify translators and wait a few days to collect translations, before we should upload a new version to the store, I think. Or, you could change the i18n.tr() calls in this component, to i18n.dtr("webbrowser-app", "...") so that the string is loaded from the webbrowser-app translations, as it should already be translated there, and that package is a .deb, so it is in the langpacks, and we can actually do this (at least until the browser becomes a click package, but hopefully this will all be part of the Ubuntu.Web component or similar in the SDK by that point).

I'm also not particularly fond of the string used there, or the information provided in the popover, but alas, it does match what the browser would show.

Do the new .cpp/.h files come from webbrowser-app as well, or is it just the popover QML that came from there?

review: Needs Information
Revision history for this message
Alejandro J. Cura (alecu) wrote :

On Thu, Dec 4, 2014 at 12:46 PM, Rodney Dawes
<email address hidden> wrote:
> Review: Needs Information
>
> Can you revert the changes to manifest.json? They are useful for testing, but as new strings are being added here, we'll need to notify translators and wait a few days to collect translations, before we should upload a new version to the store, I think. Or, you could change the i18n.tr() calls in this component, to i18n.dtr("webbrowser-app", "...") so that the string is loaded from the webbrowser-app translations, as it should already be translated there, and that package is a .deb, so it is in the langpacks, and we can actually do this (at least until the browser becomes a click package, but hopefully this will all be part of the Ubuntu.Web component or similar in the SDK by that point).

As suggested, I'm changing the calls to i18n.dtr(), so I'm keeping the
version change in the manifest.

> I'm also not particularly fond of the string used there, or the information provided in the popover, but alas, it does match what the browser would show.

Yes, the whole popup is taken from the webbrowser-app to keep it as
similar as possible.

> Do the new .cpp/.h files come from webbrowser-app as well, or is it just the popover QML that came from there?

Those files are new, and are there to mimic the constants returned by
the Oxide component, and to keep SecurityCertificatePopover.qml as
close as possible to the original file, so it can be easily replaced
if changed.
Btw, the PrincipalAttr enum in Oxide matches the numeric values of
QSslCertificate::SubjectInfo, so this may need some refactoring if
those values ever change, but it sounds unlikely.

lp:~alecu/pay-ui/more-cert-info updated
98. By Alejandro J. Cura

Use the translations from webbrowser-app

Revision history for this message
dobey (dobey) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'app/components/SecurityCertificatePopover.qml'
2--- app/components/SecurityCertificatePopover.qml 1970-01-01 00:00:00 +0000
3+++ app/components/SecurityCertificatePopover.qml 2014-12-04 20:37:26 +0000
4@@ -0,0 +1,145 @@
5+/*
6+ * Copyright 2014 Canonical Ltd.
7+ *
8+ * This file is part of webbrowser-app.
9+ *
10+ * webbrowser-app is free software; you can redistribute it and/or modify
11+ * it under the terms of the GNU General Public License as published by
12+ * the Free Software Foundation; version 3.
13+ *
14+ * webbrowser-app is distributed in the hope that it will be useful,
15+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17+ * GNU General Public License for more details.
18+ *
19+ * You should have received a copy of the GNU General Public License
20+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
21+ */
22+
23+import QtQuick 2.0
24+import Ubuntu.Components 1.1
25+import Ubuntu.Components.ListItems 1.0
26+import Ubuntu.Components.Popups 1.0
27+import payui 0.1 as Oxide
28+
29+Popover {
30+ id: certificatePopover
31+
32+ property var securityStatus
33+
34+ Column {
35+ width: parent.width - units.gu(4)
36+ anchors.horizontalCenter: parent.horizontalCenter
37+ spacing: units.gu(0.5)
38+
39+ Item {
40+ height: units.gu(1.5)
41+ width: parent.width
42+ }
43+
44+ Column {
45+ width: parent.width
46+ visible: securityStatus.securityLevel == Oxide.SecurityStatus.SecurityLevelWarning
47+ spacing: units.gu(0.5)
48+
49+ Row {
50+ width: parent.width
51+ spacing: units.gu(0.5)
52+
53+ Icon {
54+ name: "security-alert"
55+ height: units.gu(2)
56+ width: height
57+ }
58+
59+ Label {
60+ width: parent.width
61+ wrapMode: Text.WordWrap
62+ text: i18n.dtr("webbrowser-app", "This site has insecure content")
63+ fontSize: "x-small"
64+ }
65+ }
66+
67+ ThinDivider {
68+ width: parent.width
69+ anchors.leftMargin: 0
70+ anchors.rightMargin: 0
71+ }
72+ }
73+
74+ Label {
75+ width: parent.width
76+ wrapMode: Text.WordWrap
77+ text: i18n.dtr("webbrowser-app", "You are connected to")
78+ fontSize: "x-small"
79+ }
80+
81+ Label {
82+ width: parent.width
83+ wrapMode: Text.WordWrap
84+ text: securityStatus.certificate.subjectDisplayName
85+ fontSize: "x-small"
86+ }
87+
88+ ThinDivider {
89+ width: parent.width
90+ anchors.leftMargin: 0
91+ anchors.rightMargin: 0
92+ visible: orgName.visible || localityName.visible || stateName.visible || countryName.visible
93+ }
94+
95+ Label {
96+ width: parent.width
97+ wrapMode: Text.WordWrap
98+ visible: orgName.visible
99+ text: i18n.dtr("webbrowser-app", "Which is run by")
100+ fontSize: "x-small"
101+ }
102+
103+ Label {
104+ id: orgName
105+ width: parent.width
106+ wrapMode: Text.WordWrap
107+ visible: text.length > 0
108+ text: securityStatus.certificate.getSubjectInfo(Oxide.SslCertificate.PrincipalAttrOrganizationName).join(", ")
109+ fontSize: "x-small"
110+ }
111+
112+ Label {
113+ id: localityName
114+ width: parent.width
115+ wrapMode: Text.WordWrap
116+ visible: text.length > 0
117+ text: securityStatus.certificate.getSubjectInfo(Oxide.SslCertificate.PrincipalAttrLocalityName).join(", ")
118+ fontSize: "x-small"
119+ }
120+
121+ Label {
122+ id: stateName
123+ width: parent.width
124+ wrapMode: Text.WordWrap
125+ visible: text.length > 0
126+ text: securityStatus.certificate.getSubjectInfo(Oxide.SslCertificate.PrincipalAttrStateOrProvinceName).join(", ")
127+ fontSize: "x-small"
128+ }
129+
130+ Label {
131+ id: countryName
132+ width: parent.width
133+ wrapMode: Text.WordWrap
134+ visible: text.length > 0
135+ text: securityStatus.certificate.getSubjectInfo(Oxide.SslCertificate.PrincipalAttrCountryName).join(", ")
136+ fontSize: "x-small"
137+ }
138+
139+ Item {
140+ height: units.gu(1.5)
141+ width: parent.width
142+ }
143+ }
144+
145+ MouseArea {
146+ anchors.fill: parent
147+ onClicked: PopupUtils.close(certificatePopover)
148+ }
149+}
150
151=== modified file 'app/payui.qml'
152--- app/payui.qml 2014-11-20 20:14:46 +0000
153+++ app/payui.qml 2014-12-04 20:37:26 +0000
154@@ -16,7 +16,7 @@
155
156 import QtQuick 2.0
157 import QtQuick.LocalStorage 2.0
158-import Ubuntu.Components 0.1
159+import Ubuntu.Components 1.1
160 import Ubuntu.Components.Popups 0.1
161 import Ubuntu.OnlineAccounts 0.1
162 import Ubuntu.OnlineAccounts.Client 0.1
163@@ -202,6 +202,10 @@
164 mainView.hideLoading();
165 checkout.showTwoFactor();
166 }
167+
168+ onCertificateFound: {
169+ checkout.certificate = cert
170+ }
171 }
172
173 function showLoading() {
174@@ -438,4 +442,15 @@
175 }
176 }
177 }
178+
179+ Rectangle {
180+ id: lockIconPlace
181+ width: units.gu(7)
182+ height: units.gu(7)
183+ anchors {
184+ right: parent.right
185+ top: parent.top
186+ }
187+ visible: false
188+ }
189 }
190
191=== modified file 'app/ui/CheckoutPage.qml'
192--- app/ui/CheckoutPage.qml 2014-11-20 20:14:46 +0000
193+++ app/ui/CheckoutPage.qml 2014-12-04 20:37:26 +0000
194@@ -15,8 +15,11 @@
195 */
196
197 import QtQuick 2.0
198-import Ubuntu.Components 0.1
199+import Ubuntu.Components 1.1
200 import Ubuntu.Components.ListItems 0.1 as ListItem
201+import Ubuntu.Components.Popups 0.1
202+import payui 0.1 as Oxide
203+import "../components"
204
205 Page {
206 id: pageCheckout
207@@ -35,6 +38,8 @@
208 property alias model: selector.model
209 property alias password: passwordField.text
210 property alias otp: twoFactorField.text
211+ property alias certificate: otherSecurityStatus.certificate
212+ property alias securityStatus: otherSecurityStatus
213
214 property bool hasPayments: false
215 property bool hasPreferredPayment: true
216@@ -73,6 +78,31 @@
217 }
218 }
219
220+ QtObject {
221+ id: otherSecurityStatus
222+ property int securityLevel: certificate == null ? Oxide.SecurityStatus.SecurityLevelNone : Oxide.SecurityStatus.SecurityLevelSecure
223+ property var certificate: null
224+ }
225+
226+ head.actions:[
227+ Action {
228+ id: lockAction
229+ iconName: pageCheckout.securityStatus.securityLevel == Oxide.SecurityStatus.SecurityLevelSecure ? "lock" : "security-alert"
230+ onTriggered: {
231+ PopupUtils.open(popoverComponent, lockIconPlace, {"securityStatus": pageCheckout.securityStatus})
232+ }
233+ }
234+ ]
235+
236+ Component {
237+ id: popoverComponent
238+
239+ SecurityCertificatePopover {
240+ id: certPopover
241+ securityStatus: null
242+ }
243+ }
244+
245 Flickable {
246 id: checkoutFlickable
247 anchors {
248
249=== modified file 'app/ui/UbuntuPurchaseWebkit.qml'
250--- app/ui/UbuntuPurchaseWebkit.qml 2014-10-07 21:45:43 +0000
251+++ app/ui/UbuntuPurchaseWebkit.qml 2014-12-04 20:37:26 +0000
252@@ -15,9 +15,10 @@
253 */
254
255 import QtQuick 2.0
256-import Ubuntu.Components 0.1
257+import Ubuntu.Components 1.1
258 import Ubuntu.Components.Popups 0.1
259 import Ubuntu.Web 0.2
260+import "../components"
261
262
263 Page {
264@@ -31,6 +32,7 @@
265
266 property int keyboardSize: Qt.inputMethod.visible ? Qt.inputMethod.keyboardRectangle.height : 0
267 property alias url: webView.url
268+ property var securityStatus: webView.securityStatus
269
270 function parseQuery(url) {
271 var argsParsed = {};
272@@ -53,6 +55,25 @@
273 return argsParsed;
274 }
275
276+ head.actions:[
277+ Action {
278+ id: lockAction
279+ iconName: pageWebkit.securityStatus.securityLevel ? "lock" : "security-alert"
280+ onTriggered: {
281+ PopupUtils.open(popoverComponent, lockIconPlace, {"securityStatus": pageWebkit.securityStatus})
282+ }
283+ }
284+ ]
285+
286+ Component {
287+ id: popoverComponent
288+
289+ SecurityCertificatePopover {
290+ id: certPopover
291+ securityStatus: null
292+ }
293+ }
294+
295 WebView {
296 id: webView
297 objectName: "webView"
298
299=== modified file 'backend/CMakeLists.txt'
300--- backend/CMakeLists.txt 2014-06-25 20:58:29 +0000
301+++ backend/CMakeLists.txt 2014-12-04 20:37:26 +0000
302@@ -17,6 +17,8 @@
303 modules/payui/network.cpp
304 modules/payui/pay_info.cpp
305 modules/payui/credentials_service.cpp
306+ modules/payui/certificateadapter.cpp
307+ modules/payui/oxideconstants.cpp
308 )
309 set(PAYUI_BACKEND payuibackend)
310
311
312=== modified file 'backend/modules/payui/backend.cpp'
313--- backend/modules/payui/backend.cpp 2014-06-23 18:20:45 +0000
314+++ backend/modules/payui/backend.cpp 2014-12-04 20:37:26 +0000
315@@ -2,6 +2,8 @@
316 #include <QtQml/QQmlContext>
317 #include "backend.h"
318 #include "purchase.h"
319+#include "certificateadapter.h"
320+#include "oxideconstants.h"
321 #include "pay_info.h"
322
323 void BackendPlugin::registerTypes(const char *uri)
324@@ -10,6 +12,9 @@
325
326 qmlRegisterType<UbuntuPurchase::Purchase>(uri, 0, 1, "Purchase");
327 qmlRegisterType<UbuntuPurchase::PayInfo>(uri, 0, 1, "PayInfo");
328+ qmlRegisterType<CertificateAdapter>(uri, 0, 1, "CertificateAdapter");
329+ qmlRegisterType<SecurityStatus>(uri, 0, 1, "SecurityStatus");
330+ qmlRegisterType<SslCertificate>(uri, 0, 1, "SslCertificate");
331 }
332
333 void BackendPlugin::initializeEngine(QQmlEngine *engine, const char *uri)
334
335=== added file 'backend/modules/payui/certificateadapter.cpp'
336--- backend/modules/payui/certificateadapter.cpp 1970-01-01 00:00:00 +0000
337+++ backend/modules/payui/certificateadapter.cpp 2014-12-04 20:37:26 +0000
338@@ -0,0 +1,46 @@
339+/*
340+ * Copyright 2014 Canonical Ltd.
341+ *
342+ * This program is free software; you can redistribute it and/or
343+ * modify it under the terms of version 3 of the GNU Lesser General Public
344+ * License as published by the Free Software Foundation.
345+ *
346+ * This program is distributed in the hope that it will be useful,
347+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
348+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
349+ * General Public License for more details.
350+ *
351+ * You should have received a copy of the GNU Lesser General Public
352+ * License along with this library; if not, write to the
353+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
354+ * Boston, MA 02110-1301, USA.
355+ */
356+
357+#include <QStringList>
358+#include "certificateadapter.h"
359+
360+CertificateAdapter::CertificateAdapter()
361+{
362+}
363+
364+CertificateAdapter::CertificateAdapter(const CertificateAdapter &other)
365+{
366+ m_cert = other.m_cert;
367+}
368+
369+CertificateAdapter::~CertificateAdapter()
370+{
371+}
372+
373+CertificateAdapter::CertificateAdapter(QSslCertificate cert, QObject *parent) :
374+ QObject(parent), m_cert(cert)
375+{
376+}
377+
378+QString CertificateAdapter::subjectDisplayName() {
379+ return m_cert.subjectInfo(QSslCertificate::CommonName).join(", ");
380+}
381+
382+QStringList CertificateAdapter::getSubjectInfo(int subject) {
383+ return m_cert.subjectInfo((QSslCertificate::SubjectInfo)subject);
384+}
385
386=== added file 'backend/modules/payui/certificateadapter.h'
387--- backend/modules/payui/certificateadapter.h 1970-01-01 00:00:00 +0000
388+++ backend/modules/payui/certificateadapter.h 2014-12-04 20:37:26 +0000
389@@ -0,0 +1,51 @@
390+/*
391+ * Copyright 2014 Canonical Ltd.
392+ *
393+ * This program is free software; you can redistribute it and/or
394+ * modify it under the terms of version 3 of the GNU Lesser General Public
395+ * License as published by the Free Software Foundation.
396+ *
397+ * This program is distributed in the hope that it will be useful,
398+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
399+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
400+ * General Public License for more details.
401+ *
402+ * You should have received a copy of the GNU Lesser General Public
403+ * License along with this library; if not, write to the
404+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
405+ * Boston, MA 02110-1301, USA.
406+ */
407+
408+#ifndef CERTIFICATEADAPTER_H
409+#define CERTIFICATEADAPTER_H
410+
411+#include <QObject>
412+#include <QSslCertificate>
413+#include <QMetaType>
414+
415+/*
416+ * Adapt a QSSlCertificate to the interface that oxide uses for certs.
417+ */
418+class CertificateAdapter : public QObject
419+{
420+ Q_OBJECT
421+ Q_PROPERTY(QString subjectDisplayName READ subjectDisplayName)
422+public:
423+ CertificateAdapter(QSslCertificate cert, QObject *parent = 0);
424+ CertificateAdapter(const CertificateAdapter& other);
425+ CertificateAdapter();
426+ ~CertificateAdapter();
427+
428+signals:
429+
430+public slots:
431+ QStringList getSubjectInfo(int subject);
432+
433+protected:
434+ QString subjectDisplayName();
435+ QSslCertificate m_cert;
436+};
437+
438+Q_DECLARE_METATYPE(CertificateAdapter);
439+
440+#endif // CERTIFICATEADAPTER_H
441
442=== modified file 'backend/modules/payui/network.cpp'
443--- backend/modules/payui/network.cpp 2014-11-18 14:54:05 +0000
444+++ backend/modules/payui/network.cpp 2014-12-04 20:37:26 +0000
445@@ -31,6 +31,8 @@
446 #include <QDBusReply>
447 #include <QDBusConnection>
448
449+#include "certificateadapter.h"
450+
451 #define URL_PACKAGE_INFO "https://search.apps.ubuntu.com/api/v1/package/"
452 #define ACCOUNT_CREDS_URL "https://login.ubuntu.com/api/v2/tokens/oauth"
453
454@@ -180,10 +182,14 @@
455 }
456 }
457 }
458+ qDebug() << "Emit signal paymentTypesObtained";
459 Q_EMIT paymentTypesObtained(listPays);
460 if (m_preferred == nullptr) {
461 Q_EMIT noPreferredPaymentMethod();
462 }
463+ qDebug() << "Emit signal certificateFound";
464+ CertificateAdapter* cert = new CertificateAdapter(reply->sslConfiguration().peerCertificate());
465+ Q_EMIT certificateFound(cert);
466 } else if (state->operation.contains(BUY_ITEM) && document.isObject()) {
467 qDebug() << "Reply state:" << BUY_ITEM;
468 QJsonObject object = document.object();
469
470=== modified file 'backend/modules/payui/network.h'
471--- backend/modules/payui/network.h 2014-11-04 19:39:34 +0000
472+++ backend/modules/payui/network.h 2014-12-04 20:37:26 +0000
473@@ -29,6 +29,7 @@
474 #include <token.h>
475 #include "credentials_service.h"
476
477+#include "certificateadapter.h"
478 #include "pay_info.h"
479
480 using namespace UbuntuOne;
481@@ -94,6 +95,7 @@
482 void loginError(const QString& message);
483 void twoFactorAuthRequired();
484 void itemNotPurchased();
485+ void certificateFound(QObject* cert);
486
487 private Q_SLOTS:
488 void onReply(QNetworkReply*);
489
490=== added file 'backend/modules/payui/oxideconstants.cpp'
491--- backend/modules/payui/oxideconstants.cpp 1970-01-01 00:00:00 +0000
492+++ backend/modules/payui/oxideconstants.cpp 2014-12-04 20:37:26 +0000
493@@ -0,0 +1,19 @@
494+/*
495+ * Copyright 2014 Canonical Ltd.
496+ *
497+ * This program is free software; you can redistribute it and/or
498+ * modify it under the terms of version 3 of the GNU Lesser General Public
499+ * License as published by the Free Software Foundation.
500+ *
501+ * This program is distributed in the hope that it will be useful,
502+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
503+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
504+ * General Public License for more details.
505+ *
506+ * You should have received a copy of the GNU Lesser General Public
507+ * License along with this library; if not, write to the
508+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
509+ * Boston, MA 02110-1301, USA.
510+ */
511+
512+#include "oxideconstants.h"
513
514=== added file 'backend/modules/payui/oxideconstants.h'
515--- backend/modules/payui/oxideconstants.h 1970-01-01 00:00:00 +0000
516+++ backend/modules/payui/oxideconstants.h 2014-12-04 20:37:26 +0000
517@@ -0,0 +1,53 @@
518+/*
519+ * Copyright 2014 Canonical Ltd.
520+ *
521+ * This program is free software; you can redistribute it and/or
522+ * modify it under the terms of version 3 of the GNU Lesser General Public
523+ * License as published by the Free Software Foundation.
524+ *
525+ * This program is distributed in the hope that it will be useful,
526+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
527+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
528+ * General Public License for more details.
529+ *
530+ * You should have received a copy of the GNU Lesser General Public
531+ * License along with this library; if not, write to the
532+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
533+ * Boston, MA 02110-1301, USA.
534+ */
535+
536+#ifndef OXIDECONSTANTS_H
537+#define OXIDECONSTANTS_H
538+
539+#include <QObject>
540+
541+class SecurityStatus : public QObject
542+{
543+ Q_OBJECT
544+ Q_ENUMS(SecurityLevel)
545+public:
546+ enum SecurityLevel {
547+ SecurityLevelNone,
548+ SecurityLevelSecure,
549+ SecurityLevelSecureEV,
550+ SecurityLevelWarning,
551+ SecurityLevelError
552+ };
553+};
554+
555+class SslCertificate : public QObject
556+{
557+ Q_OBJECT
558+ Q_ENUMS(PrincipalAttr)
559+public:
560+ enum PrincipalAttr {
561+ PrincipalAttrOrganizationName,
562+ PrincipalAttrCommonName,
563+ PrincipalAttrLocalityName,
564+ PrincipalAttrOrganizationUnitName,
565+ PrincipalAttrCountryName,
566+ PrincipalAttrStateOrProvinceName
567+ };
568+};
569+
570+#endif // OXIDECONSTANTS_H
571
572=== modified file 'backend/modules/payui/purchase.cpp'
573--- backend/modules/payui/purchase.cpp 2014-10-01 22:02:57 +0000
574+++ backend/modules/payui/purchase.cpp 2014-12-04 20:37:26 +0000
575@@ -40,6 +40,8 @@
576 this, &Purchase::twoFactorAuthRequired);
577 connect(&m_network, &Network::itemNotPurchased,
578 this, &Purchase::itemNotPurchased);
579+ connect(&m_network, &Network::certificateFound,
580+ this, &Purchase::certificateFound);
581
582 QCoreApplication* instance = QCoreApplication::instance();
583 Logger::setupLogging();
584
585=== modified file 'backend/modules/payui/purchase.h'
586--- backend/modules/payui/purchase.h 2014-10-01 22:02:57 +0000
587+++ backend/modules/payui/purchase.h 2014-12-04 20:37:26 +0000
588@@ -6,6 +6,7 @@
589 #include <QString>
590
591 #include "network.h"
592+#include "certificateadapter.h"
593
594 namespace UbuntuPurchase {
595
596@@ -45,6 +46,7 @@
597 void loginError(const QString& message);
598 void twoFactorAuthRequired();
599 void itemNotPurchased();
600+ void certificateFound(QObject* cert);
601
602 private:
603 Network m_network;
604
605=== modified file 'manifest.json'
606--- manifest.json 2014-10-16 18:49:09 +0000
607+++ manifest.json 2014-12-04 20:37:26 +0000
608@@ -11,6 +11,6 @@
609 "pay-ui": "payui_payui.desktop"
610 }
611 },
612- "version": "0.4.2",
613+ "version": "0.4.3",
614 "maintainer": "Ubuntu Appstore Developers <ubuntu-appstore-developers@lists.launchpad.net>"
615-}
616+}
617\ No newline at end of file

Subscribers

People subscribed via source and target branches