GSoC'17 : DropBox V2 Integration

Hello,
I'm Anudit Verma, a final year CS undergrad from University School of Information, Communication and Technology (USICT), Delhi, India. I am an avid FOSS enthusiast, primarily concerned with developing and learning new possibilities that would help nurture and contribute significantly to the open-source community. I have worked earlier on a GSoC project with CiviCRM, in helping them integrate OSDI API into their system, my project can be seen here. PHP is a part of my skill set, I am very well versed in working with APIs, you can know more about me at anudit.in/aboutme

I am interested in one of the curated idea present on the current(2017) idea list, titled "DropBox v2 integration". Also I am interested in knowing and getting in contact with potential mentors for this idea. For a start, I am getting to know more about ownCloud through the documentation and GitHub repos to get myself acquainted with the code base. I want to learn more about this community and start my contribution soon, could anyone please provide me with more links and resources ? where I can learn a bit more about ownCloud, also it would be great if I can have more leads about the idea I am interested in.

Thank you in advance, looking forward to get more community interaction.

3 Likes

Try starting with a development environment: https://doc.owncloud.org/server/9.2/developer_manual/general/devenv.html.
Then try mounting Dropbox with the current external storage app (it's still using v1). Docs about mounting here: https://doc.owncloud.org/server/9.1/admin_manual/configuration_files/external_storage/dropbox.html?highlight=dropbox

For the Dropbox v2 there is a description in the ticket: https://github.com/owncloud/core/issues/25969.
Ideal would be to first develop a Flysystem plugin (or adjust their v1 plugin) to support Dropbox v2 API: https://github.com/thephpleague/flysystem-dropbox/issues/14

Then use this plugin within ownCloud to mount Dropbox.
The old Dropbox connection code is here: https://github.com/owncloud/core/blob/v9.1.4/apps/files_external/lib/Lib/Backend/Dropbox.php and here https://github.com/owncloud/core/blob/v9.1.4/apps/files_external/lib/Lib/Storage/Dropbox.php. You might notice that this one does NOT use flysystem.

The new Dropbox v2 external storage backend for ownCloud must be developed as a new ownCloud app "files_external_dropbox" and uses the flysystem Dropbox v2 plugin. Here is an example ownCloud app that uses Flysystem for FTP, it should be possible to use it as inspiration to do the same for Dropbox: https://github.com/owncloud/files_external_ftp.

Important: the new app must be able to reuse the Dropbox configuration from existing mounts when upgrading from older ownCloud versions.

So here's a summary of the plan:

  1. Port Flysystem Dropbox v1 adapter to v2: https://github.com/thephpleague/flysystem-dropbox/issues/14
  2. Develop a new ownCloud app "files_external_dropbox" that uses the adapter from step 1 to mount Dropbox in ownCloud.
1 Like

An empty repository has been created for that purpose: https://github.com/owncloud/files_external_dropbox

Hi Vincent,
Thanks for the reply, here are my updates.

I started with setup-ing the development version from GitHub on Apache 2.4.18 server, also I have made sure that I have all the server requirements and the prerequisites, installed some of the missing PHP packages manually which were required, I am getting some errors while pulling the dependencies in /var/www/core, few of the packages were unable to download and have failed.

The make process ends with the following lines,

Makefile:159: recipe for target 'core/vendor' failed
make: *** [core/vendor] Error 1

Could you please help me out? I guess I might have missed something that I shouldn't, I am really interested in moving further.

Thanks in advance.

i am yash jain student of 2nd year cs so i would like to work on the dropbox v2 integration . as i am new to the world of open source therefore i would like to know which direction i do need to start ,I selected that project as it is one of my skill set so give me initial direction.

This works for me. Do you have internet connection issues ?

Hi again Vincent, I think the Internet connection here is fine, well I am on my University's T1 line, however I will try to setup the dev environment again, may be this time I will try it with a different connection.

EDIT: I have tried it again, still getting the same exit code, I will see if I can get some solution online or may be move to IRC now for help.

Hello, I was able to setup the development environment and also created the dropbox app by following the instruction given in Dropbox setup
But there seems to be some error because the dropbox storage could not be mounted properly. Dropbox Error

Here is the response sent by the backend server
{
"authMechanism": "oauth1::oauth1",
"backend": "dropbox",
"backendOptions": {
"app_key": "m5tpxvopcgxwcop",
"app_secret": "secret",
"configured": "false",
"token": "PZyIuaByXHTJetgr",
"token_secret": "cskEzluB5zr8rr5k"
},
"id": 1,
"mountOptions": {
"enable_sharing": true,
"encoding_compatibility": false,
"encrypt": true,
"filesystem_check_changes": 1,
"previews": true
},
"mountPoint": "/Dropbox",
"priority": 100,
"status": 1,
"statusMessage": "Exception: Creating Dropbox storage failed",
"type": "system",
"userProvided": false
}

1 Like

I suggest you check the owncloud.log for possibly more detailed error messages. Maybe you didn't setup the Dropbox app properly.

Earlier I have tried ownCloud with the VM provided at https://owncloud.org/install/#edition. Today I setup the development environment on Ubuntu 16.04 and was able to run ownCloud successfully by building the source. Then I started integrating Dropbox with ownCloud following the link provided by @PVince81. After granting access to the ownCloud from the Dropbox following error occurred.

Transactional file locking should be configured to use memory-based locking, not the default slow database-based locking. See the documentation ↗ for more information.

You are accessing this site via HTTP. We strongly suggest you configure your server to require using HTTPS instead as described in our security tips.

Then I followed https://doc.owncloud.org/server/10.0/admin_manual/configuration_server/harden_server.html#use-https to enable HTTPS for ownCloud. But I cannot understand the method mentioned in Enable HTTP Strict Transport Security. Where do I have to enter

<IfModule mod_headers.c>
  Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>

lines. Do I have to edit the /etc/apache2/sites-available/default-ssl.conf? But that file contains a <VirtualHost _default_:443> entry but not a <VirtualHost *:443> entry as mentioned in the above link. Can anyone please help me to solve this issue?

I was able to resolve above issues myself by setting up HTTPS, enabling SSL on my local apache server. Then I enabled memory based locking using Redis also. Now there are no errors in the settings page. But when I click on the Dropbox folder in the Dropbox files app, I get the following error.

@PVince81 Can you please help me with this error?