Merge lp:~jamesh/storage-provider-webdav/owncloud-integration into lp:storage-provider-webdav/devel

Proposed by James Henstridge
Status: Merged
Approved by: Michi Henning
Approved revision: 16
Merged at revision: 11
Proposed branch: lp:~jamesh/storage-provider-webdav/owncloud-integration
Merge into: lp:storage-provider-webdav/devel
Diff against target: 246 lines (+78/-22)
13 files modified
CMakeLists.txt (+1/-0)
data/CMakeLists.txt (+17/-0)
data/com.canonical.StorageFramework.Provider.OwnCloud.service.in (+3/-0)
data/storage-provider-owncloud.application (+12/-0)
data/storage-provider-owncloud.desktop (+5/-0)
data/storage-provider-owncloud.service (+8/-0)
debian/control (+3/-3)
src/CMakeLists.txt (+5/-0)
src/OwncloudProvider.cpp (+7/-3)
src/main.cpp (+1/-1)
tests/davprovider/davprovider_test.cpp (+3/-2)
tests/utils/ProviderEnvironment.cpp (+2/-0)
tests/utils/fake-online-accounts-daemon.py (+11/-13)
To merge this branch: bzr merge lp:~jamesh/storage-provider-webdav/owncloud-integration
Reviewer Review Type Date Requested Status
Michi Henning (community) Approve
unity-api-1-bot continuous-integration Approve
Review via email: mp+307011@code.launchpad.net

Commit message

Add OnlineAccounts configuration for OwnCloud provider, and actually install it in the binary package.

Description of the change

Add online-accounts configuration files, and make the project install something in its binary package.

This is still hard coding the OwnCloud provider URI, which can change once this branch lands:

https://code.launchpad.net/~jamesh/storage-framework/provider-hostname/+merge/307004

Also, the real online-accounts-service seems to be messing up the way it returns username/password style credentials. This is being tracked here:

https://bugs.launchpad.net/ubuntu/+source/online-accounts-api/+bug/1628473

We might be able to work around this bug in the short term though.

To post a comment you must log in.
Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

PASSED: Continuous integration, rev:14
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/7/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build/785
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/791
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/599
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/599/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/599
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/599/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/599
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/599/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/599
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/599/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/599
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/599/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/599
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/599/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/599
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/599/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/599
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/599/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/599
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/599/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/7/rebuild

review: Approve (continuous-integration)
15. By James Henstridge

Put provider in "net" section of archive.

Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

PASSED: Continuous integration, rev:15
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/8/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build/787
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/793
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/601
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/601/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/601
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/601/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/601
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/601/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/601
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/601/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/601
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/601/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/601
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/601/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/601
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/601/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/601
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/601/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/601
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/601/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/8/rebuild

review: Approve (continuous-integration)
16. By James Henstridge

Add #include to work with provider-hostname branch of storage-framework.

Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

PASSED: Continuous integration, rev:16
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/9/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build/789
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/795
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/603
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/603/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/603
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/603/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/603
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/603/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/603
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/603/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/603
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/603/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/603
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/603/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/603
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/603/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/603
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/603/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/603
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/603/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-provider-webdav-ci/9/rebuild

review: Approve (continuous-integration)
Revision history for this message
Michi Henning (michihenning) wrote :

Sweet!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'CMakeLists.txt'
2--- CMakeLists.txt 2016-09-27 07:08:19 +0000
3+++ CMakeLists.txt 2016-09-28 15:26:45 +0000
4@@ -22,6 +22,7 @@
5 add_definitions(-DQT_NO_KEYWORDS)
6
7 add_subdirectory(src)
8+add_subdirectory(data)
9 add_subdirectory(tests)
10
11 enable_coverage_report(
12
13=== added directory 'data'
14=== added file 'data/CMakeLists.txt'
15--- data/CMakeLists.txt 1970-01-01 00:00:00 +0000
16+++ data/CMakeLists.txt 2016-09-28 15:26:45 +0000
17@@ -0,0 +1,17 @@
18+# OnlineAccounts support files
19+install(FILES storage-provider-owncloud.service
20+ DESTINATION "${CMAKE_INSTALL_DATADIR}/accounts/services")
21+install(FILES storage-provider-owncloud.application
22+ DESTINATION "${CMAKE_INSTALL_DATADIR}/accounts/applications")
23+install(FILES storage-provider-owncloud.desktop
24+ DESTINATION "${CMAKE_INSTALL_DATADIR}/applications")
25+
26+# D-Bus serice activation
27+configure_file(
28+ com.canonical.StorageFramework.Provider.OwnCloud.service.in
29+ com.canonical.StorageFramework.Provider.OwnCloud.service
30+)
31+install(
32+ FILES ${CMAKE_CURRENT_BINARY_DIR}/com.canonical.StorageFramework.Provider.OwnCloud.service
33+ DESTINATION ${CMAKE_INSTALL_DATADIR}/dbus-1/services
34+)
35
36=== added file 'data/com.canonical.StorageFramework.Provider.OwnCloud.service.in'
37--- data/com.canonical.StorageFramework.Provider.OwnCloud.service.in 1970-01-01 00:00:00 +0000
38+++ data/com.canonical.StorageFramework.Provider.OwnCloud.service.in 2016-09-28 15:26:45 +0000
39@@ -0,0 +1,3 @@
40+[D-BUS Service]
41+Name=com.canonical.StorageFramework.Provider.OwnCloud
42+Exec=@CMAKE_INSTALL_FULL_LIBDIR@/@PROJECT_NAME@/storage-provider-owncloud
43
44=== added file 'data/storage-provider-owncloud.application'
45--- data/storage-provider-owncloud.application 1970-01-01 00:00:00 +0000
46+++ data/storage-provider-owncloud.application 2016-09-28 15:26:45 +0000
47@@ -0,0 +1,12 @@
48+<?xml version="1.0" encoding="UTF-8" ?>
49+<!-- -*- mode: nxml -*- -->
50+<application id="storage-provider-owncloud">
51+ <description>OwnCloud storage provider</description>
52+ <desktop-entry>storage-provider-owncloud.desktop</desktop-entry>
53+
54+ <services>
55+ <service id="storage-provider-owncloud">
56+ <description>Access your Owncloud documents</description>
57+ </service>
58+ </services>
59+</application>
60
61=== added file 'data/storage-provider-owncloud.desktop'
62--- data/storage-provider-owncloud.desktop 1970-01-01 00:00:00 +0000
63+++ data/storage-provider-owncloud.desktop 2016-09-28 15:26:45 +0000
64@@ -0,0 +1,5 @@
65+[Desktop Entry]
66+Type=Application
67+NoDisplay=true
68+Name=OwnCloud storage provider
69+Icon=online-accounts-owncloud
70
71=== added file 'data/storage-provider-owncloud.service'
72--- data/storage-provider-owncloud.service 1970-01-01 00:00:00 +0000
73+++ data/storage-provider-owncloud.service 2016-09-28 15:26:45 +0000
74@@ -0,0 +1,8 @@
75+<?xml version="1.0" encoding="UTF-8" ?>
76+<!-- -*- mode: nxml -*- -->
77+<service id="storage-provider-owncloud">
78+ <type>storage-provider</type>
79+ <name>OwnCloud</name>
80+ <icon>online-accounts-owncloud</icon>
81+ <provider>owncloud</provider>
82+</service>
83
84=== modified file 'debian/control'
85--- debian/control 2016-09-27 07:08:19 +0000
86+++ debian/control 2016-09-28 15:26:45 +0000
87@@ -1,5 +1,5 @@
88 Source: storage-provider-webdav
89-Section: ???
90+Section: net
91 Priority: optional
92 Maintainer: Ubuntu Core Developers <ubuntu-devel-discuss@lists.ubuntu.com>
93 Standards-Version: 3.9.6
94@@ -31,8 +31,8 @@
95 Architecture: any
96 Multi-Arch: foreign
97 Pre-Depends: ${misc:Pre-Depends},
98-Depends: ${misc:Depends},
99+Depends: account-plugin-owncloud,
100+ ${misc:Depends},
101 ${shlibs:Depends},
102- account-plugin-owncloud
103 Description: Owncloud plugin for Storage Framework
104 A Storage Framework plugin providing access to Owncloud servers.
105
106=== modified file 'src/CMakeLists.txt'
107--- src/CMakeLists.txt 2016-09-27 07:08:19 +0000
108+++ src/CMakeLists.txt 2016-09-28 15:26:45 +0000
109@@ -28,3 +28,8 @@
110 target_link_libraries(storage-provider-owncloud
111 dav-provider-lib
112 )
113+
114+install(
115+ TARGETS storage-provider-owncloud
116+ RUNTIME DESTINATION "${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME}"
117+)
118
119=== modified file 'src/OwncloudProvider.cpp'
120--- src/OwncloudProvider.cpp 2016-09-22 06:40:07 +0000
121+++ src/OwncloudProvider.cpp 2016-09-28 15:26:45 +0000
122@@ -15,8 +15,8 @@
123
124 QUrl OwncloudProvider::base_url(Context const& ctx) const
125 {
126- Q_UNUSED(ctx);
127- return QUrl("http://localhost:8080/");
128+ const auto& creds = boost::get<PasswordCredentials>(ctx.credentials);
129+ return QUrl(QStringLiteral("http://localhost:8888/owncloud/remote.php/dav/files/%1/").arg(QString::fromStdString(creds.username)));
130 }
131
132 QNetworkReply *OwncloudProvider::send_request(
133@@ -25,9 +25,13 @@
134 {
135 Q_UNUSED(ctx);
136
137- const auto credentials = QByteArrayLiteral("user:pass");
138+ const auto& creds = boost::get<PasswordCredentials>(ctx.credentials);
139+ const auto credentials = QByteArray::fromStdString(creds.username + ":" +
140+ creds.password);
141 request.setRawHeader(QByteArrayLiteral("Authorization"),
142 QByteArrayLiteral("Basic ") + credentials.toBase64());
143+ printf("Sending request to %s with credentials %s\n",
144+ request.url().toEncoded().constData(), credentials.constData());
145 QNetworkReply *reply = network_->sendCustomRequest(request, verb, data);
146 return reply;
147 }
148
149=== modified file 'src/main.cpp'
150--- src/main.cpp 2016-09-22 06:40:07 +0000
151+++ src/main.cpp 2016-09-28 15:26:45 +0000
152@@ -8,7 +8,7 @@
153 int main(int argc, char **argv)
154 {
155 string const bus_name = "com.canonical.StorageFramework.Provider.OwnCloud";
156- string const account_service_id = "google-drive-scope"; //"storage-provider-owncloud";
157+ string const account_service_id = "storage-provider-owncloud";
158
159 Server<OwncloudProvider> server(bus_name, account_service_id);
160 server.init(argc, argv);
161
162=== modified file 'tests/davprovider/davprovider_test.cpp'
163--- tests/davprovider/davprovider_test.cpp 2016-09-27 06:28:45 +0000
164+++ tests/davprovider/davprovider_test.cpp 2016-09-28 15:26:45 +0000
165@@ -41,7 +41,8 @@
166 unity::storage::provider::Context const& ctx) const override
167 {
168 const auto& creds = boost::get<PasswordCredentials>(ctx.credentials);
169- const auto credentials = QByteArray::fromStdString(creds.username + ":" + creds.password);;
170+ const auto credentials = QByteArray::fromStdString(creds.username + ":" +
171+ creds.password);
172 request.setRawHeader(QByteArrayLiteral("Authorization"),
173 QByteArrayLiteral("Basic ") + credentials.toBase64());
174 return network_->sendCustomRequest(request, verb, data);
175@@ -65,7 +66,7 @@
176 dav_env_.reset(new DavEnvironment(tmp_dir_->path()));
177 provider_env_.reset(new ProviderEnvironment(
178 unique_ptr<ProviderBase>(new TestDavProvider(dav_env_->base_url())),
179- 3, *dbus_env_));
180+ 1, *dbus_env_));
181 }
182
183 void TearDown() override
184
185=== modified file 'tests/utils/ProviderEnvironment.cpp'
186--- tests/utils/ProviderEnvironment.cpp 2016-09-19 11:01:16 +0000
187+++ tests/utils/ProviderEnvironment.cpp 2016-09-28 15:26:45 +0000
188@@ -1,5 +1,7 @@
189 #include "ProviderEnvironment.h"
190
191+#include <unity/storage/provider/ProviderBase.h>
192+
193 #include <cassert>
194
195 using namespace std;
196
197=== modified file 'tests/utils/fake-online-accounts-daemon.py'
198--- tests/utils/fake-online-accounts-daemon.py 2016-09-19 06:19:34 +0000
199+++ tests/utils/fake-online-accounts-daemon.py 2016-09-28 15:26:45 +0000
200@@ -81,18 +81,23 @@
201 }, signature="sv")
202
203 class Account:
204- def __init__(self, account_id, display_name, service_id, credentials):
205+ def __init__(self, account_id, display_name, service_id, credentials, settings=None):
206 self.account_id = account_id
207 self.display_name = display_name
208 self.service_id = service_id
209 self.credentials = credentials
210+ self.settings = settings
211
212 def serialise(self):
213- return (dbus.UInt32(self.account_id), dbus.Dictionary({
214+ account_info = dbus.Dictionary({
215 "displayName": dbus.String(self.display_name),
216 "serviceId": dbus.String(self.service_id),
217 "authMethod": dbus.Int32(self.credentials.method),
218- }, signature="sv"))
219+ }, signature="sv")
220+ if self.settings is not None:
221+ for key, value in self.settings.items():
222+ account_info['settings/' + key] = value
223+ return (dbus.UInt32(self.account_id), account_info)
224
225 class Manager(dbus.service.Object):
226 def __init__(self, connection, object_path, accounts):
227@@ -155,16 +160,9 @@
228
229 if __name__ == "__main__":
230 accounts = [
231- Account(1, "OAuth1 account", "oauth1-service",
232- OAuth1("consumer_key", "consumer_secret", "token", "token_secret")),
233- Account(2, "OAuth2 account", "oauth2-service",
234- OAuth2("access_token", 0, ["scope1", "scope2"])),
235- Account(3, "Password account", "password-service",
236- Password("user", "pass")),
237- Account(42, "Fake google account", "google-drive-scope",
238- OAuth2("fake-google-access-token", 0, [])),
239- Account(99, "Fake mcloud account", "com.canonical.scopes.mcloud_mcloud_mcloud",
240- OAuth2("fake-mcloud-access-token", 0, [])),
241+ Account(1, "Owncloud", "storage-provider-owncloud",
242+ Password("user", "pass"),
243+ {"host": "http://localhost:8888/owncloud/"}),
244 ]
245 server = Server(accounts)
246 server.run()

Subscribers

People subscribed via source and target branches